- Notifications
You must be signed in to change notification settings - Fork 1
feat: Improve release process using github workflow #18
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
+312 −49
Merged
Changes from all commits
Commits
Show all changes
9 commits Select commit Hold shift + click to select a range
502d8b3
Create release workflow
Luke-Sanderson 2bc2eff
Add changelog
Luke-Sanderson 9eb7a17
Add update to third-party license and remove publish job in ci.yml
Luke-Sanderson 3963106
update release to include .node files in github release
Luke-Sanderson bb0254a
Update to author commits by github-actions bot
Luke-Sanderson 6f588ef
Use git-cliff for changelog
Luke-Sanderson 7cd7cc3
Add the changelog to the npm package
Luke-Sanderson d8bffcc
Change to commit from apix bot
Luke-Sanderson 813e30a
Update checkout token
Luke-Sanderson File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,213 @@ | ||
name: Release | ||
| ||
on: | ||
workflow_dispatch: | ||
inputs: | ||
version: | ||
description: 'Version to release (e.g., 1.0.0)' | ||
required: true | ||
type: string | ||
| ||
env: | ||
DEBUG: napi:* | ||
APP_NAME: atlas-local | ||
MACOSX_DEPLOYMENT_TARGET: '10.13' | ||
| ||
jobs: | ||
update-version: | ||
name: Update Version | ||
runs-on: ubuntu-latest | ||
outputs: | ||
version: ${{ steps.version.outputs.version }} | ||
steps: | ||
- name: Set Apix Bot token | ||
id: app-token | ||
uses: mongodb/apix-action/token@6c3fde402c21942fa46cde003f190c2b23c59530 | ||
with: | ||
app-id: ${{ secrets.APIXBOT_APP_ID }} | ||
private-key: ${{ secrets.APIXBOT_APP_PEM }} | ||
- uses: actions/checkout@v5 | ||
with: | ||
token: ${{ steps.app-token.outputs.token }} | ||
fetch-depth: 0 | ||
- name: Setup node | ||
uses: actions/setup-node@v4 | ||
with: | ||
node-version: 22 | ||
cache: yarn | ||
- name: Install Rust toolchain | ||
uses: dtolnay/rust-toolchain@stable | ||
with: | ||
toolchain: stable | ||
targets: x86_64-unknown-linux-gnu | ||
- name: Install dependencies | ||
run: yarn install | ||
- name: Install cargo tools for license verification | ||
run: | | ||
cargo install --locked --version 0.8.2 cargo-about | ||
- name: Update package.json version | ||
run: | | ||
npm version ${{ github.event.inputs.version }} --no-git-tag-version | ||
- name: Update Cargo.toml version | ||
run: | | ||
sed -i 's/^version = ".*"/version = "${{ github.event.inputs.version }}"/' Cargo.toml | ||
- name: Update third-party licenses | ||
run: | | ||
cargo about generate about.hbs > LICENSE-3RD-PARTY.txt | ||
- name: Generate changelog | ||
uses: orhun/git-cliff-action@v4 | ||
with: | ||
config: cliff.toml | ||
args: --verbose | ||
env: | ||
OUTPUT: CHANGELOG.md | ||
GITHUB_REPO: ${{ github.repository }} | ||
- name: Build to update generated files | ||
run: yarn build --target x86_64-unknown-linux-gnu --use-napi-cross | ||
- name: Commit version changes | ||
run: | | ||
git config --global user.name "${{ steps.app-token.outputs.user-name }}" | ||
git config --global user.email "${{ steps.app-token.outputs.user-email }}" | ||
git add package.json Cargo.toml index.js index.d.ts CHANGELOG.md LICENSE-3RD-PARTY.txt | ||
git commit -m "${{ github.event.inputs.version }}" | ||
git push | ||
- name: Set version output | ||
id: version | ||
run: echo "version=${{ github.event.inputs.version }}" >> $GITHUB_OUTPUT | ||
| ||
build: | ||
name: Build Release | ||
needs: update-version | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
settings: | ||
- host: macos-latest | ||
target: x86_64-apple-darwin | ||
build: yarn build --target x86_64-apple-darwin | ||
- host: windows-latest | ||
build: yarn build --target x86_64-pc-windows-msvc | ||
target: x86_64-pc-windows-msvc | ||
- host: ubuntu-latest | ||
target: x86_64-unknown-linux-gnu | ||
build: yarn build --target x86_64-unknown-linux-gnu --use-napi-cross | ||
- host: macos-latest | ||
target: aarch64-apple-darwin | ||
build: yarn build --target aarch64-apple-darwin | ||
- host: ubuntu-latest | ||
target: aarch64-unknown-linux-gnu | ||
build: yarn build --target aarch64-unknown-linux-gnu --use-napi-cross | ||
runs-on: ${{ matrix.settings.host }} | ||
steps: | ||
- uses: actions/checkout@v5 | ||
with: | ||
ref: main | ||
- name: Setup node | ||
uses: actions/setup-node@v4 | ||
with: | ||
node-version: 22 | ||
cache: yarn | ||
- name: Install Rust toolchain | ||
uses: dtolnay/rust-toolchain@stable | ||
with: | ||
toolchain: stable | ||
targets: ${{ matrix.settings.target }} | ||
- name: Cache cargo | ||
uses: actions/cache@v4 | ||
with: | ||
path: | | ||
~/.cargo/registry/index/ | ||
~/.cargo/registry/cache/ | ||
~/.cargo/git/db/ | ||
~/.napi-rs | ||
.cargo-cache | ||
target/ | ||
key: ${{ matrix.settings.target }}-cargo-${{ matrix.settings.host }} | ||
- uses: mlugg/setup-zig@v2 | ||
if: ${{ contains(matrix.settings.target, 'musl') }} | ||
with: | ||
version: 0.14.1 | ||
- name: Install cargo-zigbuild | ||
uses: taiki-e/install-action@v2 | ||
if: ${{ contains(matrix.settings.target, 'musl') }} | ||
env: | ||
GITHUB_TOKEN: ${{ github.token }} | ||
with: | ||
tool: cargo-zigbuild | ||
- name: Setup toolchain | ||
run: ${{ matrix.settings.setup }} | ||
if: ${{ matrix.settings.setup }} | ||
shell: bash | ||
- name: Install dependencies | ||
run: yarn install | ||
- name: Build | ||
run: ${{ matrix.settings.build }} | ||
shell: bash | ||
- name: Upload artifact | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: bindings-${{ matrix.settings.target }} | ||
path: | | ||
${{ env.APP_NAME }}.*.node | ||
${{ env.APP_NAME }}.*.wasm | ||
if-no-files-found: error | ||
| ||
publish: | ||
name: Publish Release | ||
runs-on: ubuntu-latest | ||
permissions: | ||
contents: write | ||
id-token: write | ||
needs: [update-version, build] | ||
steps: | ||
- uses: actions/checkout@v5 | ||
with: | ||
ref: main | ||
- name: Setup node | ||
uses: actions/setup-node@v4 | ||
with: | ||
node-version: 22 | ||
cache: yarn | ||
- name: Install dependencies | ||
run: yarn install | ||
- name: Create npm dirs | ||
run: yarn napi create-npm-dirs | ||
- name: Download all artifacts | ||
uses: actions/download-artifact@v5 | ||
with: | ||
path: artifacts | ||
- name: Move artifacts | ||
run: yarn artifacts | ||
- name: List packages | ||
run: ls -R ./npm | ||
shell: bash | ||
- name: Create GitHub Release | ||
uses: softprops/action-gh-release@v2 | ||
with: | ||
tag_name: v${{ needs.update-version.outputs.version }} | ||
name: Release v${{ needs.update-version.outputs.version }} | ||
files: artifacts/bindings-*/*.node | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
- name: Publish to NPM | ||
run: | | ||
npm config set provenance true | ||
COMMIT_MSG=$(git log -1 --pretty=%B) | ||
if echo "$COMMIT_MSG" | grep -E "^[0-9]+\.[0-9]+\.[0-9]+$" > /dev/null; | ||
then | ||
echo "Publishing stable release to latest tag" | ||
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc | ||
npm publish --access public | ||
elif echo "$COMMIT_MSG" | grep -E "^[0-9]+\.[0-9]+\.[0-9]+" > /dev/null; | ||
then | ||
echo "Publishing pre-release to next tag" | ||
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc | ||
npm publish --tag next --access public | ||
else | ||
echo "Invalid release tag format: '$COMMIT_MSG'" | ||
echo "Expected format: X.Y.Z or X.Y.Z-suffix" | ||
echo "Skipping publish" | ||
exit 0 | ||
fi | ||
env: | ||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
# git-cliff ~ configuration file | ||
# https://git-cliff.org/docs/configuration | ||
| ||
| ||
[changelog] | ||
# A Tera template to be rendered for each release in the changelog. | ||
# See https://keats.github.io/tera/docs/#introduction | ||
body = """ | ||
{% if version %}\ | ||
## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} | ||
{% else %}\ | ||
## [unreleased] | ||
{% endif %}\ | ||
{% for group, commits in commits | group_by(attribute="group") %} | ||
### {{ group | striptags | trim | upper_first }} | ||
{% for commit in commits %} | ||
- {% if commit.scope %}*({{ commit.scope }})* {% endif %}\ | ||
{% if commit.breaking %}[**breaking**] {% endif %}\ | ||
{{ commit.message | upper_first }}\ | ||
{% endfor %} | ||
{% endfor %} | ||
""" | ||
# Remove leading and trailing whitespaces from the changelog's body. | ||
trim = true | ||
# Render body even when there are no releases to process. | ||
render_always = true | ||
# An array of regex based postprocessors to modify the changelog. | ||
postprocessors = [ | ||
{ pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](https://github.com/$GITHUB_REPO/issues/${2}))" }, | ||
] | ||
# render body even when there are no releases to process | ||
# render_always = true | ||
# output file path | ||
# output = "test.md" | ||
| ||
[git] | ||
# Parse commits according to the conventional commits specification. | ||
# See https://www.conventionalcommits.org | ||
conventional_commits = true | ||
# Exclude commits that do not match the conventional commits specification. | ||
filter_unconventional = true | ||
# Require all commits to be conventional. | ||
# Takes precedence over filter_unconventional. | ||
require_conventional = false | ||
# Split commits on newlines, treating each line as an individual commit. | ||
split_commits = false | ||
# An array of regex based parsers to modify commit messages prior to further processing. | ||
commit_preprocessors = [ | ||
# Replace issue numbers with link templates to be updated in `changelog.postprocessors`. | ||
#{ pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](<REPO>/issues/${2}))"}, | ||
# Check spelling of the commit message using https://github.com/crate-ci/typos. | ||
# If the spelling is incorrect, it will be fixed automatically. | ||
#{ pattern = '.*', replace_command = 'typos --write-changes -' }, | ||
] | ||
# Prevent commits that are breaking from being excluded by commit parsers. | ||
protect_breaking_commits = false | ||
# An array of regex based parsers for extracting data from the commit message. | ||
# Assigns commits to groups. | ||
# Optionally sets the commit's scope and can decide to exclude commits from further processing. | ||
commit_parsers = [ | ||
{ message = "^feat", group = "<!-- 0 -->🚀 Features" }, | ||
{ message = "^fix", group = "<!-- 1 -->🐛 Bug Fixes" }, | ||
{ message = "^doc", group = "<!-- 3 -->📚 Documentation" }, | ||
{ message = "^perf", group = "<!-- 4 -->⚡ Performance" }, | ||
{ message = "^refactor", group = "<!-- 2 -->🚜 Refactor" }, | ||
{ message = "^style", group = "<!-- 5 -->🎨 Styling" }, | ||
{ message = "^test", group = "<!-- 6 -->🧪 Testing" }, | ||
{ message = "^chore\\(release\\): prepare for", skip = true }, | ||
{ message = "^chore\\(deps.*\\)", skip = true }, | ||
{ message = "^chore\\(pr\\)", skip = true }, | ||
{ message = "^chore\\(pull\\)", skip = true }, | ||
{ message = "^chore|^ci", group = "<!-- 7 -->⚙️ Miscellaneous Tasks" }, | ||
{ body = ".*security", group = "<!-- 8 -->🛡️ Security" }, | ||
{ message = "^revert", group = "<!-- 9 -->◀️ Revert" }, | ||
{ message = ".*", group = "<!-- 10 -->💼 Other" }, | ||
] | ||
# Exclude commits that are not matched by any commit parser. | ||
filter_commits = false | ||
# An array of link parsers for extracting external references, and turning them into URLs, using regex. | ||
link_parsers = [ | ||
{ pattern = "#(\\d+)", href = "https://github.com/$GITHUB_REPO/issues/$1" } | ||
] | ||
# Include only the tags that belong to the current branch. | ||
use_branch_tags = false | ||
# Order releases topologically instead of chronologically. | ||
topo_order = false | ||
# Order releases topologically instead of chronologically. | ||
topo_order_commits = true | ||
# Order of commits in each group/release within the changelog. | ||
# Allowed values: newest, oldest | ||
sort_commits = "oldest" | ||
# Process submodules commits | ||
recurse_submodules = false |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit. This suggestion is invalid because no changes were made to the code. Suggestions cannot be applied while the pull request is closed. Suggestions cannot be applied while viewing a subset of changes. Only one suggestion per line can be applied in a batch. Add this suggestion to a batch that can be applied as a single commit. Applying suggestions on deleted lines is not supported. You must change the existing code in this line in order to create a valid suggestion. Outdated suggestions cannot be applied. This suggestion has been applied or marked resolved. Suggestions cannot be applied from pending reviews. Suggestions cannot be applied on multi-line comments. Suggestions cannot be applied while the pull request is queued to merge. Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.