on: workflow_dispatch: schedule: - cron: '0 2 * * *' # Every day at 2:00am release: types: [published] name: Publish binaries to release 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 != 'schedule' id: check-tag-format run: | escaped_tag=$(printf "%q" ${{ github.ref_name }}) if [[ $escaped_tag =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then echo ::set-output name=stable::true else echo ::set-output name=stable::false fi - name: Check release validity if: github.event_name != 'schedule' && steps.check-tag-format.outputs.stable == 'true' run: bash .github/scripts/check-release.sh publish: name: Publish binary for ${{ matrix.os }} runs-on: ${{ matrix.os }} needs: check-version strategy: fail-fast: false matrix: os: [ubuntu-18.04, macos-latest, windows-latest] include: - os: ubuntu-18.04 artifact_name: meilisearch asset_name: meilisearch-linux-amd64 - os: macos-latest artifact_name: meilisearch asset_name: meilisearch-macos-amd64 - os: windows-latest artifact_name: meilisearch.exe asset_name: meilisearch-windows-amd64.exe steps: - uses: hecrj/setup-rust-action@master with: rust-version: stable - uses: actions/checkout@v3 - 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 != 'schedule' uses: svenstaro/upload-release-action@v1-release 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: ${{ matrix.os }} needs: check-version continue-on-error: false strategy: fail-fast: false matrix: include: - os: macos-latest target: aarch64-apple-darwin asset_name: meilisearch-macos-apple-silicon steps: - name: Checkout repository uses: actions/checkout@v3 - name: Installing Rust toolchain uses: actions-rs/toolchain@v1 with: toolchain: stable profile: minimal target: ${{ matrix.target }} override: true - 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 != 'schedule' uses: svenstaro/upload-release-action@v1-release 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: ${{ matrix.os }} needs: check-version continue-on-error: false strategy: fail-fast: false matrix: include: - build: aarch64 os: ubuntu-18.04 target: aarch64-unknown-linux-gnu linker: gcc-aarch64-linux-gnu use-cross: true asset_name: meilisearch-linux-aarch64 steps: - name: Checkout repository uses: actions/checkout@v3 - name: Installing Rust toolchain uses: actions-rs/toolchain@v1 with: toolchain: stable profile: minimal target: ${{ matrix.target }} override: true - name: APT update run: | sudo apt update - name: Install target specific tools if: matrix.use-cross run: | sudo apt-get install -y ${{ matrix.linker }} - name: Configure target aarch64 GNU if: matrix.target == 'aarch64-unknown-linux-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 echo RUSTFLAGS="-Clink-arg=-fuse-ld=gold" >> $GITHUB_ENV - name: Cargo build uses: actions-rs/cargo@v1 with: command: build use-cross: ${{ matrix.use-cross }} args: --release --target ${{ matrix.target }} - 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 != 'schedule' uses: svenstaro/upload-release-action@v1-release with: repo_token: ${{ secrets.MEILI_BOT_GH_PAT }} file: target/${{ matrix.target }}/release/meilisearch asset_name: ${{ matrix.asset_name }} tag: ${{ github.ref }}