Publish binaries to GitHub release #186
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Publish binaries to GitHub release | |
on: | |
workflow_dispatch: | |
schedule: | |
- cron: '0 2 * * *' # Every day at 2:00am | |
release: | |
types: [published] | |
jobs: | |
check-version: | |
name: Check the version validity | |
runs-on: ubuntu-latest | |
# No need to check the version for dry run (cron) | |
steps: | |
- uses: actions/checkout@v3 | |
# Check if the tag has the v<nmumber>.<number>.<number> format. | |
# If yes, it means we are publishing an official release. | |
# If no, we are releasing a RC, so no need to check the version. | |
- name: Check tag format | |
if: github.event_name == 'release' | |
id: check-tag-format | |
run: | | |
escaped_tag=$(printf "%q" ${{ github.ref_name }}) | |
if [[ $escaped_tag =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then | |
echo "stable=true" >> $GITHUB_OUTPUT | |
else | |
echo "stable=false" >> $GITHUB_OUTPUT | |
fi | |
- name: Check release validity | |
if: github.event_name == 'release' && steps.check-tag-format.outputs.stable == 'true' | |
run: bash .github/scripts/check-release.sh | |
publish-linux: | |
name: Publish binary for Linux | |
runs-on: ubuntu-latest | |
needs: check-version | |
container: | |
# Use ubuntu-20.04 to compile with glibc 2.28 | |
image: ubuntu:20.04 | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Install needed dependencies | |
run: | | |
apt-get update && apt-get install -y curl | |
apt-get install build-essential -y | |
- uses: dtolnay/[email protected] | |
- name: Build | |
run: cargo build --release --locked | |
# No need to upload binaries for dry run (cron) | |
- name: Upload binaries to release | |
if: github.event_name == 'release' | |
uses: svenstaro/[email protected] | |
with: | |
repo_token: ${{ secrets.MEILI_BOT_GH_PAT }} | |
file: target/release/meilisearch | |
asset_name: meilisearch-linux-amd64 | |
tag: ${{ github.ref }} | |
publish-macos-windows: | |
name: Publish binary for ${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
needs: check-version | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [macos-13, windows-2022] | |
include: | |
- os: macos-13 | |
artifact_name: meilisearch | |
asset_name: meilisearch-macos-amd64 | |
- os: windows-2022 | |
artifact_name: meilisearch.exe | |
asset_name: meilisearch-windows-amd64.exe | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dtolnay/[email protected] | |
- name: Build | |
run: cargo build --release --locked | |
# No need to upload binaries for dry run (cron) | |
- name: Upload binaries to release | |
if: github.event_name == 'release' | |
uses: svenstaro/[email protected] | |
with: | |
repo_token: ${{ secrets.MEILI_BOT_GH_PAT }} | |
file: target/release/${{ matrix.artifact_name }} | |
asset_name: ${{ matrix.asset_name }} | |
tag: ${{ github.ref }} | |
publish-macos-apple-silicon: | |
name: Publish binary for macOS silicon | |
runs-on: macos-13 | |
needs: check-version | |
strategy: | |
matrix: | |
include: | |
- target: aarch64-apple-darwin | |
asset_name: meilisearch-macos-apple-silicon | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- name: Installing Rust toolchain | |
uses: dtolnay/[email protected] | |
with: | |
profile: minimal | |
target: ${{ matrix.target }} | |
- name: Cargo build | |
uses: actions-rs/cargo@v1 | |
with: | |
command: build | |
args: --release --target ${{ matrix.target }} | |
- name: Upload the binary to release | |
# No need to upload binaries for dry run (cron) | |
if: github.event_name == 'release' | |
uses: svenstaro/[email protected] | |
with: | |
repo_token: ${{ secrets.MEILI_BOT_GH_PAT }} | |
file: target/${{ matrix.target }}/release/meilisearch | |
asset_name: ${{ matrix.asset_name }} | |
tag: ${{ github.ref }} | |
publish-aarch64: | |
name: Publish binary for aarch64 | |
runs-on: ubuntu-latest | |
needs: check-version | |
env: | |
DEBIAN_FRONTEND: noninteractive | |
container: | |
# Use ubuntu-20.04 to compile with glibc 2.28 | |
image: ubuntu:20.04 | |
strategy: | |
matrix: | |
include: | |
- target: aarch64-unknown-linux-gnu | |
asset_name: meilisearch-linux-aarch64 | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- name: Install needed dependencies | |
run: | | |
apt-get update -y && apt upgrade -y | |
apt-get install -y curl build-essential gcc-aarch64-linux-gnu | |
- name: Set up Docker for cross compilation | |
run: | | |
apt-get install -y curl apt-transport-https ca-certificates software-properties-common | |
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - | |
add-apt-repository "deb [arch=$(dpkg --print-architecture)] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | |
apt-get update -y && apt-get install -y docker-ce | |
- name: Installing Rust toolchain | |
uses: dtolnay/[email protected] | |
with: | |
profile: minimal | |
target: ${{ matrix.target }} | |
- name: Configure target aarch64 GNU | |
## Environment variable is not passed using env: | |
## LD gold won't work with MUSL | |
# env: | |
# JEMALLOC_SYS_WITH_LG_PAGE: 16 | |
# RUSTFLAGS: '-Clink-arg=-fuse-ld=gold' | |
run: | | |
echo '[target.aarch64-unknown-linux-gnu]' >> ~/.cargo/config | |
echo 'linker = "aarch64-linux-gnu-gcc"' >> ~/.cargo/config | |
echo 'JEMALLOC_SYS_WITH_LG_PAGE=16' >> $GITHUB_ENV | |
- name: Install a default toolchain that will be used to build cargo cross | |
run: | | |
rustup default stable | |
- name: Cargo build | |
uses: actions-rs/cargo@v1 | |
with: | |
command: build | |
use-cross: true | |
args: --release --target ${{ matrix.target }} | |
env: | |
CROSS_DOCKER_IN_DOCKER: true | |
- name: List target output files | |
run: ls -lR ./target | |
- name: Upload the binary to release | |
# No need to upload binaries for dry run (cron) | |
if: github.event_name == 'release' | |
uses: svenstaro/[email protected] | |
with: | |
repo_token: ${{ secrets.MEILI_BOT_GH_PAT }} | |
file: target/${{ matrix.target }}/release/meilisearch | |
asset_name: ${{ matrix.asset_name }} | |
tag: ${{ github.ref }} |