Skip to content

Commit f883819

Browse files
authored
Merge pull request #4 from Dockermint/ci/github-workflows
Ci/GitHub workflows
2 parents 4572669 + 20d4ba3 commit f883819

5 files changed

Lines changed: 336 additions & 0 deletions

File tree

.github/dependabot.yml

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
version: 2
2+
updates:
3+
- package-ecosystem: "cargo"
4+
directory: "/"
5+
target-branch: "develop"
6+
schedule:
7+
interval: "weekly"
8+
day: "monday"
9+
labels:
10+
- "dependencies"
11+
- "cargo"
12+
commit-message:
13+
prefix: "deps"
14+
include: "scope"
15+
groups:
16+
rust-dependencies:
17+
patterns:
18+
- "*"
19+
open-pull-requests-limit: 10
20+
reviewers:
21+
- "Nayrosk"
22+
23+
- package-ecosystem: "github-actions"
24+
directory: "/"
25+
target-branch: "develop"
26+
schedule:
27+
interval: "weekly"
28+
day: "monday"
29+
labels:
30+
- "dependencies"
31+
- "ci"
32+
commit-message:
33+
prefix: "ci"
34+
include: "scope"
35+
groups:
36+
github-actions:
37+
patterns:
38+
- "*"
39+
open-pull-requests-limit: 5
40+
reviewers:
41+
- "Nayrosk"

.github/workflows/build.yml

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
name: Build
2+
3+
on:
4+
pull_request:
5+
branches: [develop]
6+
7+
permissions:
8+
contents: read
9+
10+
env:
11+
CARGO_TERM_COLOR: always
12+
RUST_VERSION: "1.94.1"
13+
14+
jobs:
15+
build:
16+
name: Build (${{ matrix.target }})
17+
runs-on: ${{ matrix.runner }}
18+
strategy:
19+
fail-fast: false
20+
matrix:
21+
include:
22+
- target: x86_64-unknown-linux-gnu
23+
runner: ubuntu-latest
24+
use-cross: false
25+
- target: x86_64-unknown-linux-musl
26+
runner: ubuntu-latest
27+
use-cross: false
28+
- target: aarch64-unknown-linux-gnu
29+
runner: ubuntu-latest
30+
use-cross: true
31+
- target: aarch64-unknown-linux-musl
32+
runner: ubuntu-latest
33+
use-cross: true
34+
- target: aarch64-apple-darwin
35+
runner: macos-latest
36+
use-cross: false
37+
steps:
38+
- uses: actions/checkout@v6
39+
40+
- uses: dtolnay/rust-toolchain@master
41+
with:
42+
toolchain: ${{ env.RUST_VERSION }}
43+
targets: ${{ matrix.target }}
44+
45+
- uses: Swatinem/rust-cache@v2
46+
with:
47+
key: ${{ matrix.target }}
48+
49+
- name: Install musl-tools
50+
if: contains(matrix.target, 'musl') && !matrix.use-cross
51+
run: sudo apt-get update && sudo apt-get install -y musl-tools
52+
53+
- name: Install cross
54+
if: matrix.use-cross
55+
run: cargo install cross --locked
56+
57+
- name: Build
58+
run: |
59+
if [ "${{ matrix.use-cross }}" = "true" ]; then
60+
cross build --release --locked --target ${{ matrix.target }}
61+
else
62+
cargo build --release --locked --target ${{ matrix.target }}
63+
fi
64+
65+
- name: Run tests
66+
run: |
67+
if [ "${{ matrix.use-cross }}" = "true" ]; then
68+
cross test --release --locked --target ${{ matrix.target }}
69+
else
70+
cargo test --release --locked --target ${{ matrix.target }}
71+
fi

.github/workflows/codeql.yml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
name: CodeQL
2+
3+
on:
4+
pull_request:
5+
branches: [develop]
6+
push:
7+
branches: [develop]
8+
schedule:
9+
- cron: "0 6 * * 1"
10+
11+
permissions:
12+
security-events: write
13+
contents: read
14+
15+
jobs:
16+
analyze:
17+
name: Analyze Rust
18+
runs-on: ubuntu-latest
19+
steps:
20+
- uses: actions/checkout@v6
21+
22+
- uses: github/codeql-action/init@v4
23+
with:
24+
languages: rust
25+
build-mode: none
26+
27+
- uses: github/codeql-action/analyze@v4
28+
with:
29+
category: "/language:rust"

