aboutsummaryrefslogtreecommitdiffstats
path: root/.github/workflows/build-release-binaries.yml
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows/build-release-binaries.yml')
-rw-r--r--.github/workflows/build-release-binaries.yml174
1 files changed, 174 insertions, 0 deletions
diff --git a/.github/workflows/build-release-binaries.yml b/.github/workflows/build-release-binaries.yml
new file mode 100644
index 0000000..5085246
--- /dev/null
+++ b/.github/workflows/build-release-binaries.yml
@@ -0,0 +1,174 @@
+name: Build release binaries (and publish them if this is a tag)
+
+on: push
+
+jobs:
+ binaries:
+ name: ${{ matrix.os }} for ${{ matrix.target }}
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ target:
+ - x86_64-unknown-linux-musl
+ - aarch64-unknown-linux-musl
+ - armv7-unknown-linux-musleabihf
+ - arm-unknown-linux-musleabihf
+ - mips-unknown-linux-musl
+ - mipsel-unknown-linux-musl
+ - mips64-unknown-linux-gnuabi64
+ - mips64el-unknown-linux-gnuabi64
+ - riscv64gc-unknown-linux-gnu
+ - x86_64-pc-windows-msvc
+ - x86_64-apple-darwin
+ - x86_64-unknown-freebsd
+ include:
+ - os: ubuntu-latest
+ target: x86_64-unknown-linux-musl
+ artifact_name: target/x86_64-unknown-linux-musl/release/miniserve
+ release_name: x86_64-unknown-linux-musl
+ cross: true
+ strip: true
+ compress: true
+ cargo_flags: ""
+ - os: ubuntu-latest
+ target: aarch64-unknown-linux-musl
+ artifact_name: target/aarch64-unknown-linux-musl/release/miniserve
+ release_name: aarch64-unknown-linux-musl
+ cross: true
+ strip: false
+ compress: true
+ cargo_flags: ""
+ - os: ubuntu-latest
+ target: armv7-unknown-linux-musleabihf
+ artifact_name: target/armv7-unknown-linux-musleabihf/release/miniserve
+ release_name: armv7-unknown-linux-musleabihf
+ cross: true
+ strip: false
+ compress: true
+ cargo_flags: ""
+ - os: ubuntu-latest
+ target: arm-unknown-linux-musleabihf
+ artifact_name: target/arm-unknown-linux-musleabihf/release/miniserve
+ release_name: arm-unknown-linux-musleabihf
+ cross: true
+ strip: false
+ compress: true
+ cargo_flags: ""
+ - os: ubuntu-latest
+ target: mips-unknown-linux-musl
+ artifact_name: target/mips-unknown-linux-musl/release/miniserve
+ release_name: mips-unknown-linux-musl
+ cross: true
+ strip: false
+ compress: true
+ cargo_flags: "--no-default-features"
+ - os: ubuntu-latest
+ target: mipsel-unknown-linux-musl
+ artifact_name: target/mipsel-unknown-linux-musl/release/miniserve
+ release_name: mipsel-unknown-linux-musl
+ cross: true
+ strip: false
+ compress: true
+ cargo_flags: "--no-default-features"
+ - os: ubuntu-latest
+ target: mips64-unknown-linux-gnuabi64
+ artifact_name: target/mips64-unknown-linux-gnuabi64/release/miniserve
+ release_name: mips64-unknown-linux-gnuabi64
+ cross: true
+ strip: false
+ compress: false
+ cargo_flags: "--no-default-features"
+ - os: ubuntu-latest
+ target: mips64el-unknown-linux-gnuabi64
+ artifact_name: target/mips64el-unknown-linux-gnuabi64/release/miniserve
+ release_name: mips64el-unknown-linux-gnuabi64
+ cross: true
+ strip: false
+ compress: false
+ cargo_flags: "--no-default-features"
+ - os: ubuntu-latest
+ target: riscv64gc-unknown-linux-gnu
+ artifact_name: target/riscv64gc-unknown-linux-gnu/release/miniserve
+ release_name: riscv64gc-unknown-linux-gnu
+ cross: true
+ strip: false
+ compress: false
+ cargo_flags: "--no-default-features"
+ - os: windows-latest
+ target: x86_64-pc-windows-msvc
+ artifact_name: target/x86_64-pc-windows-msvc/release/miniserve.exe
+ release_name: x86_64-pc-windows-msvc.exe
+ cross: false
+ strip: true
+ compress: true
+ cargo_flags: ""
+ - os: macos-latest
+ target: x86_64-apple-darwin
+ artifact_name: target/x86_64-apple-darwin/release/miniserve
+ release_name: x86_64-apple-darwin
+ cross: false
+ strip: true
+ compress: true
+ cargo_flags: ""
+ - os: ubuntu-latest
+ target: x86_64-unknown-freebsd
+ artifact_name: target/x86_64-unknown-freebsd/release/miniserve
+ release_name: x86_64-unknown-freebsd
+ cross: true
+ strip: false
+ compress: false
+ cargo_flags: ""
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v2
+
+ - name: Setup Rust toolchain
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: stable
+ target: ${{ matrix.target }}
+
+ - name: cargo build
+ uses: actions-rs/cargo@v1
+ with:
+ command: build
+ args: --release --locked --target=${{ matrix.target }} ${{ matrix.cargo_flags }}
+ use-cross: ${{ matrix.cross }}
+
+ - name: Compress binaries
+ uses: svenstaro/upx-action@v2
+ with:
+ file: ${{ matrix.artifact_name }}
+ args: --lzma
+ strip: ${{ matrix.strip }}
+ if: ${{ matrix.compress }}
+
+ ###
+ # Below this line, steps will only be ran if a tag was pushed.
+ ###
+
+ - name: Get tag name
+ id: tag_name
+ run: |
+ echo ::set-output name=current_version::${GITHUB_REF#refs/tags/v}
+ shell: bash
+ if: startsWith('refs/tags/v', github.ref)
+
+ - name: Get CHANGELOG.md entry
+ id: changelog_reader
+ uses: mindsers/changelog-reader-action@v1
+ with:
+ version: ${{ steps.tag_name.outputs.current_version }}
+ path: ./CHANGELOG.md
+ if: startsWith('refs/tags/v', github.ref)
+
+ - name: Publish
+ uses: svenstaro/upload-release-action@v2
+ with:
+ repo_token: ${{ secrets.GITHUB_TOKEN }}
+ file: ${{ matrix.artifact_name }}
+ tag: ${{ github.ref }}
+ asset_name: miniserve-$tag-${{ matrix.release_name }}
+ body: ${{ steps.changelog_reader.outputs.log_entry }}
+ if: startsWith('refs/tags/v', github.ref)