name: release on: push: tags: - "v*" jobs: create-release: name: create-release runs-on: ubuntu-latest outputs: upload_url: ${{ steps.release.outputs.upload_url }} steps: - name: Create GitHub release id: release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ github.ref }} release_name: ${{ github.ref }} draft: true build-release: name: build-release needs: create-release runs-on: ${{ matrix.os }} strategy: matrix: build: [macos, windows-64bit] toolchain: [stable] include: - build: macos os: macos-latest target: x86_64-apple-darwin - build: windows-64bit os: windows-latest target: x86_64-pc-windows-msvc steps: - name: Checkout repository uses: actions/checkout@v2 - name: Install Rust toolchain uses: actions-rs/toolchain@v1 with: toolchain: ${{ matrix.toolchain }} target: ${{ matrix.target }} profile: minimal override: true - name: Build release binary uses: actions-rs/cargo@v1 with: command: build args: --release --target ${{ matrix.target }} - name: Build archive shell: bash run: | VERSION="${GITHUB_REF#refs/tags/}" if [ "${{ matrix.os }}" = "windows-latest" ]; then ARCHIVE="gleam-$VERSION-${{ matrix.build }}.zip" cp "target/${{ matrix.target }}/release/gleam.exe" "gleam.exe" 7z a "$ARCHIVE" "gleam.exe" echo "ASSET=$ARCHIVE" >> $GITHUB_ENV else ARCHIVE="gleam-$VERSION-${{ matrix.build }}.tar.gz" cp "target/${{ matrix.target }}/release/gleam" "gleam" tar -czvf "$ARCHIVE" "gleam" echo "ASSET=$ARCHIVE" >> $GITHUB_ENV fi - name: Upload release archive uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ needs.create-release.outputs.upload_url }} asset_path: ${{ env.ASSET }} asset_name: ${{ env.ASSET }} asset_content_type: application/gzip build-release-musl: needs: create-release runs-on: ubuntu-latest container: clux/muslrust:stable steps: - name: Checkout repository uses: actions/checkout@v2 - name: Link to predefined musl toolchain run: | ln -s /root/.cargo $HOME/.cargo ln -s /root/.rustup $HOME/.rustup - name: Build release binary run: cargo build --release - name: Build archive shell: bash run: | VERSION="${GITHUB_REF#refs/tags/}" ARCHIVE="gleam-$VERSION-linux-amd64.tar.gz" cp "target/x86_64-unknown-linux-musl/release/gleam" "gleam" tar -czvf "$ARCHIVE" "gleam" echo "ASSET=$ARCHIVE" >> $GITHUB_ENV - name: Upload release archive uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ needs.create-release.outputs.upload_url }} asset_path: ${{ env.ASSET }} asset_name: ${{ env.ASSET }} asset_content_type: application/gzip