name: release on: push: tags: - "[0-9]+.[0-9]+.[0-9]+" permissions: write-all jobs: # Creates a release and outputs the url create-release: name: create-release runs-on: ubuntu-latest outputs: upload_url: ${{ env.RELEASE_UPLOAD_URL }} version: ${{ env.VERSION }} steps: - name: Get the release version from the tag shell: bash if: env.VERSION == '' run: | echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV echo "version is: ${{ env.VERSION }}" - name: Create GitHub release uses: actions/github-script@v6 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: github-token: "${{ secrets.GITHUB_TOKEN }}" script: | try { const response = await github.rest.repos.createRelease({ draft: false, generate_release_notes: true, name: process.env.VERSION, owner: context.repo.owner, prerelease: false, repo: context.repo.repo, tag_name: process.env.VERSION, }); core.exportVariable('RELEASE_ID', response.data.id); core.exportVariable('RELEASE_UPLOAD_URL', response.data.upload_url); } catch (error) { core.setFailed(error.message); } build-and-upload: name: Build and upload needs: create-release runs-on: ${{ matrix.os }} strategy: matrix: build: [linux-gnu, linux-aarch64-gnu] include: - build: linux-gnu os: ubuntu-latest target: x86_64-unknown-linux-gnu use-cross: true - build: linux-aarch64-gnu os: ubuntu-latest target: aarch64-unknown-linux-gnu use-cross: true steps: - name: Checkout uses: actions/checkout@v3 - name: Install Rust uses: actions-rs/toolchain@v1 with: toolchain: stable profile: minimal override: true target: ${{ matrix.target }} - name: Build uses: actions-rs/cargo@v1 with: use-cross: ${{ matrix.use-cross }} command: build args: --verbose --release --target ${{ matrix.target }} - name: Strip release binary (linux and macos) if: matrix.build == 'linux-gnu' || matrix.build == 'linux-musl' || matrix.build == 'macos' || matrix.build == 'linux-aarch64-gnu' run: strip "target/${{ matrix.target }}/release/lyra" - name: Build archive shell: bash run: | dirname="lyra-${{ needs.create-release.outputs.version }}-${{ matrix.target }}" mkdir "$dirname" if [ "${{ matrix.os }}" = "windows-latest" ]; then mv "target/${{ matrix.target }}/release/lyra.exe" "$dirname" else mv "target/${{ matrix.target }}/release/lyra" "$dirname" fi mv LICENSE.md "$dirname" if [ "${{ matrix.os }}" = "windows-latest" ]; then 7z a "$dirname.zip" "$dirname" echo "ASSET=$dirname.zip" >> $GITHUB_ENV else tar -czf "$dirname.tar.gz" "$dirname" echo "ASSET=$dirname.tar.gz" >> $GITHUB_ENV fi - name: Upload archive uses: actions/upload-release-asset@v1.0.1 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/octet-stream