diff --git a/.github/workflows/create-release-tag.yml b/.github/workflows/create-release-tag.yml index 43fe73b..70f9223 100644 --- a/.github/workflows/create-release-tag.yml +++ b/.github/workflows/create-release-tag.yml @@ -6,9 +6,12 @@ on: jobs: create-tag: runs-on: ubuntu-latest + outputs: + tag: ${{ steps.package-version.outputs.tag }} + tag-created: ${{ steps.create-tag.outputs.created }} permissions: contents: write - + steps: - name: Checkout code uses: actions/checkout@v4 @@ -49,6 +52,7 @@ jobs: fi - name: Create and push tag + id: create-tag if: steps.check-tag.outputs.exists == 'false' run: | git config user.name "github-actions[bot]" @@ -56,9 +60,20 @@ jobs: git tag -a "${{ steps.package-version.outputs.tag }}" -m "Release ${{ steps.package-version.outputs.tag }}" git push origin "${{ steps.package-version.outputs.tag }}" echo "Created and pushed tag ${{ steps.package-version.outputs.tag }}" + echo "created=true" >> $GITHUB_OUTPUT - name: Tag already exists if: steps.check-tag.outputs.exists == 'true' run: | echo "Tag ${{ steps.package-version.outputs.tag }} already exists. Skipping tag creation." echo "The release workflow may have already been triggered for this version." + + trigger-release: + needs: create-tag + if: needs.create-tag.outputs.tag-created == 'true' + uses: ./.github/workflows/release.yml + permissions: + contents: write + packages: write + with: + tag: ${{ needs.create-tag.outputs.tag }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index faadfb3..6dd5ccd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,6 +4,12 @@ on: push: tags: - 'v*' # Trigger on version tags like v1.0.0, v0.1.0, etc. + workflow_call: # Allow being triggered by other workflows + inputs: + tag: + description: 'Tag to release' + required: true + type: string env: REGISTRY: ghcr.io @@ -15,10 +21,21 @@ jobs: permissions: contents: write packages: write - + steps: + - name: Determine tag + id: tag + run: | + if [ -n "${{ inputs.tag }}" ]; then + echo "tag=${{ inputs.tag }}" >> $GITHUB_OUTPUT + else + echo "tag=${{ github.ref_name }}" >> $GITHUB_OUTPUT + fi + - name: Checkout code uses: actions/checkout@v4 + with: + ref: ${{ steps.tag.outputs.tag }} - name: Set up Node.js uses: actions/setup-node@v4 @@ -47,7 +64,7 @@ jobs: - name: Create build artifact run: | mkdir -p release-artifacts - tar -czf release-artifacts/odette-${{ github.ref_name }}.tar.gz \ + tar -czf release-artifacts/odette-${{ steps.tag.outputs.tag }}.tar.gz \ dist/ \ views/ \ public/ \ @@ -72,9 +89,9 @@ jobs: with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} tags: | - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=raw,value=latest,enable=${{ !contains(github.ref_name, '-') }} + type=semver,pattern={{version}},value=${{ steps.tag.outputs.tag }} + type=semver,pattern={{major}}.{{minor}},value=${{ steps.tag.outputs.tag }} + type=raw,value=latest,enable=${{ !contains(steps.tag.outputs.tag, '-') }} - name: Build and push Docker image uses: docker/build-push-action@v5 @@ -90,10 +107,11 @@ jobs: - name: Create GitHub Release uses: softprops/action-gh-release@v1 with: + tag_name: ${{ steps.tag.outputs.tag }} files: release-artifacts/* generate_release_notes: true draft: false - prerelease: ${{ contains(github.ref_name, '-') }} + prerelease: ${{ contains(steps.tag.outputs.tag, '-') }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -103,7 +121,7 @@ jobs: # runs-on: ubuntu-latest # needs: build-and-release # if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') - # + # # steps: # - name: Checkout code # uses: actions/checkout@v4