name: release
on:
release:
types: [created]
workflow_dispatch:
jobs:
release_amd64:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
rust:
- stable
os:
- centos:7.4.1708
- centos:7.6.1810
- centos:7.7.1908
- centos:7.8.2003
- centos:7.9.2009
- ubuntu:18.04
- ubuntu:20.04
- ubuntu:22.04
- ubuntu:24.04
- fedora:42
- fedora:43
- debian:11
- debian:12
- debian:13
- rhel:8.6
- rhel:8.7
- rhel:8.8
- rhel:8.9
- rhel:8.10
- rhel:9.0
- rhel:9.1
- rhel:9.2
- rhel:9.3
- rhel:9.4
- rhel:9.5
- rhel:9.6
- rhel:9.7
- rhel:10.0
- rhel:10.1
- almalinux:8.6
- almalinux:8.7
- almalinux:8.8
- almalinux:8.9
- almalinux:8.10
- almalinux:9.0
- almalinux:9.1
- almalinux:9.2
- almalinux:9.3
- almalinux:9.4
- almalinux:9.5
- almalinux:9.6
- almalinux:9.7
- almalinux:10.0
- almalinux:10.1
platform:
- linux/amd64
steps:
- uses: actions/checkout@v4
- name: OS Build
run: |
export full_tgtname=${{ matrix.os }}
export tgtname=$(echo ${{ matrix.os }} | tr -d ':')
export full_platform=${{ matrix.platform }}
export platform=$(echo ${{ matrix.platform }} | awk -F'/' '{print $NF}')
.github/scripts/gen_dockerfile.sh
docker build ./ -t $tgtname-$platform --platform $full_platform
docker run \
-t --rm \
-v "$GITHUB_WORKSPACE:/source" \
-v "$GITHUB_WORKSPACE/target/$platform/$tgtname:/source/target" \
--platform $full_platform \
$tgtname-$platform \
cargo build --release;
shell: bash
- name: OS Create Package
run: |
export tgtname=$(echo ${{ matrix.os }} | tr -d ':')
export platform=$(echo ${{ matrix.platform }} | awk -F'/' '{print $NF}')
.github/scripts/package.sh $platform $tgtname;
shell: bash
- name: Upload Release Asset
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ github.event.release.tag_name }}
files: bender-*.tar.gz
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
release_arm64:
runs-on: ubuntu-24.04-arm
strategy:
fail-fast: false
matrix:
rust:
- stable
os:
- ubuntu:18.04
- ubuntu:20.04
- ubuntu:22.04
- ubuntu:24.04
platform:
- linux/arm64
steps:
- uses: actions/checkout@v4
- name: OS Build
run: |
export full_tgtname=${{ matrix.os }}
export tgtname=$(echo ${{ matrix.os }} | tr -d ':')
export full_platform=${{ matrix.platform }}
export platform=$(echo ${{ matrix.platform }} | awk -F'/' '{print $NF}')
.github/scripts/gen_dockerfile.sh
docker build ./ -t $tgtname-$platform --platform $full_platform
docker run \
-t --rm \
-v "$GITHUB_WORKSPACE:/source" \
-v "$GITHUB_WORKSPACE/target/$platform/$tgtname:/source/target" \
--platform $full_platform \
$tgtname-$platform \
cargo build --release;
shell: bash
- name: OS Create Package
run: |
export tgtname=$(echo ${{ matrix.os }} | tr -d ':')
export platform=$(echo ${{ matrix.platform }} | awk -F'/' '{print $NF}')
.github/scripts/package.sh $platform $tgtname;
shell: bash
- name: Upload Release Asset
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ github.event.release.tag_name }}
files: bender-*.tar.gz
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
release-gnu_amd64:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Dockerfile
run: |
touch Dockerfile
echo "FROM quay.io/pypa/manylinux2014_x86_64" >> Dockerfile
echo "RUN sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/*.repo" >> Dockerfile
echo "RUN sed -i s/^#.*baseurl=http/baseurl=http/g /etc/yum.repos.d/*.repo" >> Dockerfile
echo "RUN sed -i s/^mirrorlist=http/#mirrorlist=http/g /etc/yum.repos.d/*.repo" >> Dockerfile
echo "RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*" >> Dockerfile
echo "RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*" >> Dockerfile
echo "RUN yum group install "Development Tools" -y && yum clean all" >> Dockerfile
echo 'ENV RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo' >> Dockerfile
echo 'ENV PATH=$CARGO_HOME/bin:$PATH' >> Dockerfile
echo >> Dockerfile
echo 'RUN mkdir -p "$CARGO_HOME" && mkdir -p "$RUSTUP_HOME" && \' >> Dockerfile
echo ' curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable && \' >> Dockerfile
echo ' chmod -R a=rwX $CARGO_HOME' >> Dockerfile
echo >> Dockerfile
echo 'WORKDIR /source' >> Dockerfile
- name: OS build
run: |
docker build ./ -t manylinux-amd64 --platform linux/amd64
docker run \
-t --rm \
-v "$GITHUB_WORKSPACE:/source" \
-v "$GITHUB_WORKSPACE/target/amd64:/source/target" \
--platform linux/amd64 \
manylinux-amd64 \
cargo build --release;
- name: GNU Create Package
run: .github/scripts/package.sh amd64
shell: bash
- name: Upload Release Asset
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ github.event.release.tag_name }}
files: bender-*.tar.gz
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
release-gnu_arm64:
runs-on: ubuntu-24.04-arm
steps:
- uses: actions/checkout@v4
- name: Setup Dockerfile
run: |
touch Dockerfile
echo "FROM quay.io/pypa/manylinux2014_aarch64" >> Dockerfile
echo "RUN sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/*.repo" >> Dockerfile
echo "RUN sed -i s/^#.*baseurl=http/baseurl=http/g /etc/yum.repos.d/*.repo" >> Dockerfile
echo "RUN sed -i s/^mirrorlist=http/#mirrorlist=http/g /etc/yum.repos.d/*.repo" >> Dockerfile
echo "RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*" >> Dockerfile
echo "RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*" >> Dockerfile
echo "RUN yum group install "Development Tools" -y && yum clean all" >> Dockerfile
echo 'ENV RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo' >> Dockerfile
echo 'ENV PATH=$CARGO_HOME/bin:$PATH' >> Dockerfile
echo >> Dockerfile
echo 'RUN mkdir -p "$CARGO_HOME" && mkdir -p "$RUSTUP_HOME" && \' >> Dockerfile
echo ' curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable && \' >> Dockerfile
echo ' chmod -R a=rwX $CARGO_HOME' >> Dockerfile
echo >> Dockerfile
echo 'WORKDIR /source' >> Dockerfile
- name: OS build
run: |
docker build ./ -t manylinux-arm64 --platform linux/arm64
docker run \
-t --rm \
-v "$GITHUB_WORKSPACE:/source" \
-v "$GITHUB_WORKSPACE/target/arm64:/source/target" \
--platform linux/arm64 \
manylinux-arm64 \
cargo build --release;
- name: GNU Create Package
run: .github/scripts/package.sh arm64
shell: bash
- name: Upload Release Asset
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ github.event.release.tag_name }}
files: bender-*.tar.gz
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
release-macos:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust
run: |
curl --proto '=https' --tlsv1.2 -sSf https://https://sh.rustup.rs | sh -s -- -y --default-toolchain stable
echo "${CARGO_HOME:-$HOME/.cargo}/bin" >> $GITHUB_PATH
- name: universal2 install
run: |
rustup target add x86_64-apple-darwin
rustup target add aarch64-apple-darwin
cargo install universal2
- name: MacOS Build
run: cargo-universal2 --release
- name: Get Artifact Name
run: |
if [[ "$GITHUB_REF" =~ ^refs/tags/v.*$ ]]; then \
PKG_VERSION=$(echo $GITHUB_REF | sed -n 's/^refs\/tags\/v//p'); \
else \
PKG_VERSION=$(echo $GITHUB_REF | sed -n 's/^refs\/tags\///p'); \
fi
ARTIFACT_PATHNAME="bender-$PKG_VERSION-universal-apple-darwin.tar.gz"
ARTIFACT_NAME=$(basename $ARTIFACT_PATHNAME)
echo "ARTIFACT_NAME=${ARTIFACT_NAME}" >> $GITHUB_ENV
echo "ARTIFACT_PATHNAME=${ARTIFACT_PATHNAME}" >> $GITHUB_ENV
- name: Create Package
run: |
gtar -czf $ARTIFACT_PATHNAME -C "./target/universal2-apple-darwin/release" --owner=0 --group=0 bender
- name: Upload Release Asset
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ github.event.release.tag_name }}
files: bender-*.tar.gz
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
release-windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
- name: Build
run: cargo build --release
- name: Get Artifact Name
shell: bash
run: |
if [[ "$GITHUB_REF" =~ ^refs/tags/v.*$ ]]; then \
PKG_VERSION=$(echo $GITHUB_REF | sed -n 's/^refs\/tags\/v//p'); \
else \
PKG_VERSION=$(echo $GITHUB_REF | sed -n 's/^refs\/tags\///p'); \
fi
ARTIFACT_PATHNAME="bender-$PKG_VERSION-x86_64-pc-windows-msvc.tar.gz"
ARTIFACT_NAME=$(basename $ARTIFACT_PATHNAME)
echo "ARTIFACT_NAME=${ARTIFACT_NAME}" >> $GITHUB_ENV
echo "ARTIFACT_PATHNAME=${ARTIFACT_PATHNAME}" >> $GITHUB_ENV
- name: Create Package
run: |
cp target/release/bender.exe .
& 'C:\Program Files\Git\usr\bin\tar.exe' czf $Env:ARTIFACT_PATHNAME --owner=0 --group=0 bender.exe
- name: Upload Release Asset
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ github.event.release.tag_name }}
files: bender-*.tar.gz
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}