Skip to content

Update MSRV and dependencies #16

Update MSRV and dependencies

Update MSRV and dependencies #16

Workflow file for this run

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