Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 56 additions & 8 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,67 @@ on:
branches:
- main

concurrency:
group: release
cancel-in-progress: false

permissions:
id-token: write # Required for OIDC. See https://docs.npmjs.com/trusted-publishers#step-2-configure-your-cicd-workflow
contents: read

jobs:
release-decision:
runs-on: ubuntu-latest
outputs:
should-release: ${{ steps.decision.outputs.should-release }}
steps:
- name: Decide release
id: decision
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
COMMITTER_EMAIL: ${{ github.event.head_commit.committer.email }}
COMMITTER_NAME: ${{ github.event.head_commit.committer.name }}
COMMIT_SHA: ${{ github.sha }}
shell: bash
run: |
echo "Commit: $COMMIT_SHA"
echo "Committer: $COMMITTER_NAME <$COMMITTER_EMAIL>"

# Skip if commit is from release bot (avoid infinite loop)
if [[ "$COMMITTER_EMAIL" == '[email protected]' ]]; then
echo "→ Skipping: commit is from release bot"
echo "should-release=false" >> "$GITHUB_OUTPUT"
exit 0
fi

# Check if commit comes from a PR merged to main
PR_JSON=$(gh pr list \
--repo "${{ github.repository }}" \
--search "$COMMIT_SHA is:merged base:main" \
--state merged \
--json number,title,url)

PR_COUNT=$(echo "$PR_JSON" | jq 'length')

if [[ "$PR_COUNT" -gt 0 ]]; then
echo "$PR_JSON" | jq -r '.[] | "→ Found PR #\(.number): \(.title)"'
echo "→ Release will proceed"
echo "should-release=true" >> "$GITHUB_OUTPUT"
else
echo "→ No merged PR found for this commit"
echo "should-release=false" >> "$GITHUB_OUTPUT"
fi

changelog:
needs: release-decision
if: ${{ needs.release-decision.outputs.should-release == 'true' }}
uses: "./.github/workflows/changelog.yml"
test:
needs: changelog
if: ${{ needs.changelog.outputs.release-type != 'no-release' }}
uses: "OpenTermsArchive/engine/.github/workflows/test.yml@main"
release:
needs: [ changelog, test ]
if: needs.changelog.outputs.release-type != 'no-release'
needs: test
runs-on: ubuntu-latest
steps:
- name: Checkout
Expand Down Expand Up @@ -50,8 +99,7 @@ jobs:
git commit -m "Release v${{ steps.release-changelog.outputs.version }}"
git tag v${{ steps.release-changelog.outputs.version }}

# Publish to NPM first, before pushing to repository
# If this fails, no changes are pushed to the repository, ensuring consistency
# Publish to NPM first, before pushing to repository. If this fails, no changes are pushed to the repository, ensuring consistency
- name: Publish to NPM public repository
run: npm publish --provenance

Expand All @@ -60,23 +108,23 @@ jobs:
run: git push origin main && git push --tags

- name: Create GitHub release
uses: softprops/action-gh-release@v2
uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2
with:
tag_name: v${{ steps.release-changelog.outputs.version }}
body: ${{ steps.release-changelog.outputs.content }}
token: ${{ secrets.RELEASE_BOT_GITHUB_TOKEN }}

- name: Trigger documentation deploy
uses: peter-evans/repository-dispatch@v2
uses: peter-evans/repository-dispatch@bf47d102fdb849e755b0b0023ea3e81a44b6f570 # v2
with:
token: ${{ secrets.TRIGGER_DOCS_DEPLOY_TOKEN }}
event-type: engine-release
repository: OpenTermsArchive/docs
client-payload: '{"version": "v${{ steps.release-changelog.outputs.version }}"}'

clean_changelog:
if: needs.changelog.outputs.release-type == 'no-release'
needs: [ changelog ]
needs: changelog
if: ${{ needs.changelog.outputs.release-type == 'no-release' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
Expand Down
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

All changes that impact users of this module are documented in this file, in the [Common Changelog](https://common-changelog.org) format with some additional specifications defined in the CONTRIBUTING file. This codebase adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## Unreleased [no-release]

_Modifications made in this changeset do not add, remove or alter any behavior, dependency, API or functionality of the software. They only change non-functional parts of the repository, such as the README file or CI workflows._

## 10.3.1 - 2026-01-13

> Development of this release was supported by [Reset Tech](https://www.reset.tech).
Expand Down
Loading