Fix wasm release builds #125
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
# Release workflow builds the release executables for all platforms and publishes them to GitHub | |
name: Release builds | |
on: | |
push: | |
tags: | |
- 'v*.*.*' | |
env: | |
CARGO_TERM_COLOR: always | |
permissions: | |
contents: write # Required to upload artifacts to releases (and pushing the version update) | |
jobs: | |
update-cargo-version: | |
name: Update the version in Cargo.toml | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
ref: 'master' # HACK: Should be the tag, but we are making a push to master | |
- name: Update cargo | |
run: | | |
rustup update | |
- uses: Swatinem/[email protected] | |
- name: Auto-update Cargo.toml and move the release tag | |
id: auto-update | |
run: | | |
export VERSION="${GITHUB_REF##*/}" | |
sed -E -i "s/^version = \"[^\"]*\"/version = \"${VERSION:1}\"/g" Cargo.toml # e.g. v0.0.1 -> version = "0.0.1" | |
cargo tree # Check that we did not break the Cargo.toml (also updates Cargo.lock) | |
git config --global user.email "[email protected]" | |
git config --global user.name "Yeicor" | |
if git commit -am "Update Cargo.toml to version ${VERSION:1} (automatic)"; then | |
git push | |
# Move the tag to the new commit | |
git tag -f -a "$VERSION" -m "$VERSION" | |
git push -f --tags # Force push the tag to GitHub | |
# The tag move will NOT trigger a new workflow | |
else | |
echo "No change to the Cargo.toml version (did you repeat a release tag??)" | |
exit 1 | |
fi | |
deploy-linux: | |
name: Release | |
runs-on: '${{ matrix.os }}' | |
needs: | |
- update-cargo-version | |
strategy: | |
fail-fast: false | |
matrix: | |
include: # TODO: Release different feature combinations (app-only, server-only and both) | |
# Linux x86_64 | |
- os: ubuntu-latest | |
target: x86_64-unknown-linux-gnu | |
ext: "" | |
pre: sudo apt update && sudo apt install pkg-config libx11-dev libxi-dev libgl1-mesa-dev libasound2-dev libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libspeechd-dev libxkbcommon-dev libssl-dev libatk1.0-dev libgtk-3-dev | |
# TODO: Mac OS x86_64 | |
# - os: macos-latest | |
# target: x86_64-apple-darwin | |
# pre: brew install libx11 libxi | |
# post: TODO: (pack a .dmg?) | |
# Windows x86_64 | |
- os: windows-latest | |
target: x86_64-pc-windows-msvc | |
ext: exe | |
# Web (WebAssembly) | |
- os: ubuntu-latest | |
target: wasm32-unknown-unknown | |
ext: tar.gz # After post-processing | |
pre: rustup target add wasm32-unknown-unknown && curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh | |
build: wasm-pack build --target web --out-dir ./target/pkg -- --no-default-features --features default-wasm | |
post: ".github/scripts/release-wasm-post.sh ./target/pkg/${GITHUB_REPOSITORY#*/}.wasm" | |
# Android | |
- os: ubuntu-latest | |
target: android # Multiple architectures are supported | |
pre: | | |
sudo apt update | |
sudo apt install sdkmanager openjdk-8-jre-headless | |
sudo sdkmanager --install "platforms;android-33" "ndk-bundle;r25c" "build-tools;33.0.2" | |
export ANDROID_HOME=/opt/android-sdk ANDROID_NDK_ROOT=/opt/android-sdk/ndk-bundle | |
rustup target add aarch64-linux-android # armv7-linux-androideabi i686-linux-android x86_64-linux-android | |
cargo install cargo-apk | |
build: cargo apk build --lib --no-default-features --features default-android # --release requires keystore | |
ext: apk | |
# TODO: iOS | |
# - os: macos-latest | |
# target: ??? | |
# pre: ??? | |
# build: ??? | |
# post: ??? | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
ref: 'master' # HACK: See first checkout | |
- name: Update cargo | |
run: | | |
rustup update | |
- uses: Swatinem/[email protected] | |
with: | |
key: ${{ matrix.os }}-${{ matrix.target }} | |
- uses: nttld/setup-ndk@v1 | |
if: ${{ matrix.target == 'android' }} | |
with: | |
ndk-version: r21e | |
- name: Preparing for build | |
if: ${{ matrix.pre != '' }} | |
run: ${{ matrix.pre }} | |
- name: Release build | |
if: ${{ matrix.build == '' }} | |
uses: actions-rs/cargo@v1 | |
with: | |
command: build | |
args: --release --target ${{ matrix.target }} | |
- name: Release build | |
if: ${{ matrix.build != '' }} | |
run: ${{ matrix.build }} | |
env: | |
ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }} | |
PKG_CONFIG_SYSROOT_DIR: ${{ steps.setup-ndk.outputs.ndk-path }}/sysroot | |
- name: Postprocessing after build | |
if: ${{ matrix.post != '' }} | |
run: ${{ matrix.post }} | |
- name: Prepare release | |
id: prepare-release | |
shell: bash | |
run: | | |
set -ex | |
build_name="${{ matrix.build_name }}" | |
exe_name="${GITHUB_REPOSITORY#*/}-${GITHUB_REF##*/}-${{ matrix.target }}-${GITHUB_SHA:0:7}" | |
if [[ -z "$build_name" ]]; then # Default build name: <repo-name>.<extension> | |
if [[ -z "${{ matrix.ext }}" ]]; then | |
build_name="${GITHUB_REPOSITORY#*/}" | |
else | |
build_name="${GITHUB_REPOSITORY#*/}.${{ matrix.ext }}" | |
exe_name="$exe_name.${{ matrix.ext }}" | |
fi | |
fi | |
# Make sure we own all files (for Docker) | |
if [[ "${{ matrix.os }}" == "ubuntu-latest" ]]; then sudo chown -R $(id -u):$(id -g) target; fi | |
# Find and copy the release binary | |
find target -type f -name "$build_name" -printf '%p' -exec mv {} "${exe_name}" \; | |
echo -e "\n::set-output name=EXE_NAME::${exe_name}" | |
du -h "${exe_name}" | |
- name: Publish the release build | |
uses: softprops/action-gh-release@v1 | |
with: | |
files: ${{ steps.prepare-release.outputs.EXE_NAME }} | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Prepare static site (only for web builds) | |
if: ${{ matrix.target == 'wasm32-unknown-unknown' }} | |
run: mkdir public && tar -xvzf "${{ steps.prepare-release.outputs.EXE_NAME }}" --directory public | |
- name: Deploy static site (only for web builds) | |
if: ${{ matrix.target == 'wasm32-unknown-unknown' }} | |
uses: JamesIves/github-pages-deploy-action@v4 | |
with: | |
branch: gh-pages | |
folder: public |