From 8fcf757c5c6c041a12d1b7ef39bf2bcbddc988f4 Mon Sep 17 00:00:00 2001 From: Shantur Rathore Date: Mon, 8 Dec 2025 14:49:39 +0000 Subject: [PATCH] Share release workflows --- .github/workflows/dev-release.yml | 57 +----------------- .github/workflows/release.yml | 72 +---------------------- .github/workflows/reusable-release.yml | 80 ++++++++++++++++++++++++++ 3 files changed, 85 insertions(+), 124 deletions(-) create mode 100644 .github/workflows/reusable-release.yml diff --git a/.github/workflows/dev-release.yml b/.github/workflows/dev-release.yml index ca8d670b..aa245292 100644 --- a/.github/workflows/dev-release.yml +++ b/.github/workflows/dev-release.yml @@ -7,61 +7,10 @@ permissions: id-token: write contents: write -env: - NODE_VERSION: 20 - jobs: - prepare-dev: - runs-on: ubuntu-latest - outputs: - version: ${{ steps.versions.outputs.version }} - tag: ${{ steps.versions.outputs.tag }} - release_name: ${{ steps.versions.outputs.release_name }} - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup Node - uses: actions/setup-node@v4 - with: - node-version: ${{ env.NODE_VERSION }} - - - name: Compute dev versions - id: versions - run: | - BASE_VERSION=$(node -p "require('./package.json').version") - DEV_VERSION="${BASE_VERSION}-dev" - TAG="v${DEV_VERSION}" - echo "version=$DEV_VERSION" >> "$GITHUB_OUTPUT" - echo "tag=$TAG" >> "$GITHUB_OUTPUT" - echo "release_name=$TAG" >> "$GITHUB_OUTPUT" - - - name: Create GitHub release - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - TAG: ${{ steps.versions.outputs.tag }} - run: | - if gh release view "$TAG" >/dev/null 2>&1; then - echo "Release $TAG already exists" - else - gh release create "$TAG" --title "$TAG" --generate-notes - fi - - build-and-upload: - needs: prepare-dev - uses: ./.github/workflows/build-and-upload.yml + dev-release: + uses: ./.github/workflows/reusable-release.yml with: - version: ${{ needs.prepare-dev.outputs.version }} - tag: ${{ needs.prepare-dev.outputs.tag }} - release_name: ${{ needs.prepare-dev.outputs.release_name }} - secrets: inherit - - publish-server: - needs: - - prepare-dev - - build-and-upload - uses: ./.github/workflows/manual-npm-publish.yml - with: - version: ${{ needs.prepare-dev.outputs.version }} + version_suffix: -dev dist_tag: dev secrets: inherit diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a8a8eac7..dfd07e8e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,77 +9,9 @@ permissions: id-token: write contents: write -env: - NODE_VERSION: 20 - jobs: - prepare-release: - runs-on: ubuntu-latest - outputs: - version: ${{ steps.get_version.outputs.version }} - tag: ${{ steps.ensure_tag.outputs.tag }} - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup Node - uses: actions/setup-node@v4 - with: - node-version: ${{ env.NODE_VERSION }} - - - name: Read version - id: get_version - run: | - VERSION=$(node -p "require('./package.json').version") - echo "version=$VERSION" >> "$GITHUB_OUTPUT" - - - name: Ensure git tag - id: ensure_tag - env: - VERSION: ${{ steps.get_version.outputs.version }} - run: | - TAG="v${VERSION}" - git fetch --tags - if git rev-parse "$TAG" >/dev/null 2>&1; then - echo "tag=$TAG" >> "$GITHUB_OUTPUT" - echo "Tag $TAG already exists" - else - git config user.name "github-actions[bot]" - git config user.email "github-actions[bot]@users.noreply.github.com" - git tag "$TAG" - git push origin "$TAG" - echo "tag=$TAG" >> "$GITHUB_OUTPUT" - echo "Created tag $TAG" - fi - - - name: Ensure GitHub release - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - TAG: ${{ steps.ensure_tag.outputs.tag }} - VERSION: ${{ steps.get_version.outputs.version }} - run: | - if gh release view "$TAG" >/dev/null 2>&1; then - echo "Release $TAG already exists" - else - gh release create "$TAG" --title "CodeNomad v${VERSION}" --generate-notes - fi - - build-and-upload: - needs: prepare-release - uses: ./.github/workflows/build-and-upload.yml + release: + uses: ./.github/workflows/reusable-release.yml with: - version: ${{ needs.prepare-release.outputs.version }} - tag: ${{ needs.prepare-release.outputs.tag }} - release_name: CodeNomad v${{ needs.prepare-release.outputs.version }} - secrets: inherit - - publish-server: - needs: - - prepare-release - - build-and-upload - if: ${{ needs.build-and-upload.result == 'success' }} - uses: ./.github/workflows/manual-npm-publish.yml - with: - version: ${{ needs.prepare-release.outputs.version }} dist_tag: latest secrets: inherit diff --git a/.github/workflows/reusable-release.yml b/.github/workflows/reusable-release.yml new file mode 100644 index 00000000..026fd8f3 --- /dev/null +++ b/.github/workflows/reusable-release.yml @@ -0,0 +1,80 @@ +name: Reusable Release + +on: + workflow_call: + inputs: + version_suffix: + description: "Suffix appended to package.json version" + required: false + default: "" + type: string + dist_tag: + description: "npm dist-tag to publish under" + required: false + default: dev + type: string + +permissions: + id-token: write + contents: write + +env: + NODE_VERSION: 20 + +jobs: + prepare-release: + runs-on: ubuntu-latest + outputs: + version: ${{ steps.versions.outputs.version }} + tag: ${{ steps.versions.outputs.tag }} + release_name: ${{ steps.versions.outputs.release_name }} + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + + - name: Compute release versions + id: versions + env: + VERSION_SUFFIX: ${{ inputs.version_suffix }} + run: | + BASE_VERSION=$(node -p "require('./package.json').version") + VERSION="${BASE_VERSION}${VERSION_SUFFIX}" + TAG="v${VERSION}" + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + echo "tag=$TAG" >> "$GITHUB_OUTPUT" + echo "release_name=$TAG" >> "$GITHUB_OUTPUT" + + - name: Create GitHub release + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + TAG: ${{ steps.versions.outputs.tag }} + run: | + if gh release view "$TAG" >/dev/null 2>&1; then + echo "Release $TAG already exists" + else + gh release create "$TAG" --title "$TAG" --generate-notes + fi + + build-and-upload: + needs: prepare-release + uses: ./.github/workflows/build-and-upload.yml + with: + version: ${{ needs.prepare-release.outputs.version }} + tag: ${{ needs.prepare-release.outputs.tag }} + release_name: ${{ needs.prepare-release.outputs.release_name }} + secrets: inherit + + publish-server: + needs: + - prepare-release + - build-and-upload + uses: ./.github/workflows/manual-npm-publish.yml + with: + version: ${{ needs.prepare-release.outputs.version }} + dist_tag: ${{ inputs.dist_tag }} + secrets: inherit