aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/cd.yml
diff options
context:
space:
mode:
authorGus Power <gus@infinitesidequests.com>2025-05-12 15:59:16 +0100
committerGus Power <gus@infinitesidequests.com>2025-05-12 15:59:16 +0100
commit65746b829b8247ab366182ea028dc1eb0d21522a (patch)
treec461ea26229177d74e0708bacc739c07892f6d1b /.github/workflows/cd.yml
parent1d6fd8359fddbae8aeac17b90ed50d41143ffbb6 (diff)
add github template stuff as per https://rust-github.github.io/
Diffstat (limited to '.github/workflows/cd.yml')
-rw-r--r--.github/workflows/cd.yml111
1 files changed, 111 insertions, 0 deletions
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 }}