create tag before release #15
Workflow file for this run
This file contains 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
name: '[rs] Release (Rust)' | |
on: | |
push: | |
tags: | |
- 'rs/v*-rc' | |
env: | |
# see https://api.github.com/users/github-actions%5Bbot%5D | |
GITHUB_USER_NAME: github-actions[bot] | |
GITHUB_USER_EMAIL: 41898282+github-actions[bot]@users.noreply.github.com | |
# crates in order of dependency (topological order), first the ones that are not dependent on any other | |
SAILS_CRATES: | | |
sails-idl-meta | |
sails-idl-parser | |
sails-idl-gen | |
sails-client-gen | |
sails-macros-core | |
sails-macros | |
sails-rs | |
sails-cli | |
jobs: | |
prepare: | |
name: Prepare Release | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
defaults: | |
run: | |
shell: bash | |
outputs: | |
rc_branch: ${{ steps.release_branch.outputs.rc_branch }} | |
r_version: ${{ steps.release_info.outputs.version }} | |
steps: | |
- name: Checkout Code | |
uses: actions/checkout@v4 | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Extract Release Info | |
id: release_info | |
run: | | |
RELEASE_TAG=${GITHUB_REF#refs/tags/} | |
VERSION=${RELEASE_TAG#rs/v} | |
VERSION="${VERSION%-rc}" | |
if [[ ! $VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then | |
echo "'$VERSION' is not a valid semver version" | |
exit 1 | |
fi | |
echo "Version: $VERSION" | |
echo "version=$VERSION" >> $GITHUB_OUTPUT | |
- name: Set Workspace Version | |
run: | | |
sed -i "s/^version = \".*\"/version = \"${{ steps.release_info.outputs.version }}\"/" Cargo.toml | |
- name: Update Workspace Dependencies | |
run: | | |
cargo update | |
- name: Create Release Branch | |
id: release_branch | |
run: | | |
RC_BRANCH="rc/rs/v${{ steps.release_info.outputs.version }}" | |
git config --global user.name "$GITHUB_USER_NAME" | |
git config --global user.email "$GITHUB_USER_EMAIL" | |
git checkout -b "$RC_BRANCH" | |
git add Cargo.toml | |
git add Cargo.lock | |
git commit -m "build(rs): update version to v${{ steps.release_info.outputs.version }}" | |
git push origin "$RC_BRANCH" | |
echo "rc_branch=$RC_BRANCH" >> $GITHUB_OUTPUT | |
ws_tests: | |
name: Run Workspace Tests | |
needs: | |
- prepare | |
uses: ./.github/workflows/rs-run-ws-tests.yml | |
with: | |
sources_ref: ${{ needs.prepare.outputs.rc_branch }} | |
gear_node_version: 1.6.0 | |
cli_tests: | |
name: Run CLI Tests | |
needs: | |
- prepare | |
uses: ./.github/workflows/rs-run-cli-tests.yml | |
with: | |
sources_ref: ${{ needs.prepare.outputs.rc_branch }} | |
assets: | |
name: Build Assets | |
runs-on: ubuntu-latest | |
needs: | |
- prepare | |
defaults: | |
run: | |
shell: bash | |
steps: | |
- name: Checkout Code from Release Branch | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ needs.prepare.outputs.rc_branch }} | |
- name: Install wasm-opt | |
uses: ./.github/actions/install-wasm-utils | |
- name: Build IDL Parser for WASM | |
run: | | |
cargo build -p sails-idl-parser --target wasm32-unknown-unknown --release | |
mkdir -p ./assets/sails_idl_parser | |
wasm-opt -O4 -o ./assets/sails_idl_parser/sails_idl_parser.wasm ./target/wasm32-unknown-unknown/release/sails_idl_parser.wasm | |
- name: Upload Assets | |
uses: actions/upload-artifact@v4 | |
with: | |
name: sails-assets | |
path: ./assets/ | |
release: | |
name: Create Release | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
needs: | |
- prepare | |
- ws_tests | |
- cli_tests | |
- assets | |
defaults: | |
run: | |
shell: bash | |
steps: | |
- name: Checkout Code from Release Branch | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ needs.prepare.outputs.rc_branch }} | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Publish Crates onto Crates.io | |
run: | | |
VERSION=${{ needs.prepare.outputs.r_version }} | |
for SAILS_CRATE in $SAILS_CRATES; do | |
sed -i "/^\s*${SAILS_CRATE} = {.*}/ s/}/, version = \"=${VERSION}\" }/" Cargo.toml | |
done | |
cat Cargo.toml | |
- name: Download Assets | |
uses: actions/download-artifact@v4 | |
with: | |
name: sails-assets | |
path: ./assets | |
- name: Create Release Tag | |
run: | | |
R_TAG="rs/v${{ needs.prepare.outputs.r_version }}" | |
git config --global user.name "$GITHUB_USER_NAME" | |
git config --global user.email "$GITHUB_USER_EMAIL" | |
git tag -a "$R_TAG" -m "Release v${{ needs.prepare.outputs.r_version }}" | |
git push origin "$R_TAG" | |
- name: Create Draft Release | |
uses: softprops/action-gh-release@v2 | |
with: | |
name: Sails-RS v${{ needs.prepare.outputs.r_version }} | |
tag_name: rs/v${{ needs.prepare.outputs.r_version }} | |
draft: true | |
generate_release_notes: true | |
fail_on_unmatched_files: true | |
files: | | |
./assets/sails_idl_parser/sails_idl_parser.wasm | |
token: ${{ secrets.GITHUB_TOKEN }} | |