add(ci): Check that dependencies have all been published to crates.io on release PRs #1465
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 crates individually | |
# We need to keep the `matrix` job in this workflow as-is, as we need the results | |
# to actually match the same `build` job names from the original file. | |
on: | |
pull_request: | |
paths-ignore: | |
# production code and test code | |
- '**/*.rs' | |
# dependencies | |
- '**/Cargo.toml' | |
- '**/Cargo.lock' | |
# configuration files | |
- '.cargo/config.toml' | |
- '**/clippy.toml' | |
# workflow definitions | |
- '.github/workflows/ci-build-crates.yml' | |
jobs: | |
matrix: | |
name: Generate crates matrix | |
runs-on: ubuntu-latest | |
outputs: | |
matrix: ${{ steps.set-matrix.outputs.matrix }} | |
steps: | |
- uses: actions/[email protected] | |
# Setup Rust with stable toolchain and minimal profile | |
- name: Setup Rust | |
run: | | |
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain=stable --profile=minimal | |
# This step is meant to dynamically create a JSON containing the values of each crate | |
# available in this repo in the root directory. We use `cargo tree` to accomplish this task. | |
# | |
# The result from `cargo tree` is then transform to JSON values between double quotes, | |
# and separated by commas, then added to a `crates.txt` and assigned to a $JSON_CRATES variable. | |
# | |
# A JSON object is created and assigned to a $MATRIX variable, which is use to create an output | |
# named `matrix`, which is then used as the input in following steps, | |
# using ` ${{ fromJson(needs.matrix.outputs.matrix) }}` | |
- id: set-matrix | |
name: Dynamically build crates JSON | |
run: | | |
TEMP_DIR=$(mktemp -d) | |
echo "$(cargo tree --depth 0 --edges no-normal,no-dev,no-build,no-proc-macro --prefix none | cut -d ' ' -f1 | sed '/^$/d' | awk '{ printf "\"%s\",\n", $0 }' | sed '$ s/.$//')" > $TEMP_DIR/crates.txt | |
MATRIX=$( ( | |
echo '{ "crate" : [' | |
echo "$(cat $TEMP_DIR/crates.txt)" | |
echo " ]}" | |
) | jq -c .) | |
echo $MATRIX | |
echo $MATRIX | jq . | |
echo "matrix=$MATRIX" >> "$GITHUB_OUTPUT" | |
check-matrix: | |
name: Check crates matrix | |
runs-on: ubuntu-latest | |
needs: [ matrix ] | |
steps: | |
- run: 'echo "No job required"' | |
build: | |
name: Build ${{ matrix.crate }} crate | |
needs: [ matrix, check-matrix ] | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: ${{ fromJson(needs.matrix.outputs.matrix) }} | |
steps: | |
- run: 'echo "No job required"' |