Skip to content

GitHub CI: Unique cache keys for workflows and jobs #7

GitHub CI: Unique cache keys for workflows and jobs

GitHub CI: Unique cache keys for workflows and jobs #7

Workflow file for this run

# SPDX-FileCopyrightText: Copyright (C) 2018-2023 Uwe Klotz <uwedotklotzatgmaildotcom> et al.
# SPDX-License-Identifier: CC0-1.0
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow
name: build-and-test
permissions:
contents: read
on:
pull_request:
push:
branches:
- main
- dev
workflow_dispatch:
env:
CARGO_INCREMENTAL: 0
CARGO_TERM_COLOR: always
RUST_BACKTRACE: short
jobs:
the-job:
strategy:
matrix:
include:
- target: aarch64-apple-darwin
runner_os: macos-latest
# Runner (x86-64) and target are not compatible.
run_tests: false
- target: x86_64-pc-windows-msvc
runner_os: windows-latest
run_tests: true
- target: x86_64-unknown-linux-musl
runner_os: ubuntu-latest
run_tests: true
runs-on: ${{ matrix.runner_os }}
steps:
- name: Install dependencies for musl libc
if: matrix.target == 'x86_64-unknown-linux-musl'
run: |
sudo apt update && \
sudo apt -y install \
musl-tools
# See also: <https://github.com/emilk/egui/blob/master/.github/workflows/rust.yml>
- name: Install dependencies for `egui` on Linux
if: runner.os == 'Linux'
run: |
sudo apt update && \
sudo apt -y install \
libgtk-3-dev \
libssl-dev \
libxcb-render0-dev \
libxcb-shape0-dev \
libxcb-xfixes0-dev \
libxkbcommon-dev
# See also: <https://github.com/rusqlite/rusqlite/blob/master/.github/workflows/main.yml>
- name: Add LLVM path on Windows
if: runner.os == 'Windows'
run: |
echo "C:\msys64\mingw64\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
- name: Install Rust toolchains for both native target and WASM
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}, wasm32-unknown-unknown
# Checkout the repository before the remaining steps that depend on it.
# All preceding steps are independent of the repository contents.
- name: Check out repository
uses: actions/checkout@v3
- name: Cache Rust toolchain and build artifacts
uses: Swatinem/rust-cache@v2
with:
# The cache should not be shared between different workflows and jobs.
shared-key: ${{ github.workflow }}-${{ github.job }}
# Two jobs might share the same default target but have different build targets.
key: ${{ matrix.target }}
- name: Check aoide-core
run: |
cargo check --locked --target ${{ matrix.target }} --all-targets --all-features --manifest-path crates/core/Cargo.toml
- name: Check aoide-core-json
run: |
cargo check --locked --target ${{ matrix.target }} --all-targets --all-features --manifest-path crates/core-json/Cargo.toml
- name: Check aoide-core-api
run: |
cargo check --locked --target ${{ matrix.target }} --all-targets --all-features --manifest-path crates/core-api/Cargo.toml
- name: Check aoide-core-api-json
run: |
cargo check --locked --target ${{ matrix.target }} --all-targets --all-features --manifest-path crates/core-api-json/Cargo.toml
- name: Check aoide-desktop-app
run: |
cargo check --locked --target ${{ matrix.target }} --all-targets --all-features --manifest-path crates/desktop-app/Cargo.toml
- name: Check aoide-media
run: |
cargo check --locked --target ${{ matrix.target }} --all-targets --all-features --manifest-path crates/media-file/Cargo.toml
- name: Check aoide-repo
run: |
cargo check --locked --target ${{ matrix.target }} --all-targets --all-features --manifest-path crates/repo/Cargo.toml
- name: Check aoide-repo-sqlite
run: |
cargo check --locked --target ${{ matrix.target }} --all-targets --all-features --manifest-path crates/repo-sqlite/Cargo.toml
- name: Check aoide-storage-sqlite
run: |
cargo check --locked --target ${{ matrix.target }} --all-targets --all-features --manifest-path crates/storage-sqlite/Cargo.toml
- name: Check aoide-search-index-tantivy
run: |
cargo check --locked --target ${{ matrix.target }} --all-targets --all-features --manifest-path crates/search-index-tantivy/Cargo.toml
- name: Check aoide-usecases
run: |
cargo check --locked --target ${{ matrix.target }} --all-targets --all-features --manifest-path crates/usecases/Cargo.toml
- name: Check aoide-usecases-sqlite
run: |
cargo check --locked --target ${{ matrix.target }} --all-targets --all-features --manifest-path crates/usecases-sqlite/Cargo.toml
- name: Check aoide-backend-embedded
run: |
cargo check --locked --target ${{ matrix.target }} --all-targets --all-features --manifest-path crates/backend-embedded/Cargo.toml
- name: Check aoide-backend-webapi-json
run: |
cargo check --locked --target ${{ matrix.target }} --target ${{ matrix.target }} --all-targets --all-features --manifest-path crates/backend-webapi-json/Cargo.toml
- name: Check aoide-websrv-warp-sqlite
run: |
cargo check --locked --target ${{ matrix.target }} --all-targets --all-features --manifest-path crates/websrv-warp-sqlite/Cargo.toml
- name: Check aoide-websrv
run: |
cargo check --locked --target ${{ matrix.target }} --all-targets --all-features --manifest-path websrv/Cargo.toml
- name: Check aoide-client
run: |
cargo check --locked --target ${{ matrix.target }} --all-targets --all-features --manifest-path crates/client/Cargo.toml
- name: Check aoide-webcli
run: |
cargo check --locked --target ${{ matrix.target }} --all-targets --all-features --manifest-path webcli/Cargo.toml
- name: Build tests with all features enabled
run: |
cargo test --locked --target ${{ matrix.target }} --workspace --all-targets --all-features --no-run
- name: Run tests with all features enabled
if: matrix.run_tests
run: |
cargo test --locked --target ${{ matrix.target }} --workspace --all-targets --all-features -- --nocapture --quiet