Update MSRV and dependencies #16
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: Build and Release | |
on: | |
push: | |
branches: [ "release/**", "develop", "staging/**" ] | |
tags: [ "samedec-*" ] | |
pull_request: | |
branches: [ "develop" ] | |
permissions: | |
contents: write | |
env: | |
CARGO_TERM_COLOR: always | |
RUST_BACKTRACE: 1 | |
jobs: | |
# perform basic code quality checks, | |
# then run `cargo vendor` and cache it | |
check_and_vendor: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Checking for whitespace errors (PRs only) | |
if: github.event.pull_request.base.sha | |
run: | | |
git diff --check "${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}" || { | |
echo >&2 "Your pull request introduces whitespace errors,"; | |
echo >&2 "which is not allowed. Please run:"; | |
echo >&2; | |
echo >&2 " git rebase --whitespace=fix"; | |
echo >&2 " git push -f"; | |
echo >&2; | |
echo >&2 "to correct and resubmit."; | |
exit 1; | |
} | |
- name: Checking for cargo-fmt errors (PRs only) | |
if: github.event.pull_request.base.sha | |
run: | | |
cargo fmt --check || { \ | |
echo >&2 "Your pull request does not conform to cargo-fmt"; | |
echo >&2 "Rust format, which is not allowed. Please run:"; | |
echo >&2; | |
echo >&2 " cargo fmt"; | |
echo >&2 " git commit -a --amend"; | |
echo >&2 " git push -f"; | |
echo >&2; | |
echo >&2 "to correct and resubmit. If \`cargo fmt\` touches"; | |
echo >&2 "code which is not part of your MR, please let us"; | |
echo >&2 "know in the comments."; | |
exit 1; | |
} | |
- uses: actions/cache@v4 | |
name: Update crate cargo-vendor cache | |
id: vendor_cache | |
with: | |
path: | | |
.cargo | |
vendor | |
key: cargo-vendor-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: | | |
cargo-vendor | |
enableCrossOsArchive: true | |
- uses: actions/cache@v4 | |
name: Update cargo registry cache | |
if: steps.vendor_cache.outputs.cache-hit != 'true' | |
with: | |
path: | | |
~/.cargo/bin/ | |
~/.cargo/registry/index/ | |
~/.cargo/registry/cache/ | |
~/.cargo/git/db/ | |
key: ${{ runner.os }}-cargo-cache-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: | | |
${{ runner.os }}-cargo-cache | |
- name: Vendor sources | |
if: steps.vendor_cache.outputs.cache-hit != 'true' | |
run: | | |
mkdir -p .cargo | |
mkdir -p vendor | |
cargo vendor --versioned-dirs --locked >.cargo/config.toml | |
# test sameold with all crate feature combinations, | |
# in our Linux container | |
test_sameold: | |
strategy: | |
matrix: | |
features: ['', 'chrono'] | |
runs-on: ubuntu-latest | |
needs: check_and_vendor | |
container: | |
image: ghcr.io/cbs228/sameold/builder/x86_64-unknown-linux-gnu:latest | |
credentials: | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
env: | |
CARGO_NET_OFFLINE: "true" | |
CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Record environment | |
run: cargo version | |
- uses: actions/cache/restore@v4 | |
name: Restore crate cargo-vendor cache | |
with: | |
path: | | |
.cargo | |
vendor | |
key: cargo-vendor-${{ hashFiles('**/Cargo.lock') }} | |
enableCrossOsArchive: true | |
fail-on-cache-miss: true | |
- name: Build and test sameold | |
shell: bash | |
run: | | |
cargo test --frozen -p sameold --verbose --no-default-features --features "${{ matrix.features }}" | |
# Test and release samedec on Linux, via containers | |
release_samedec_linux: | |
runs-on: ubuntu-latest | |
needs: check_and_vendor | |
name: linux-${{ matrix.target }} | |
strategy: | |
matrix: | |
include: | |
- target: x86_64-unknown-linux-gnu | |
- target: aarch64-unknown-linux-gnu | |
- target: armv7-unknown-linux-gnueabihf | |
- target: i686-unknown-linux-gnu | |
container: | |
image: ghcr.io/cbs228/sameold/builder/${{ matrix.target }}:latest | |
credentials: | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
env: | |
CARGO_NET_OFFLINE: "true" | |
CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse | |
RUSTFLAGS: '-C strip=symbols' | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/cache/restore@v4 | |
name: Restore crate cargo-vendor cache | |
with: | |
path: | | |
.cargo | |
vendor | |
key: cargo-vendor-${{ hashFiles('**/Cargo.lock') }} | |
enableCrossOsArchive: true | |
fail-on-cache-miss: true | |
- name: "debug: cross-compile and cross-test" | |
run: | | |
cargo test --offline --frozen --workspace | |
- name: "release: cross-compile, cross-test, and install" | |
run: | | |
cargo test --offline --frozen --release --workspace && | |
cargo install --offline --frozen --path=crates/samedec | |
- name: Run integration tests on release-mode build | |
run: | | |
qemu-run-maybe samedec --version && | |
./sample/test.sh qemu-run-maybe samedec | |
- name: Copy artifact | |
run: | | |
cp /install/bin/samedec /install/bin/samedec-${{ matrix.target }} | |
- name: Store artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: samedec-${{ matrix.target }} | |
path: /install/bin/samedec-${{ matrix.target }} | |
retention-days: 3 | |
- name: Upload tagged release (tags only) | |
uses: svenstaro/upload-release-action@v2 | |
if: startsWith(github.ref, 'refs/tags/samedec-') | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
file: /install/bin/samedec-${{ matrix.target }} | |
overwrite: true | |
- name: Update tag for nightly release (develop-branch only) | |
uses: richardsimko/update-tag@v1 | |
if: github.ref == 'refs/heads/develop' | |
with: | |
tag_name: latest | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Upload nightly release (develop-branch only) | |
uses: svenstaro/upload-release-action@v2 | |
if: github.ref == 'refs/heads/develop' | |
with: | |
tag: "latest" | |
release_name: "Nightly Release" | |
body: "This is a rolling release built from the latest `develop` branch." | |
prerelease: true | |
file: /install/bin/samedec-${{ matrix.target }} | |
overwrite: true | |
# MacOS and Windows builds | |
release_samedec_nonlinux: | |
strategy: | |
matrix: | |
include: | |
- os: windows-latest | |
os_short: windows | |
target: x86_64-pc-windows-msvc | |
rustflags: '-C strip=symbols -C target-feature=+crt-static' | |
dotexe: '.exe' | |
- os: macos-latest | |
os_short: macos | |
target: aarch64-apple-darwin | |
rustflags: '-C strip=symbols' | |
dotexe: '' | |
- os: macos-latest | |
os_short: macos | |
target: x86_64-apple-darwin | |
rustflags: '-C strip=symbols' | |
dotexe: '' | |
runs-on: ${{ matrix.os }} | |
name: ${{ matrix.os_short }}-${{ matrix.target }} | |
needs: check_and_vendor | |
env: | |
CARGO_BUILD_TARGET: ${{ matrix.target }} | |
CARGO_NET_OFFLINE: "true" | |
CARGO_INSTALL_ROOT: "install/" | |
RUSTFLAGS: ${{ matrix.rustflags }} | |
samedec_exe: "install/bin/samedec${{ matrix.dotexe }}" | |
samedec_target_exe: "install/bin/samedec-${{ matrix.target}}${{ matrix.dotexe }}" | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Record environment | |
shell: bash | |
run: cargo version | |
- uses: actions/cache/restore@v4 | |
name: Restore crate cargo-vendor cache | |
with: | |
path: | | |
.cargo | |
vendor | |
key: cargo-vendor-${{ hashFiles('**/Cargo.lock') }} | |
enableCrossOsArchive: true | |
fail-on-cache-miss: true | |
- name: "debug: compile and test" | |
shell: bash | |
run: | | |
rustup target add "${CARGO_BUILD_TARGET}" && | |
cargo test --offline --frozen --workspace | |
- name: "release: cross-compile, cross-test, and install" | |
shell: bash | |
run: | | |
mkdir -p "${CARGO_INSTALL_ROOT}" && | |
export PATH="$(realpath ${CARGO_INSTALL_ROOT})/bin:${PATH}" | |
cargo test --offline --frozen --release --workspace && | |
cargo install --offline --frozen --path=crates/samedec | |
- name: Run integration tests on release-mode build | |
shell: bash | |
run: | | |
export PATH="$(realpath ${CARGO_INSTALL_ROOT})/bin:${PATH}" | |
samedec --version && | |
pushd ./sample && ./test.sh samedec && popd | |
- name: Copy artifact | |
shell: bash | |
run: | | |
cp "$samedec_exe" "$samedec_target_exe" | |
- name: Store artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: samedec-${{ env.CARGO_BUILD_TARGET }} | |
path: ${{ env.samedec_target_exe }} | |
retention-days: 3 | |
- name: Upload tagged release (tags only) | |
uses: svenstaro/upload-release-action@v2 | |
if: startsWith(github.ref, 'refs/tags/samedec-') | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
file: ${{ env.samedec_target_exe }} | |
overwrite: true | |
- name: Update tag for nightly release (develop-branch only) | |
uses: richardsimko/update-tag@v1 | |
if: github.ref == 'refs/heads/develop' | |
with: | |
tag_name: latest | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Upload nightly release (develop-only) | |
uses: svenstaro/upload-release-action@v2 | |
if: github.ref == 'refs/heads/develop' | |
with: | |
tag: "latest" | |
release_name: "Nightly Release" | |
body: "This is a rolling release built from the latest `develop` branch." | |
prerelease: true | |
file: ${{ env.samedec_target_exe }} | |
overwrite: true |