name: Continuous integration icons on: push: branches: - main paths: - icons/**/*.svg workflow_dispatch: inputs: version: description: Version required: true tag: required: true description: NPM tag default: 'latest' type: choice options: - latest - next - beta - alpha permissions: id-token: write # Required for OIDC contents: write # This is added to make sure we wait until last release is done, this is needed for the font-build process concurrency: group: continuous-integration jobs: check-dispatch-gate: if: github.repository == 'lucide-icons/lucide' && startsWith(github.event.head_commit.message, 'feat(icons)') && github.event_name != 'workflow_dispatch' runs-on: ubuntu-latest outputs: RELEASE_ENVIRONMENT: ${{ steps.environment.outputs.RELEASE_ENVIRONMENT }} steps: - uses: actions/checkout@v6 - name: Fetch tags run: git fetch --all --tags - name: Check if latest tag was created today id: environment run: | LATEST_TAG=$(git tag --sort=-v:refname | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | head -n 1) TAG_DATE=$(git log -1 --format=%cs "$LATEST_TAG") TODAY=$(date +%Y-%m-%d) if [ "$TAG_DATE" == "$TODAY" ]; then echo "::warning::A release tag already exists for today ($TODAY): $LATEST_TAG. Manual approval will be required to proceed." echo "RELEASE_ENVIRONMENT=Icon Release Gated" >> $GITHUB_OUTPUT else echo "RELEASE_ENVIRONMENT=Icon Release" >> $GITHUB_OUTPUT fi create-release: if: github.repository == 'lucide-icons/lucide' needs: check-dispatch-gate environment: ${{ needs.check-dispatch-gate.outputs.RELEASE_ENVIRONMENT }} runs-on: ubuntu-latest outputs: VERSION: ${{ steps.new-version.outputs.NEW_VERSION }} steps: - uses: actions/checkout@v6 - uses: pnpm/action-setup@v4 - uses: actions/setup-node@v6 with: cache: 'pnpm' node-version-file: 'package.json' - name: Install dependencies run: pnpm install --frozen-lockfile - name: Fetch tags run: git fetch --all --tags - name: Get latest tag id: latest-tag run: echo "LATEST_TAG=$(git tag --sort=-v:refname | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | head -n 1)" >> $GITHUB_OUTPUT - name: Log latest tag run: echo '${{ steps.latest-tag.outputs.LATEST_TAG }}' - name: Check if we can patch run: pnpm semver $LATEST_TAG -i minor env: LATEST_TAG: ${{ steps.latest-tag.outputs.LATEST_TAG }} - name: Create new version id: new-version run: echo "NEW_VERSION=$(pnpm semver $LATEST_TAG -i minor)" >> $GITHUB_OUTPUT env: LATEST_TAG: ${{ steps.latest-tag.outputs.LATEST_TAG }} - name: Check output run: | echo '${{ steps.new-version.outputs.NEW_VERSION }}' echo '${{ steps.change-log.outputs.CHANGE_LOG }}' - name: Create Release uses: softprops/action-gh-release@v1 with: tag_name: ${{ steps.new-version.outputs.NEW_VERSION }} name: Version ${{ steps.new-version.outputs.NEW_VERSION }} generate_release_notes: true start-release: if: github.repository == 'lucide-icons/lucide' needs: create-release uses: './.github/workflows/release.yml' secrets: inherit with: version: ${{ needs.create-release.outputs.VERSION }} dispatch-release: if: github.event_name == 'workflow_dispatch' uses: './.github/workflows/release.yml' secrets: inherit with: version: ${{ inputs.version }} tag: ${{ inputs.tag }}