aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows')
-rw-r--r--.github/workflows/audit.yml24
-rw-r--r--.github/workflows/cd.yml111
-rw-r--r--.github/workflows/ci.yml64
3 files changed, 199 insertions, 0 deletions
diff --git a/.github/workflows/audit.yml b/.github/workflows/audit.yml
new file mode 100644
index 0000000..562d5e0
--- /dev/null
+++ b/.github/workflows/audit.yml
@@ -0,0 +1,24 @@
+name: Security audit
+
+on:
+ schedule:
+ # Runs at 00:00 UTC everyday
+ - cron: '0 0 * * *'
+ push:
+ paths:
+ - '**/Cargo.toml'
+ - '**/Cargo.lock'
+ pull_request:
+
+jobs:
+ audit:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ - uses: Swatinem/rust-cache@v2
+ - name: Run security audit
+ uses: rustsec/audit-check@v2.0.0
+ with:
+ token: ${{ secrets.GITHUB_TOKEN }}
+
diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml
new file mode 100644
index 0000000..d0c827d
--- /dev/null
+++ b/.github/workflows/cd.yml
@@ -0,0 +1,111 @@
+name: CD # Continuous Deployment
+
+on:
+ push:
+ tags:
+ - '[v]?[0-9]+.[0-9]+.[0-9]+'
+
+jobs:
+
+ publish:
+ name: Publishing for ${{ matrix.job.os-name }}-${{ matrix.job.architecture }}
+ runs-on: ${{ matrix.job.os }}
+ permissions:
+ contents: write
+ strategy:
+ fail-fast: false
+ matrix:
+ rust: [stable]
+ job:
+ - os: macos-latest
+ os-name: macos
+ target: x86_64-apple-darwin
+ architecture: x86_64
+ - os: macos-latest
+ os-name: macos
+ target: aarch64-apple-darwin
+ architecture: arm64
+ - os: ubuntu-latest
+ os-name: linux
+ target: x86_64-unknown-linux-gnu
+ architecture: x86_64
+ - os: windows-latest
+ os-name: windows
+ target: x86_64-pc-windows-msvc
+ architecture: x86_64
+ - os: ubuntu-latest
+ os-name: linux
+ target: aarch64-unknown-linux-gnu
+ architecture: arm64
+ - os: ubuntu-latest
+ os-name: linux
+ target: i686-unknown-linux-gnu
+ architecture: i686
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ - name: Install Rust toolchain
+ uses: dtolnay/rust-toolchain@stable
+ with:
+ toolchain: ${{ matrix.rust }}
+ target: ${{ matrix.job.target }}
+ - name: Install cross
+ uses: taiki-e/install-action@v2
+ with:
+ tool: cross
+ - name: Build release binary
+ run: cross build --locked --release --target ${{ matrix.job.target }}
+
+ - name: install strip command
+ if: matrix.job.target == 'aarch64-unknown-linux-gnu'
+ shell: bash
+ run: |
+ sudo apt update
+ sudo apt-get install -y binutils-aarch64-linux-gnu
+ - name: Packaging final binary
+ shell: bash
+ run: |
+ BINARY=target/${{ matrix.job.target }}/release/multiwan-dyndns
+ if [[ ${{ runner.os }} == 'Windows' ]]; then
+ BINARY=$BINARY.exe
+ fi
+
+ ####### reduce binary size by removing debug symbols #######
+ if [[ ${{ matrix.job.target }} == aarch64-unknown-linux-gnu ]]; then
+ GCC_PREFIX="aarch64-linux-gnu-"
+ else
+ GCC_PREFIX=""
+ fi
+ "$GCC_PREFIX"strip $BINARY
+
+ ########## create tar.gz ##########
+ mkdir assets
+ RELEASE_NAME=multiwan-dyndns-${GITHUB_REF/refs\/tags\//}-${{ matrix.job.os-name }}-${{ matrix.job.architecture }}
+ tar czvf assets/$RELEASE_NAME.tar.gz $BINARY
+
+ ########## create sha256 ##########
+ if [[ ${{ runner.os }} == 'Windows' ]]; then
+ certutil -hashfile assets/$RELEASE_NAME.tar.gz sha256 | grep -E [A-Fa-f0-9]{64} > assets/$RELEASE_NAME.sha256
+ else
+ shasum -a 256 assets/$RELEASE_NAME.tar.gz > assets/$RELEASE_NAME.sha256
+ fi
+ - name: Releasing assets
+ uses: softprops/action-gh-release@v2
+ with:
+ files: assets/*
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ publish-cargo:
+ name: Publishing to Cargo
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ - name: Install Rust toolchain
+ uses: dtolnay/rust-toolchain@stable
+ - uses: Swatinem/rust-cache@v2
+ - run: cargo publish
+ env:
+ CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..56067a6
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,64 @@
+name: CI # Continuous Integration
+
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+
+jobs:
+
+ test:
+ name: Test Suite
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ - name: Install Rust toolchain
+ uses: dtolnay/rust-toolchain@stable
+ - uses: Swatinem/rust-cache@v2
+ - name: Run tests
+ run: cargo test --all-features --workspace
+
+ rustfmt:
+ name: Rustfmt
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ - name: Install Rust toolchain
+ uses: dtolnay/rust-toolchain@stable
+ with:
+ components: rustfmt
+ - uses: Swatinem/rust-cache@v2
+ - name: Check formatting
+ run: cargo fmt --all --check
+
+ clippy:
+ name: Clippy
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ - name: Install Rust toolchain
+ uses: dtolnay/rust-toolchain@stable
+ with:
+ components: clippy
+ - uses: Swatinem/rust-cache@v2
+ - name: Clippy check
+ run: cargo clippy --all-targets --all-features --workspace -- -D warnings
+
+ docs:
+ name: Docs
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ - name: Install Rust toolchain
+ uses: dtolnay/rust-toolchain@stable
+ - uses: Swatinem/rust-cache@v2
+ - name: Check documentation
+ env:
+ RUSTDOCFLAGS: -D warnings
+ run: cargo doc --no-deps --document-private-items --all-features --workspace --examples
+