Skip to content

Manual Release

Manual Release #5

name: Manual Release
on:
workflow_dispatch:
inputs:
version-level:
description: 'Select Version Level'
required: true
type: choice
options:
- alpha # Increase the alpha pre-version (x.y.z-alpha.M)
- beta # Increase the beta pre-version (x.y.z-beta.M)
- patch # Increase the patch version (x.y.z)
- minor # Increase the minor version (x.y.0)
- major # Increase the major version (x.0.0)
- release # Remove the pre-version, ie remove alpha/beta/rc (x.y.z)
- rc # Increase the rc pre-version (x.y.z-rc.M)
jobs:
release:
runs-on: ubuntu-latest
outputs:
version: ${{ env.NEW_VERSION }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: recursive
ssh-key: ${{ secrets.PUBLISHER_SSH_KEY }}
- uses: DeterminateSystems/nix-installer-action@v4
- uses: DeterminateSystems/magic-nix-cache-action@v2
- name: Install NodeJS v22
uses: actions/setup-node@v4
with:
node-version: 22
cache: 'npm'
- run: nix develop -c rainix-rs-prelude
- name: Run rainix-rs-test
run: nix develop -c rainix-rs-test
- name: Build JS Bindings
run: nix develop -c build-js-bindings
- name: Run JS Tests
run: nix develop -c test-js-bindings
- name: Git Config
run: |
git config --global user.email "${{ secrets.CI_GIT_EMAIL }}"
git config --global user.name "${{ secrets.CI_GIT_USER }}"
- name: Publish to crates.io
run: nix develop -c cargo release --no-confirm --execute --no-tag --workspace ${{ inputs.version-level }}
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
# set npm version to rust crate version
- name: Set Version
run: echo "NEW_VERSION=$(nix develop -c npm version $(node ./scripts/version.js) --no-git-tag-version)" >> $GITHUB_ENV
# Commit changes and tag
- name: Commit And Tag
run: |
git add "package.json"
git add "package-lock.json"
git commit -m "Release ${{ env.NEW_VERSION }}"
git tag ${{ env.NEW_VERSION }}
# Push the commit to remote
- name: Push Changes To Remote
run: |
git push origin
git push -u origin ${{ env.NEW_VERSION }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Create npm package tarball to put in release files
- name: Create NPM Package Tarball
run: echo "NPM_PACKAGE=$(nix develop -c npm pack --silent)" >> $GITHUB_ENV
- name: Rename NPM Package Tarball
run: mv ${{ env.NPM_PACKAGE }} dotrain_npm_package_${{ env.NEW_VERSION }}.tgz
# publish to npm
- name: Publish To NPM
uses: JS-DevTools/npm-publish@v1
with:
token: ${{ secrets.NPM_TOKEN }}
access: public
# Create gitHub release with npm tarball
- name: Create GitHub Release
id: gh_release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ env.NEW_VERSION }}
name: Release ${{ env.NEW_VERSION }}
files: dotrain_npm_package_${{ env.NEW_VERSION }}.tgz
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
release_bin:
name: Release dotrain cli ${{ matrix.platform }}_${{ matrix.arch }} bin
needs: release
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
include:
- runner: ubuntu-22.04
target: x86_64-unknown-linux-gnu
platform: linux
arch: x86_64
# - runner: ubuntu-22.04
# target: aarch64-unknown-linux-gnu
# platform: linux
# arch: arm64
- runner: macos-13
target: x86_64-apple-darwin
platform: darwin
arch: x86_64
- runner: macos-14
target: aarch64-apple-darwin
platform: darwin
arch: arm64
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: recursive
ssh-key: ${{ secrets.PUBLISHER_SSH_KEY }}
- uses: DeterminateSystems/nix-installer-action@v4
- uses: DeterminateSystems/magic-nix-cache-action@v2
- name: Git Config
run: |
git config --global user.email "${{ secrets.CI_GIT_EMAIL }}"
git config --global user.name "${{ secrets.CI_GIT_USER }}"
- name: Pull Release Commit
run: git pull origin
- name: Build Bin
run: nix develop -c cargo build -r --features cli --bin dotrain --target "${{ matrix.target }}"
- run: cp ./target/${{ matrix.target }}/release/dotrain ./dotrain_cli_${{ needs.release.outputs.version }}_${{ matrix.platform }}_${{ matrix.arch }}
- name: Add Bin To Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ needs.release.outputs.version }}
files: dotrain_cli_${{ needs.release.outputs.version }}_${{ matrix.platform }}_${{ matrix.arch }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}