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.. 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: helix-editor/rust-toolchain@v1 - 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/upload-release-action@2.7.0 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-12, windows-2022] include: - os: macos-12 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: helix-editor/rust-toolchain@v1 - 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/upload-release-action@2.7.0 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-12 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: helix-editor/rust-toolchain@v1 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/upload-release-action@2.7.0 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 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: helix-editor/rust-toolchain@v1 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: 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/upload-release-action@2.7.0 with: repo_token: ${{ secrets.MEILI_BOT_GH_PAT }} file: target/${{ matrix.target }}/release/meilisearch asset_name: ${{ matrix.asset_name }} tag: ${{ github.ref }}