.github/workflows/lint.yml

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
name: Lint
2+
3+
on:
4+
pull_request:
5+
branches: [develop]
6+
7+
permissions:
8+
contents: read
9+
10+
env:
11+
CARGO_TERM_COLOR: always
12+
RUST_VERSION: "1.94.1"
13+
14+
jobs:
15+
fmt:
16+
name: Rustfmt
17+
runs-on: ubuntu-latest
18+
steps:
19+
- uses: actions/checkout@v6
20+
21+
- uses: dtolnay/rust-toolchain@master
22+
with:
23+
toolchain: ${{ env.RUST_VERSION }}
24+
components: rustfmt
25+
26+
- run: cargo fmt --check
27+
28+
clippy:
29+
name: Clippy
30+
runs-on: ubuntu-latest
31+
steps:
32+
- uses: actions/checkout@v6
33+
34+
- uses: dtolnay/rust-toolchain@master
35+
with:
36+
toolchain: ${{ env.RUST_VERSION }}
37+
components: clippy
38+
39+
- uses: Swatinem/rust-cache@v2
40+
41+
- run: cargo clippy --all-targets --all-features -- -D warnings
42+
43+
deny:
44+
name: Cargo Deny
45+
runs-on: ubuntu-latest
46+
steps:
47+
- uses: actions/checkout@v6
48+
49+
- uses: EmbarkStudios/cargo-deny-action@v2
50+
51+
audit:
52+
name: Cargo Audit
53+
runs-on: ubuntu-latest
54+
steps:
55+
- uses: actions/checkout@v6
56+
57+
- uses: rustsec/audit-check@v2
58+
with:
59+
token: ${{ secrets.GITHUB_TOKEN }}
60+
61+
mutants:
62+
name: Cargo Mutants
63+
runs-on: ubuntu-latest
64+
if: github.event_name == 'pull_request'
65+
steps:
66+
- uses: actions/checkout@v6
67+
with:
68+
fetch-depth: 0
69+
70+
- uses: dtolnay/rust-toolchain@master
71+
with:
72+
toolchain: ${{ env.RUST_VERSION }}
73+
74+
- uses: Swatinem/rust-cache@v2
75+
76+
- uses: taiki-e/install-action@v2
77+
with:
78+
tool: cargo-mutants
79+
80+
- name: Generate diff
81+
run: git diff origin/${{ github.base_ref }}.. | tee git.diff
82+
83+
- name: Run mutation tests on diff
84+
run: cargo mutants --no-shuffle -vV --in-diff git.diff
85+
86+
- uses: actions/upload-artifact@v6
87+
if: always()
88+
with:
89+
name: mutants.out
90+
path: mutants.out

.github/workflows/release.yml

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
name: Release
2+
3+
on:
4+
push:
5+
tags:
6+
- "v*"
7+
8+
permissions:
9+
contents: write
10+
11+
env:
12+
CARGO_TERM_COLOR: always
13+
RUST_VERSION: "1.94.1"
14+
15+
jobs:
16+
build-release:
17+
name: Build (${{ matrix.target }})
18+
runs-on: ${{ matrix.runner }}
19+
strategy:
20+
fail-fast: true
21+
matrix:
22+
include:
23+
- target: x86_64-unknown-linux-gnu
24+
runner: ubuntu-latest
25+
use-cross: false
26+
- target: x86_64-unknown-linux-musl
27+
runner: ubuntu-latest
28+
use-cross: false
29+
- target: aarch64-unknown-linux-gnu
30+
runner: ubuntu-latest
31+
use-cross: true
32+
- target: aarch64-unknown-linux-musl
33+
runner: ubuntu-latest
34+
use-cross: true
35+
- target: aarch64-apple-darwin
36+
runner: macos-latest
37+
use-cross: false
38+
steps:
39+
- uses: actions/checkout@v6
40+
41+
- uses: dtolnay/rust-toolchain@master
42+
with:
43+
toolchain: ${{ env.RUST_VERSION }}
44+
targets: ${{ matrix.target }}
45+
46+
- name: Install musl-tools
47+
if: contains(matrix.target, 'musl') && !matrix.use-cross
48+
run: sudo apt-get update && sudo apt-get install -y musl-tools
49+
50+
- name: Install cross
51+
if: matrix.use-cross
52+
run: cargo install cross --locked
53+
54+
- name: Build
55+
run: |
56+
if [ "${{ matrix.use-cross }}" = "true" ]; then
57+
cross build --release --locked --target ${{ matrix.target }}
58+
else
59+
cargo build --release --locked --target ${{ matrix.target }}
60+
fi
61+
62+
- name: Package binary
63+
run: |
64+
BIN_NAME="dockermint"
65+
TAG="${GITHUB_REF_NAME}"
66+
ARCHIVE="${BIN_NAME}-${TAG}-${{ matrix.target }}.tar.gz"
67+
tar -czf "${ARCHIVE}" \
68+
-C "target/${{ matrix.target }}/release" \
69+
"${BIN_NAME}"
70+
echo "ARCHIVE=${ARCHIVE}" >> "$GITHUB_ENV"
71+
72+
- uses: actions/upload-artifact@v6
73+
with:
74+
name: release-${{ matrix.target }}
75+
path: ${{ env.ARCHIVE }}
76+
retention-days: 1
77+
78+
publish:
79+
name: Publish Release
80+
needs: build-release
81+
runs-on: ubuntu-latest
82+
steps:
83+
- uses: actions/checkout@v6
84+
85+
- uses: actions/download-artifact@v7
86+
with:
87+
pattern: release-*
88+
merge-multiple: true
89+
path: artifacts/
90+
91+
- name: Create source archive
92+
run: |
93+
TAG="${GITHUB_REF_NAME}"
94+
git archive --format=tar.gz --prefix="dockermint-${TAG}/" \
95+
-o "artifacts/dockermint-${TAG}-src.tar.gz" HEAD
96+
97+
- name: Generate checksums
98+
working-directory: artifacts/
99+
run: sha256sum * > SHA256SUMS.txt
100+
101+
- name: Create GitHub Release
102+
uses: softprops/action-gh-release@v2
103+
with:
104+
generate_release_notes: true
105+
files: artifacts/*

0 commit comments

Comments
 (0)