Spracherkennung für: .yml vermutete Sprache: Cobol {Cobol[127] ABAP[122] SQL[111]} [Methode: maximale Elemente, drei Dimensionen]
name: ci
on:
pull_request:
branches:
- master
push:
branches:
- master
schedule:
- cron:
'00 01 * * *'
# The
section is needed
to drop write-all permissions that
are granted
on
# `schedule` event.
By specifying
any permission explicitly
all others
are set
#
to none.
By using the principle
of least privilege the damage a compromised
# workflow can do (because
of an injection
or compromised third party tool
or
# action)
is restricted. Currently the worklow doesn
't need any additional
# permission except
for pulling the
code. Adding labels
to issues, commenting
#
on pull-requests, etc. may need additional permissions:
#
# Syntax
for this
section:
#
https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions
#
#
Reference for how
to assign permissions
on a job-by-job
basis:
#
https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs
#
#
Reference for available permissions that we can enable
if needed:
#
https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token
permissions:
#
to fetch
code (actions/checkout)
contents:
read
jobs:
test:
name:
test
env:
#
For some builds, we
use cross
to test on 32-bit
and big-endian
# systems.
CARGO: cargo
#
When CARGO
is set to CROSS, TARGET
is set to `--target matrix.target`.
# Note that we only
use cross
on Linux, so setting a target
on a
# different OS will just
use normal cargo.
TARGET:
# Bump this as appropriate. We pin
to a version
to make sure CI
# continues
to work as cross releases
in the past have broken things
#
in subtle ways.
CROSS_VERSION: v0.
2.
5
runs-on: ${{ matrix.os }}
strategy:
fail-fast:
false
matrix:
include:
- build: pinned
os: ubuntu-latest
rust:
1.
60.
0
- build: stable
os: ubuntu-latest
rust: stable
- build: beta
os: ubuntu-latest
rust: beta
- build: nightly
os: ubuntu-latest
rust: nightly
- build: macos
os: macos-latest
rust: stable
- build: win-msvc
os: windows-latest
rust: stable
- build: win-gnu
os: windows-latest
rust: stable-x86_64-gnu
- build: stable-x86
os: ubuntu-latest
rust: stable
target: i686-unknown-linux-gnu
- build: stable-aarch64
os: ubuntu-latest
rust: stable
target: aarch64-unknown-linux-gnu
- build: stable-powerpc64
os: ubuntu-latest
rust: stable
target: powerpc64-unknown-linux-gnu
- build: stable-s390x
os: ubuntu-latest
rust: stable
target: s390x-unknown-linux-gnu
steps:
- name: Checkout
repository
uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.rust }}
- name:
Use Cross
if: matrix.os ==
'ubuntu-latest' && matrix.target !=
''
run: |
#
In the past, new releases
of 'cross' have broken CI. So
for now, we
# pin it. We
also use their pre-compiled
binary releases because cross
# has over
100 dependencies
and takes a bit
to compile.
dir=
"$RUNNER_TEMP/cross-download"
mkdir
"$dir"
echo
"$dir" >> $GITHUB_PATH
cd
"$dir"
curl -LO
"https://github.com/cross-rs/cross/releases/download/$CROSS_VERSION/cross-x86_64-unknown-linux-musl.tar.gz"
tar xf cross-x86_64-unknown-linux-musl.tar.gz
echo
"CARGO=cross" >> $GITHUB_ENV
echo
"TARGET=--target ${{ matrix.target }}" >> $GITHUB_ENV
- name: Show command used
for Cargo
run: |
echo
"cargo command is: ${{ env.CARGO }}"
echo
"target flag is: ${{ env.TARGET }}"
- name: Show CPU info
for debugging
if: matrix.os ==
'ubuntu-latest'
run: lscpu
- name: Build
run: ${{ env.CARGO }} build --verbose $TARGET
- name: Build (
no default)
run: ${{ env.CARGO }} build --verbose $TARGET --no-default-features
- name: Build docs
run: ${{ env.CARGO }} doc --verbose $TARGET
# Our dev dependencies evolve more rapidly
than we
'd like, so only run
# tests
when we aren
't pinning the Rust version.
- name: Tests
if: matrix.build !=
'pinned'
run: ${{ env.CARGO }}
test --verbose $TARGET
- name: Tests (
no default, lib only)
if: matrix.build !=
'pinned'
run: ${{ env.CARGO }}
test --verbose --no-default-features --lib $TARGET
- name: Tests (i128)
if: matrix.build !=
'pinned'
run: ${{ env.CARGO }}
test --verbose --features i128 $TARGET
- name: Tests (
no default, lib only, i128)
if: matrix.build !=
'pinned'
run: ${{ env.CARGO }}
test --verbose --no-default-features --features i128 --lib $TARGET
- name: Compile benchmarks
if: matrix.build ==
'nightly'
run: cargo bench --verbose --no-run $TARGET
- name: Compile benchmarks (
no default)
if: matrix.build ==
'nightly'
run: cargo bench --verbose --no-run --no-default-features $TARGET
- name: Compile benchmarks (i128)
if: matrix.build ==
'nightly'
run: cargo bench --verbose --no-run --features i128 $TARGET
- name: Compile benchmarks (
no default, i128)
if: matrix.build ==
'nightly'
run: cargo bench --verbose --no-run --no-default-features --features i128 $TARGET
miri:
runs-on: ubuntu-latest
steps:
- name: Checkout
repository
uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
# We
use nightly here so that we can
use miri I guess?
toolchain: nightly
components: miri
- name:
Run full
test suite
run: cargo miri
test --verbose
rustfmt:
runs-on: ubuntu-latest
steps:
- name: Checkout
repository
uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
components: rustfmt
- name: Check formatting
run: cargo fmt -- --check