Skip to content

Fixes for dependency upgrades #124

Fixes for dependency upgrades

Fixes for dependency upgrades #124

Workflow file for this run

# 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