# Based on https://github.com/starship/starship/blob/master/.github/workflows/deploy.yml name: Deploy on: push: tags: - "*" env: CRATE_NAME: mdbook-mermaid jobs: # Build sources for every OS github_build: name: Build release binaries strategy: fail-fast: false matrix: target: - x86_64-unknown-linux-gnu - x86_64-unknown-linux-musl - x86_64-apple-darwin - aarch64-apple-darwin - x86_64-pc-windows-msvc include: - target: x86_64-unknown-linux-gnu os: ubuntu-20.04 name: x86_64-unknown-linux-gnu.tar.gz - target: x86_64-unknown-linux-musl os: ubuntu-latest name: x86_64-unknown-linux-musl.tar.gz - target: x86_64-apple-darwin os: macOS-latest name: x86_64-apple-darwin.tar.gz - target: aarch64-apple-darwin os: macOS-latest name: aarch64-apple-darwin.tar.gz - target: x86_64-pc-windows-msvc os: windows-latest name: x86_64-pc-windows-msvc.zip runs-on: ${{ matrix.os }} steps: - name: Setup | Checkout uses: actions/checkout@v3 # Cache files between builds - uses: Swatinem/rust-cache@v1 - name: Setup | Rust uses: actions-rs/toolchain@v1 with: toolchain: stable override: true profile: minimal target: ${{ matrix.target }} - uses: Swatinem/rust-cache@v1 - name: Setup | musl tools if: matrix.target == 'x86_64-unknown-linux-musl' run: sudo apt install -y musl-tools - name: Build | Build if: matrix.target != 'x86_64-unknown-linux-musl' run: cargo build --release --target ${{ matrix.target }} - name: Build | Build (musl) if: matrix.target == 'x86_64-unknown-linux-musl' run: cargo build --release --target ${{ matrix.target }} - name: Post Setup | Extract tag name shell: bash run: echo "##[set-output name=tag;]$(echo ${GITHUB_REF#refs/tags/})" id: extract_tag - name: Post Setup | Prepare artifacts [Windows] if: matrix.os == 'windows-latest' run: | mkdir target/stage cd target/${{ matrix.target }}/release strip ${{ env.CRATE_NAME }}.exe 7z a ../../stage/${{ env.CRATE_NAME }}-${{ steps.extract_tag.outputs.tag }}-${{ matrix.name }} ${{ env.CRATE_NAME }}.exe cd - - name: Post Setup | Prepare artifacts [-nix] if: matrix.os != 'windows-latest' run: | mkdir target/stage cd target/${{ matrix.target }}/release strip ${{ env.CRATE_NAME }} tar czvf ../../stage/${{ env.CRATE_NAME }}-${{ steps.extract_tag.outputs.tag }}-${{ matrix.name }} ${{ env.CRATE_NAME }} cd - - name: Post Setup | Upload artifacts uses: actions/upload-artifact@v3 with: name: ${{ env.CRATE_NAME }}-${{ steps.extract_tag.outputs.tag }}-${{ matrix.name }} path: target/stage/* # Create GitHub release with Rust build targets and release notes github_release: name: Create GitHub Release needs: github_build runs-on: ubuntu-latest steps: - name: Setup | Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - name: Setup | Artifacts uses: actions/download-artifact@v3 - name: Setup | Release notes run: | git log -1 --pretty='%s' > RELEASE.md - name: Build | Publish uses: softprops/action-gh-release@v1 with: files: ${{ env.CRATE_NAME }}-*/${{ env.CRATE_NAME }}-* body_path: RELEASE.md env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}