Skip to content

chore(deps): lock file maintenance #445

chore(deps): lock file maintenance

chore(deps): lock file maintenance #445

Workflow file for this run

name: CI
on:
push:
branches: [main]
tags: ["v*"]
pull_request:
branches: [main]
env:
RUST_BACKTRACE: 1
NO_FACTORDB: 1
jobs:
fmt:
name: Format
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- name: Stable toolchain with rustfmt
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- uses: swatinem/rust-cache@v2
- name: Check coding style
run: cargo fmt --check --all
clippy:
name: Clippy
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- name: Stable toolchain with clippy
uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- uses: swatinem/rust-cache@v2
- name: Lint
run: cargo clippy --all-targets --all-features -- -D warnings
docs:
name: Docs
runs-on: ubuntu-latest
timeout-minutes: 30
env:
RUSTDOCFLAGS: "-Dwarnings"
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: swatinem/rust-cache@v2
- run: cargo doc --no-deps
tests:
name: Tests
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: swatinem/rust-cache@v2
- uses: taiki-e/install-action@cargo-nextest
- name: Test
run: cargo nextest run --all-features --lib --bins --test keys
ctf-challenges:
name: CTF challenges
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: swatinem/rust-cache@v2
- uses: taiki-e/install-action@cargo-nextest
- name: Test
run: cargo nextest run --release --all-features --test "ctf_*"
coverage:
name: Coverage
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@nightly
- uses: swatinem/rust-cache@v2
- uses: taiki-e/install-action@cargo-nextest
- uses: taiki-e/install-action@cargo-llvm-cov
- name: Tests
run: cargo llvm-cov nextest --lcov --output-path lcov.info --all-features --lib --bins --test keys
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v5
with:
files: lcov.info
flags: rust
fail_ci_if_error: true
token: ${{ secrets.CODECOV_TOKEN }}
build:
name: Build
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
runs-on: ${{ matrix.os }}
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: swatinem/rust-cache@v2
# msys2 required by rug on windows
- name: Setup msys2 (windows)
uses: msys2/setup-msys2@v2
if: matrix.os == 'windows-latest'
with:
install: base-devel pacman-mirrors diffutils m4 make openssl openssl-devel
pacboy: gcc:p rust:p
# Only for windows
- name: Msys2 build (windows)
if: matrix.os == 'windows-latest'
shell: msys2 {0}
run: |
cargo build
- name: Build
if: matrix.os != 'windows-latest'
run: cargo build
docker-build:
name: Docker build
runs-on: ubuntu-latest
timeout-minutes: 30
env:
CACHE_VERSION: v1
steps:
- uses: actions/checkout@v4
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Cache
uses: actions/cache@v4
id: cache
with:
path: |
/tmp/cache/rsacracker/target
/tmp/cache/cargo/registry
key: ${{ runner.os }}-rust-${{ env.CACHE_VERSION }}-${{ github.job }}-${{ hashFiles('**/Cargo.toml', '**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-rust-${{ env.CACHE_VERSION }}-${{ github.job }}-
- name: Inject cache into docker
uses: reproducible-containers/buildkit-cache-dance@v3
with:
cache-map: |
{
"/tmp/cache/rsacracker/target": "/usr/src/rsacracker/target",
"/tmp/cache/cargo/registry": "/usr/local/cargo/registry"
}
skip-extraction: ${{ steps.cache.outputs.cache-hit }}
- name: Build
uses: docker/build-push-action@v6
with:
tags: rsacracker:test
outputs: type=docker
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Test the Docker image
run: docker run --rm -v $PWD:/data rsacracker:test -n 323 --attack small_prime --factors
publish-crates_io:
name: Publish to crates.io
runs-on: ubuntu-latest
timeout-minutes: 30
needs: [fmt, clippy, docs, tests, ctf-challenges, coverage, build, docker-build]
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
steps:
- name: Checkout sources
uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- run: cargo publish --token ${CRATES_TOKEN}
env:
CRATES_TOKEN: ${{ secrets.CRATES_TOKEN }}
publish-docker_hub:
name: Publish to hub.docker.com
runs-on: ubuntu-latest
timeout-minutes: 120
needs: [fmt, clippy, docs, tests, ctf-challenges, coverage, build, docker-build]
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
env:
IMAGE_NAME: skyf0l/rsacracker
steps:
- uses: actions/checkout@v4
- name: Install yq
run: |
sudo wget https://github.com/mikefarah/yq/releases/download/${VERSION}/${BINARY} -O /usr/bin/yq
sudo chmod +x /usr/bin/yq
env:
VERSION: v4.40.5
BINARY: yq_linux_amd64
- name: Get package version
id: get_version
run: echo VERSION=$(yq ".package.version" Cargo.toml) >> $GITHUB_OUTPUT
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Setup multi-platform
uses: docker/setup-qemu-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
with:
push: true
tags: ${{ env.IMAGE_NAME }}:${{ steps.get_version.outputs.VERSION }},${{ env.IMAGE_NAME }}:latest
platforms: linux/amd64,linux/arm64
release:
name: GitHub Release
runs-on: ubuntu-latest
timeout-minutes: 30
needs: [publish-crates_io, publish-docker_hub]
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
steps:
- name: Create Release
uses: softprops/action-gh-release@v2
with:
make_latest: "true"