Merge pull request #133 from arkedge/release-v0.4 #68
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: Release | |
on: | |
push: | |
branches: | |
- main | |
tags: ['v*'] | |
pull_request: | |
branches: | |
- main | |
paths: | |
- .github/workflows/release.yml | |
env: | |
# renovate: datasource=github-releases depName=EmbarkStudios/cargo-about | |
CARGO_ABOUT_VERSION: 0.6.4 | |
jobs: | |
build: | |
runs-on: ubuntu-24.04 | |
strategy: | |
fail-fast: true | |
matrix: | |
target: | |
- x86_64-unknown-linux-musl | |
- aarch64-unknown-linux-musl | |
steps: | |
- uses: actions/checkout@v4.2.2 | |
- name: install apt depenedencies | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y musl-tools | |
- name: install aarch64 linker | |
if: matrix.target == 'aarch64-unknown-linux-musl' | |
run: | | |
sudo apt-get install -y gcc-aarch64-linux-gnu | |
- name: Get Rust toolchain | |
id: toolchain | |
working-directory: . | |
run: | | |
awk -F'[ ="]+' '$1 == "channel" { print "toolchain=" $2 }' rust-toolchain >> "$GITHUB_OUTPUT" | |
- uses: dtolnay/rust-toolchain@v1 | |
with: | |
toolchain: ${{ steps.toolchain.outputs.toolchain }} | |
targets: ${{ matrix.target }} | |
- uses: Swatinem/rust-cache@v2.7.5 | |
- name: install cargo-about | |
run: | | |
cargo install --locked cargo-about --version ${{ env.CARGO_ABOUT_VERSION }} | |
- name: Build | |
run: | | |
cargo build --target=${{ matrix.target }} --release --locked | |
- name: Rename binaries | |
run: | | |
mkdir bin | |
kble_bins=("kble" "kble-c2a" "kble-dump" "kble-eb90" "kble-serialport" "kble-tcp") | |
for b in "${kble_bins[@]}" ; do | |
cp "./target/${{ matrix.target }}/release/${b}" "./bin/${b}-${{ matrix.target }}" | |
done | |
ls -lh ./bin | |
- uses: actions/upload-artifact@v4.4.3 | |
with: | |
name: release-executable-${{ matrix.target }} | |
if-no-files-found: error | |
path: ./bin/ | |
build_kble_serialport_win: | |
name: build / kble-serialport.exe | |
# C2A Boom ecosystem does **NOT** support native Windows environment. | |
# However, WSL2 environment is supported and has many use cases in the real world. | |
# Here, there are difficulties in running kble-serialport inside WSL2, | |
# a component that interfaces with external hardware (USB-RS devices). | |
# Although it is possible to show a Windows host USB devices | |
# to a WSL2 Linux VM using the usbipd-win project, this is still a bit unstable. | |
# Also, kble-serialport is a very small component that does not need to be updated frequently for practical use. | |
# For these reasons, we currently choose to run only kble-serialport on Windows host. | |
runs-on: windows-2022 | |
env: | |
TARGET: x86_64-pc-windows-msvc | |
steps: | |
- uses: actions/checkout@v4.2.2 | |
- name: Get Rust toolchain | |
id: toolchain | |
working-directory: . | |
shell: bash | |
run: | | |
awk -F'[ ="]+' '$1 == "channel" { print "toolchain=" $2 }' rust-toolchain >> "$GITHUB_OUTPUT" | |
- uses: dtolnay/rust-toolchain@v1 | |
with: | |
toolchain: ${{ steps.toolchain.outputs.toolchain }} | |
targets: ${{ env.TARGET }} | |
- uses: Swatinem/rust-cache@v2.7.5 | |
- name: install cargo-about | |
run: | | |
cargo install --locked cargo-about --version ${{ env.CARGO_ABOUT_VERSION }} | |
- name: Build | |
run: | | |
cargo build --target=${{ env.TARGET }} -p kble-serialport --release --locked | |
- name: Rename binary | |
shell: bash | |
run: | | |
mkdir bin | |
cp "./target/${{ env.TARGET }}/release/kble-serialport.exe" "./bin/kble-serialport-${{ env.TARGET }}.exe" | |
ls -lh ./bin | |
- uses: actions/upload-artifact@v4.4.3 | |
with: | |
name: release-executable-${{ env.TARGET }} | |
if-no-files-found: error | |
path: ./bin/ | |
publish_dry_run: | |
name: publish (dry-run) | |
runs-on: ubuntu-24.04 | |
steps: | |
- uses: actions/checkout@v4.2.2 | |
- name: Get Rust toolchain | |
id: toolchain | |
working-directory: . | |
run: | | |
awk -F'[ ="]+' '$1 == "channel" { print "toolchain=" $2 }' rust-toolchain >> "$GITHUB_OUTPUT" | |
- uses: dtolnay/rust-toolchain@v1 | |
with: | |
toolchain: ${{ steps.toolchain.outputs.toolchain }} | |
- uses: Swatinem/rust-cache@v2.7.5 | |
- name: install cargo-about | |
run: | | |
cargo install --locked cargo-about --version ${{ env.CARGO_ABOUT_VERSION }} | |
- name: cargo publish (dry-run) | |
run: | | |
crates=("kble" "kble-socket" "kble-c2a" "kble-dump" "kble-eb90" "kble-serialport" "kble-tcp") | |
for c in "${crates[@]}" ; do | |
cargo publish --dry-run -p "${c}" | |
echo "" | |
# shellcheck disable=SC2086 | |
ls -lh ./target/package/${c}-*/ | |
done | |
ls -lh ./target/package | |
release: | |
name: Release | |
needs: [ build, build_kble_serialport_win, publish_dry_run ] | |
permissions: | |
contents: write | |
runs-on: ubuntu-24.04 | |
steps: | |
- uses: actions/download-artifact@v4.1.8 | |
with: | |
pattern: release-executable-* | |
merge-multiple: true | |
- run: chmod +x kble-* | |
- run: ls -lh | |
- name: Release to GitHub Release | |
if: startsWith(github.ref, 'refs/tags/') | |
uses: softprops/action-gh-release@v2.1.0 | |
with: | |
draft: true | |
fail_on_unmatched_files: true | |
generate_release_notes: true | |
files: | | |
kble* |