Add experimental gitea actions
ubuntu / stable / coverage
Details
ubuntu / nightly / doc
Details
ubuntu / stable / fmt
Details
ubuntu / stable / feature-powerset
Details
loom
Details
ubuntu / stable / minimal-versions
Details
miri
Details
ubuntu / ${{ matrix.toolchain }} / clippy (beta)
Details
ubuntu / ${{ matrix.toolchain }} / clippy (nightly)
Details
ubuntu / stable / msrv
Details
ubuntu / ${{ matrix.toolchain }} (beta)
Details
ubuntu / ${{ matrix.toolchain }} (stable)
Details
sanitizers
Details
ubuntu / nightly / unused deps
Details
ubuntu / ${{ matrix.toolchain }} / clippy (stable)
Details
${{ matrix.os }} / stable (windows-latest)
Details
${{ matrix.os }} / stable (macos-latest)
Details
ubuntu / stable / coverage
Details
ubuntu / nightly / doc
Details
ubuntu / stable / fmt
Details
ubuntu / stable / feature-powerset
Details
loom
Details
ubuntu / stable / minimal-versions
Details
miri
Details
ubuntu / ${{ matrix.toolchain }} / clippy (beta)
Details
ubuntu / ${{ matrix.toolchain }} / clippy (nightly)
Details
ubuntu / stable / msrv
Details
ubuntu / ${{ matrix.toolchain }} (beta)
Details
ubuntu / ${{ matrix.toolchain }} (stable)
Details
sanitizers
Details
ubuntu / nightly / unused deps
Details
ubuntu / ${{ matrix.toolchain }} / clippy (stable)
Details
${{ matrix.os }} / stable (windows-latest)
Details
${{ matrix.os }} / stable (macos-latest)
Details
This commit is contained in:
parent
e3cb2e3ad4
commit
f1db89ca99
|
|
@ -0,0 +1,316 @@
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
pull_request:
|
||||||
|
branches: [main]
|
||||||
|
name: check
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
# check if code is correclty formatted
|
||||||
|
fmt:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: ubuntu / stable / fmt
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- name: Install stable
|
||||||
|
uses: https://github.com/dtolnay/rust-toolchain@stable
|
||||||
|
with:
|
||||||
|
components: rustfmt
|
||||||
|
- name: cargo fmt --check
|
||||||
|
run: cargo fmt --check --all
|
||||||
|
|
||||||
|
clippy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: ubuntu / ${{ matrix.toolchain }} / clippy
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
checks: write
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
toolchain: [stable, beta, nightly ]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- name: Install ${{ matrix.toolchain }}
|
||||||
|
uses: https://github.com/dtolnay/rust-toolchain@master
|
||||||
|
with:
|
||||||
|
toolchain: ${{ matrix.toolchain }}
|
||||||
|
components: clippy
|
||||||
|
- name: Build frontend
|
||||||
|
run: cd frontend && npm install && npm run build && cd -
|
||||||
|
- name: cargo clippy
|
||||||
|
uses: https://github.com/actions-rs-plus/clippy-check@v2
|
||||||
|
|
||||||
|
doc:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: ubuntu / nightly / doc
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- name: Install nightly
|
||||||
|
uses: https://github.com/dtolnay/rust-toolchain@nightly
|
||||||
|
- name: Build frontend
|
||||||
|
run: cd frontend && npm install && npm run build && cd -
|
||||||
|
- name: cargo doc
|
||||||
|
run: cargo doc --no-deps --all-features
|
||||||
|
env:
|
||||||
|
RUSTDOCFLAGS: --cfg docsrs
|
||||||
|
|
||||||
|
udeps:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: ubuntu / nightly / unused deps
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@master
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- name: Install stable
|
||||||
|
uses: https://github.com/dtolnay/rust-toolchain@nightly
|
||||||
|
- uses: https://github.com/taiki-e/install-action@cargo-udeps
|
||||||
|
- name: Build frontend
|
||||||
|
run: cd frontend && npm install && npm run build && cd -
|
||||||
|
- name: cargo-udeps
|
||||||
|
run: cargo udeps
|
||||||
|
|
||||||
|
# trying if all feature combinations are passing
|
||||||
|
hack:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: ubuntu / stable / feature-powerset
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- name: Install stable
|
||||||
|
uses: https://github.com/dtolnay/rust-toolchain@stable
|
||||||
|
- name: cargo install cargo-hack
|
||||||
|
uses: https://github.com/taiki-e/install-action@cargo-hack
|
||||||
|
- name: Build frontend
|
||||||
|
run: cd frontend && npm install && npm run build && cd -
|
||||||
|
# intentionally no target specifier; see https://github.com/jonhoo/rust-ci-conf/pull/4
|
||||||
|
- name: cargo hack
|
||||||
|
run: |
|
||||||
|
cargo hack --feature-powerset check
|
||||||
|
|
||||||
|
# check if all packages have a minimal supported rust version and work with that version
|
||||||
|
msrv:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: ubuntu / stable / msrv
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- name: Install stable
|
||||||
|
uses: https://github.com/dtolnay/rust-toolchain@stable
|
||||||
|
- uses: https://github.com/taiki-e/cache-cargo-install-action@v1
|
||||||
|
with:
|
||||||
|
tool: cargo-msrv
|
||||||
|
- name: Build frontend
|
||||||
|
run: cd frontend && npm install && npm run build && cd -
|
||||||
|
- name: check msrv
|
||||||
|
run: |
|
||||||
|
$(
|
||||||
|
set -e;
|
||||||
|
for package_path in $(cargo metadata --no-deps | jq '.packages[].manifest_path' | xargs dirname);
|
||||||
|
do
|
||||||
|
cargo msrv --path $package_path verify;
|
||||||
|
done
|
||||||
|
)
|
||||||
|
|
||||||
|
required:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: ubuntu / ${{ matrix.toolchain }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
toolchain: [stable, beta]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- name: Install ${{ matrix.toolchain }}
|
||||||
|
uses: https://github.com/dtolnay/rust-toolchain@master
|
||||||
|
with:
|
||||||
|
toolchain: ${{ matrix.toolchain }}
|
||||||
|
- name: Build frontend
|
||||||
|
run: cd frontend && npm install && npm run build && cd -
|
||||||
|
- name: cargo generate-lockfile
|
||||||
|
if: hashFiles('Cargo.lock') == ''
|
||||||
|
run: |
|
||||||
|
cargo run test --locked --all-features --all-targets
|
||||||
|
- name: cargo test --locked
|
||||||
|
run: |
|
||||||
|
cargo test --locked --all-features --all-targets
|
||||||
|
- name: cargo test --doc
|
||||||
|
run: |
|
||||||
|
cargo test --locked --all-features --doc
|
||||||
|
|
||||||
|
minimal:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: ubuntu / stable / minimal-versions
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- name: Install stable
|
||||||
|
uses: https://github.com/dtolnay/rust-toolchain@nightly
|
||||||
|
- uses: https://github.com/taiki-e/install-action@cargo-hack
|
||||||
|
- uses: https://github.com/taiki-e/install-action@cargo-minimal-versions
|
||||||
|
- name: Build frontend
|
||||||
|
run: cd frontend && npm install && npm run build && cd -
|
||||||
|
- name: cargo test
|
||||||
|
run: cargo minimal-versions test --locked --all-features --all-targets
|
||||||
|
|
||||||
|
os-check:
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
name: ${{ matrix.os }} / stable
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os: [macos-latest, windows-latest]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- name: Install stable
|
||||||
|
uses: https://github.com/dtolnay/rust-toolchain@stable
|
||||||
|
- name: Build frontend
|
||||||
|
run: cd frontend && npm install && npm run build && cd -
|
||||||
|
- name: cargo generate-lockfile
|
||||||
|
if: hashFiles('Cargo.lock') == ''
|
||||||
|
run: |
|
||||||
|
cargo generate-lockfile
|
||||||
|
- name: cargo test
|
||||||
|
run: |
|
||||||
|
cargo test --locked --all-features --all-targets
|
||||||
|
|
||||||
|
coverage:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: ubuntu / stable / coverage
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: https://github.com/dtolnay/rust-toolchain@stable
|
||||||
|
with:
|
||||||
|
components: llvm-tools-preview
|
||||||
|
- name: Install cargo-llvm-cov
|
||||||
|
uses: https://github.com/taiki-e/install-action@cargo-llvm-cov
|
||||||
|
- name: Install latest nextest release
|
||||||
|
uses: https://github.com/taiki-e/install-action@nextest
|
||||||
|
- name: Build frontend
|
||||||
|
run: cd frontend && npm install && npm run build && cd -
|
||||||
|
- name: Generate code coverage
|
||||||
|
run: |
|
||||||
|
cargo llvm-cov \
|
||||||
|
--all-features \
|
||||||
|
--fail-under-lines 80.0 \
|
||||||
|
--workspace \
|
||||||
|
--lcov \
|
||||||
|
--output-path lcov.info \
|
||||||
|
--ignore-filename-regex '(main.rs|command.rs|cli.rs|config.rs|logging.rs) \
|
||||||
|
nextest
|
||||||
|
|
||||||
|
loom:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- name: Install stable
|
||||||
|
uses: https://github.com/dtolnay/rust-toolchain@stable
|
||||||
|
- name: Build frontend
|
||||||
|
run: cd frontend && npm install && npm run build && cd -
|
||||||
|
- name: cargo test --test loom
|
||||||
|
run: |
|
||||||
|
cargo test --release --test loom
|
||||||
|
env:
|
||||||
|
LOOM_MAX_PREEMPTIONS: 2
|
||||||
|
RUSTFLAGS: "--cfg loom"
|
||||||
|
|
||||||
|
|
||||||
|
sanitizers:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- name: Install nightly
|
||||||
|
uses: https://github.com/dtolnay/rust-toolchain@nightly
|
||||||
|
- run: |
|
||||||
|
# to get the symbolizer for debug symbol resolution
|
||||||
|
sudo apt install llvm
|
||||||
|
# to fix buggy leak analyzer:
|
||||||
|
# https://github.com/japaric/rust-san#unrealiable-leaksanitizer
|
||||||
|
sed -i '/\[features\]/i [profile.dev]' Cargo.toml
|
||||||
|
sed -i '/profile.dev/a opt-level = 1' Cargo.toml
|
||||||
|
cat Cargo.toml
|
||||||
|
name: Enable debug symbols
|
||||||
|
- name: Build frontend
|
||||||
|
run: cd frontend && npm install && npm run build && cd -
|
||||||
|
|
||||||
|
- name: cargo test -Zsanitizer=address
|
||||||
|
# only --lib --tests b/c of https://github.com/rust-lang/rust/issues/53945
|
||||||
|
run: cargo test --all-features --target x86_64-unknown-linux-gnu
|
||||||
|
env:
|
||||||
|
ASAN_OPTIONS: "detect_odr_violation=0:detect_leaks=0"
|
||||||
|
RUSTFLAGS: "-Z sanitizer=address"
|
||||||
|
|
||||||
|
# Leaks can also occur in safe code
|
||||||
|
# https://github.com/japaric/rust-san#leaksanitizer
|
||||||
|
- name: cargo test -Zsanitizer=leak
|
||||||
|
run: cargo test --all-features --target x86_64-unknown-linux-gnu
|
||||||
|
env:
|
||||||
|
LSAN_OPTIONS: "suppressions=lsan-suppressions.txt"
|
||||||
|
RUSTFLAGS: "-Z sanitizer=leak"
|
||||||
|
|
||||||
|
# Just running the binary might not make much sense, unless we run
|
||||||
|
# a special test binary, running on tests does not work though
|
||||||
|
# https://github.com/japaric/rust-san#memorysanitizer-use-of-uninitialized-value-in-the-test-runner
|
||||||
|
- name: cargo run -Zsanitizer=memory
|
||||||
|
run: cargo run --all-features --target x86_64-unknown-linux-gnu
|
||||||
|
env:
|
||||||
|
LSAN_OPTIONS: "suppressions=lsan-suppressions.txt"
|
||||||
|
RUSTFLAGS: "-Z sanitizer=memory"
|
||||||
|
|
||||||
|
# https://github.com/japaric/rust-san#threadsanitizer-data-race-in-the-test-runner
|
||||||
|
# does not seem to work and we still panic even with setting the test threads in
|
||||||
|
# environment variable or cli flags, so we fall back to testing the binary
|
||||||
|
# which might be less usefull
|
||||||
|
- name: cargo run -Zsanitizer=thread
|
||||||
|
run: cargo run --all-features --target x86_64-unknown-linux-gnu
|
||||||
|
env:
|
||||||
|
LSAN_OPTIONS: "suppressions=lsan-suppressions.txt"
|
||||||
|
RUSTFLAGS: "-Z sanitizer=thread"
|
||||||
|
RUST_TEST_THREADS: "1"
|
||||||
|
|
||||||
|
miri:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- name: Install nightly
|
||||||
|
run: |
|
||||||
|
echo "NIGHTLY=nightly-$(curl -s https://rust-lang.github.io/rustup-components-history/x86_64-unknown-linux-gnu/miri)" >> $GITHUB_ENV
|
||||||
|
- name: Install ${{ env.NIGHTLY }}
|
||||||
|
uses: https://github.com/dtolnay/rust-toolchain@master
|
||||||
|
with:
|
||||||
|
toolchain: ${{ env.NIGHTLY }}
|
||||||
|
components: miri
|
||||||
|
- name: Install latest nextest release
|
||||||
|
uses: https://github.com/taiki-e/install-action@nextest
|
||||||
|
- name: Build frontend
|
||||||
|
run: cd frontend && npm install && npm run build && cd -
|
||||||
|
- name: cargo miri
|
||||||
|
run: cargo miri nextest run
|
||||||
|
env:
|
||||||
|
MIRIFLAGS: ""
|
||||||
|
|
||||||
|
|
@ -0,0 +1,122 @@
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
checks: write
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches: [main]
|
||||||
|
|
||||||
|
name: info
|
||||||
|
jobs:
|
||||||
|
bloat:
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
name: ${{ matrix.os }} / stable / bloat
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os: [ubuntu-latest, macos-latest]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@master
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- name: Install stable
|
||||||
|
uses: https://github.com/dtolnay/rust-toolchain@stable
|
||||||
|
- uses: https://github.com/taiki-e/cache-cargo-install-action@v1
|
||||||
|
with:
|
||||||
|
tool: cargo-bloat
|
||||||
|
- name: Download last size result
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
|
# we handle the absence in the run section
|
||||||
|
continue-on-error: true
|
||||||
|
with:
|
||||||
|
name: last-bloat-${{ matrix.os }}
|
||||||
|
path: last
|
||||||
|
- name: cargo-bloat
|
||||||
|
run: |
|
||||||
|
BINARY_PACKAGE=$(cargo metadata --no-deps | jq -r '.packages[] | select( .targets[] | select(.kind[] | contains("bin"))) | .name')
|
||||||
|
cargo bloat -p $BINARY_PACKAGE --release --crates --message-format json > bloat.json
|
||||||
|
if test -f last/bloat.json; then
|
||||||
|
last_size="last size: $(printf "%0.4f MB" $(bc -l <<< $(jq -r '."file-size"' last/bloat.json)/1000000))"
|
||||||
|
fi
|
||||||
|
size="size: $(printf "%0.4f MB" $(bc -l <<< $(jq -r '."file-size"' bloat.json)/1000000))"
|
||||||
|
echo "Here is how the binary size progressed on ${{ matrix.os }}" >> body
|
||||||
|
echo $last_size >> body
|
||||||
|
echo $size >> body
|
||||||
|
gh pr comment ${{ github.event.number }} -F body
|
||||||
|
- name: Save size result
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: ${{ github.sha }}-bloat-${{ matrix.os }}
|
||||||
|
path: bloat.json
|
||||||
|
- name: Save last size result
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: last-bloat-${{ matrix.os }}
|
||||||
|
path: bloat.json
|
||||||
|
|
||||||
|
|
||||||
|
outdated:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: ubuntu / stable / outdated
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@master
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- name: Install stable
|
||||||
|
uses: https://github.com/dtolnay/rust-toolchain@stable
|
||||||
|
- uses: https://github.com/taiki-e/cache-cargo-install-action@v1
|
||||||
|
with:
|
||||||
|
tool: cargo-outdated
|
||||||
|
- name: cargo-outdated
|
||||||
|
run: |
|
||||||
|
echo There are some new verions the used dependencies: > body
|
||||||
|
echo "" >> body
|
||||||
|
if cargo outdated --exit-code 1 >> body; then
|
||||||
|
echo dependencies look good
|
||||||
|
else
|
||||||
|
gh pr comment ${{ github.event.number }} -F body
|
||||||
|
fi
|
||||||
|
|
||||||
|
iai:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: ubuntu / stable / iai
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@master
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- name: Install stable
|
||||||
|
uses: https://github.com/dtolnay/rust-toolchain@stable
|
||||||
|
- uses: https://github.com/taiki-e/install-action@valgrind
|
||||||
|
- name: Download last bench result
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
|
# we handle the absence in the run section
|
||||||
|
continue-on-error: true
|
||||||
|
with:
|
||||||
|
name: last-bench
|
||||||
|
path: last
|
||||||
|
- name: cargo-bloat
|
||||||
|
run: |
|
||||||
|
cargo bench --bench iai > bench.result
|
||||||
|
if test -f last/bench.result; then
|
||||||
|
echo Last benchmark results: >> body
|
||||||
|
cat last/bench.result >> body
|
||||||
|
fi
|
||||||
|
echo "Benchmark results" >> body
|
||||||
|
cat bench.result >> body
|
||||||
|
gh pr comment ${{ github.event.number }} -F body
|
||||||
|
- name: Save size result
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: ${{ github.sha }}-bench
|
||||||
|
path: bench.result
|
||||||
|
- name: Save last size result
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: last-bench
|
||||||
|
path: bench.result
|
||||||
|
|
@ -0,0 +1,162 @@
|
||||||
|
name: release
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- '*-?v[0-9]+*'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
# Create the Github Release™ so the packages have something to be uploaded to
|
||||||
|
|
||||||
|
create-release:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: https://github.com/taiki-e/create-gh-release-action@v1
|
||||||
|
with:
|
||||||
|
# (Optional) Path to changelog.
|
||||||
|
changelog: CHANGELOG.md
|
||||||
|
# (Required) GitHub token for creating GitHub Releases.
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
draft: true
|
||||||
|
branch: main
|
||||||
|
|
||||||
|
# create-release:
|
||||||
|
# runs-on: ubuntu-latest
|
||||||
|
# outputs:
|
||||||
|
# has-releases: ${{ steps.create-release.outputs.has-releases }}
|
||||||
|
# env:
|
||||||
|
# GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
# steps:
|
||||||
|
# - uses: actions/checkout@v3
|
||||||
|
# - name: Install Rust
|
||||||
|
# run: rustup update 1.67.1 --no-self-update && rustup default 1.67.1
|
||||||
|
# - name: Install cargo-dist
|
||||||
|
# run: curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.0.5/cargo-dist-v0.0.5-installer.sh | sh
|
||||||
|
# - id: create-release
|
||||||
|
# run: |
|
||||||
|
# cargo dist manifest --tag=${{ github.ref_name }} --artifacts=all --no-local-paths --output-format=json > dist-manifest.json
|
||||||
|
# echo "dist manifest ran successfully"
|
||||||
|
# cat dist-manifest.json
|
||||||
|
|
||||||
|
# # Create the Github Release™ based on what cargo-dist thinks it should be
|
||||||
|
# ANNOUNCEMENT_TITLE=$(cat dist-manifest.json | jq --raw-output ".announcement_title")
|
||||||
|
# IS_PRERELEASE=$(cat dist-manifest.json | jq --raw-output ".announcement_is_prerelease")
|
||||||
|
# cat dist-manifest.json | jq --raw-output ".announcement_github_body" > new_dist_announcement.md
|
||||||
|
# gh release create ${{ github.ref_name }} --draft --prerelease="$IS_PRERELEASE" --title="$ANNOUNCEMENT_TITLE" --notes-file=new_dist_announcement.md
|
||||||
|
# echo "created announcement!"
|
||||||
|
|
||||||
|
# # Upload the manifest to the Github Release™
|
||||||
|
# gh release upload ${{ github.ref_name }} dist-manifest.json
|
||||||
|
# echo "uploaded manifest!"
|
||||||
|
|
||||||
|
# # Disable all the upload-artifacts tasks if we have no actual releases
|
||||||
|
# HAS_RELEASES=$(cat dist-manifest.json | jq --raw-output ".releases != null")
|
||||||
|
# echo "has-releases=$HAS_RELEASES" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
approve-release:
|
||||||
|
# Only run after all the other tasks
|
||||||
|
needs: [create-release]
|
||||||
|
permissions:
|
||||||
|
issues: write
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: https://github.com/trstringer/manual-approval@v1
|
||||||
|
with:
|
||||||
|
secret: ${{ github.TOKEN }}
|
||||||
|
approvers: hmuendel
|
||||||
|
minimum-approvals: 1
|
||||||
|
issue-title: "Release: ${{ github.ref_name }}"
|
||||||
|
issue-body: "Please approve or deny the release of version ${{ github.ref_name }}"
|
||||||
|
exclude-workflow-initiator-as-approver: false
|
||||||
|
additional-approved-words: 'sure,go,continue'
|
||||||
|
additional-denied-words: 'nope,cancel,stop'
|
||||||
|
|
||||||
|
upload-assets:
|
||||||
|
needs: [create-release]
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
- ubuntu-latest
|
||||||
|
- macos-latest
|
||||||
|
- windows-latest
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: https://github.com/taiki-e/upload-rust-binary-action@v1
|
||||||
|
with:
|
||||||
|
# (required) Comma-separated list of binary names (non-extension portion of filename) to build and upload.
|
||||||
|
# Note that glob pattern is not supported yet.
|
||||||
|
# TODO: Make this general
|
||||||
|
bin: rust-ci-test-repo
|
||||||
|
# (optional) On which platform to distribute the `.tar.gz` file.
|
||||||
|
# [default value: unix]
|
||||||
|
# [possible values: all, unix, windows, none]
|
||||||
|
tar: unix
|
||||||
|
# (optional) On which platform to distribute the `.zip` file.
|
||||||
|
# [default value: windows]
|
||||||
|
# [possible values: all, unix, windows, none]
|
||||||
|
zip: windows
|
||||||
|
# (required) GitHub token for uploading assets to GitHub Releases.
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
checksum: sha256
|
||||||
|
include: LICENSE,README.md
|
||||||
|
|
||||||
|
# Build and packages all the things
|
||||||
|
# upload-artifacts:
|
||||||
|
# # Let the initial task tell us to not run (currently very blunt)
|
||||||
|
# needs: create-release
|
||||||
|
# if: ${{ needs.create-release.outputs.has-releases == 'true' }}
|
||||||
|
# strategy:
|
||||||
|
# matrix:
|
||||||
|
# # For these target platforms
|
||||||
|
# include:
|
||||||
|
# - os: macos-11
|
||||||
|
# dist-args: --artifacts=local --target=aarch64-apple-darwin --target=x86_64-apple-darwin
|
||||||
|
# install-dist: curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.0.5/cargo-dist-v0.0.5-installer.sh | sh
|
||||||
|
# - os: ubuntu-20.04
|
||||||
|
# dist-args: --artifacts=local --target=x86_64-unknown-linux-gnu
|
||||||
|
# install-dist: curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.0.5/cargo-dist-v0.0.5-installer.sh | sh
|
||||||
|
# - os: windows-2019
|
||||||
|
# dist-args: --artifacts=local --target=x86_64-pc-windows-msvc
|
||||||
|
# install-dist: irm https://github.com/axodotdev/cargo-dist/releases/download/v0.0.5/cargo-dist-v0.0.5-installer.ps1 | iex
|
||||||
|
|
||||||
|
# runs-on: ${{ matrix.os }}
|
||||||
|
# env:
|
||||||
|
# GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
# steps:
|
||||||
|
# - uses: actions/checkout@v3
|
||||||
|
# - name: Install Rust
|
||||||
|
# run: rustup update 1.67.1 --no-self-update && rustup default 1.67.1
|
||||||
|
# - name: Install cargo-dist
|
||||||
|
# run: ${{ matrix.install-dist }}
|
||||||
|
# - name: Run cargo-dist
|
||||||
|
# # This logic is a bit janky because it's trying to be a polyglot between
|
||||||
|
# # powershell and bash since this will run on windows, macos, and linux!
|
||||||
|
# # The two platforms don't agree on how to talk about env vars but they
|
||||||
|
# # do agree on 'cat' and '$()' so we use that to marshal values between commands.
|
||||||
|
# run: |
|
||||||
|
# # Actually do builds and make zips and whatnot
|
||||||
|
# cargo dist build --tag=${{ github.ref_name }} --output-format=json ${{ matrix.dist-args }} > dist-manifest.json
|
||||||
|
# echo "dist ran successfully"
|
||||||
|
# cat dist-manifest.json
|
||||||
|
|
||||||
|
# # Parse out what we just built and upload it to the Github Release™
|
||||||
|
# cat dist-manifest.json | jq --raw-output ".artifacts[]?.path | select( . != null )" > uploads.txt
|
||||||
|
# echo "uploading..."
|
||||||
|
# cat uploads.txt
|
||||||
|
# gh release upload ${{ github.ref_name }} $(cat uploads.txt)
|
||||||
|
# echo "uploaded!"
|
||||||
|
|
||||||
|
publish-release:
|
||||||
|
# Only run after all the other tasks, but it's ok if upload-artifacts was skipped
|
||||||
|
needs: [approve-release, upload-assets]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: mark release as non-draft
|
||||||
|
run: |
|
||||||
|
gh release edit ${{ github.ref_name }} --draft=false
|
||||||
|
|
@ -0,0 +1,81 @@
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
pull_request:
|
||||||
|
branches: [main]
|
||||||
|
schedule:
|
||||||
|
- cron: '7 7 * * *'
|
||||||
|
name: scheduled
|
||||||
|
jobs:
|
||||||
|
# https://twitter.com/mycoliza/status/1571295690063753218
|
||||||
|
nightly:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: ubuntu / nightly
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- name: Install nightly
|
||||||
|
uses: https://github.com/dtolnay/rust-toolchain@nightly
|
||||||
|
- name: cargo generate-lockfile
|
||||||
|
if: hashFiles('Cargo.lock') == ''
|
||||||
|
run: cargo generate-lockfile
|
||||||
|
- name: cargo test --locked
|
||||||
|
run: cargo test --locked --all-features --all-targets
|
||||||
|
# https://twitter.com/alcuadrado/status/1571291687837732873
|
||||||
|
update:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: ubuntu / beta / updated
|
||||||
|
# There's no point running this if no Cargo.lock was checked in in the
|
||||||
|
# first place, since we'd just redo what happened in the regular test job.
|
||||||
|
# Unfortunately, hashFiles only works in if on steps, so we reepeat it.
|
||||||
|
# if: hashFiles('Cargo.lock') != ''
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- name: Install beta
|
||||||
|
if: hashFiles('Cargo.lock') != ''
|
||||||
|
uses: https://github.com/dtolnay/rust-toolchain@beta
|
||||||
|
- name: cargo update
|
||||||
|
if: hashFiles('Cargo.lock') != ''
|
||||||
|
run: cargo update
|
||||||
|
- name: cargo test
|
||||||
|
if: hashFiles('Cargo.lock') != ''
|
||||||
|
run: cargo test --locked --all-features --all-targets
|
||||||
|
env:
|
||||||
|
RUSTFLAGS: -D deprecated
|
||||||
|
|
||||||
|
audit:
|
||||||
|
name: stable / audit
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
checks: write
|
||||||
|
issues: write
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: https://github.com/rustsec/audit-check@v1
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
deny:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: stable / deny
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
checks:
|
||||||
|
- advisories
|
||||||
|
- bans licenses sources
|
||||||
|
# Prevent sudden announcement of a new advisory from failing ci:
|
||||||
|
continue-on-error: ${{ matrix.checks == 'advisories' }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- name: Install stable
|
||||||
|
uses: https://github.com/dtolnay/rust-toolchain@stable
|
||||||
|
- uses: https://github.com/EmbarkStudios/cargo-deny-action@v1
|
||||||
|
with:
|
||||||
|
command: check ${{ matrix.checks }}
|
||||||
Loading…
Reference in New Issue