diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1403dad..4d106a3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,117 +1,140 @@ name: Rust static build and publish + on: push: tags: - - '*' + - 'v*.*.*' + env: CARGO_TERM_COLOR: always - BUILD_TARGET: x86_64-unknown-linux-musl BINARY_NAME: rexec + jobs: build: name: Build static binary - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + include: + - os: ubuntu-latest + build_target: x86_64-unknown-linux-musl + platform_name: linux-amd64 + - os: windows-latest + build_target: x86_64-pc-windows-msvc + platform_name: windows-amd64 + - os: macos-latest + build_target: aarch64-apple-darwin + platform_name: macos-arm64 permissions: contents: write steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 + + - name: Cache Cargo registry + uses: actions/cache@v4 + with: + path: ~/.cargo/registry + key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-cargo-registry- + + - name: Cache Cargo index + uses: actions/cache@v4 + with: + path: ~/.cargo/git + key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-cargo-index- + + - name: Cache Cargo build + uses: actions/cache@v4 + with: + path: target + key: ${{ runner.os }}-cargo-build-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-cargo-build- + - uses: dtolnay/rust-toolchain@stable + - uses: mbrobbel/rustfmt-check@master with: token: ${{ secrets.GITHUB_TOKEN }} - - name: Build-musl + + - name: Install rust targets + run: rustup target add ${{ matrix.build_target }} + + - name: Build Linux MUSL + if: matrix.os == 'ubuntu-latest' uses: gmiam/rust-musl-action@master with: - args: cargo build --target $BUILD_TARGET --release + args: cargo build --target ${{ matrix.build_target }} --release + + - name: Build MacOS + if: matrix.os == 'macos-latest' + run: cargo build --target ${{ matrix.build_target }} --release + + - name: Build Windows + if: matrix.os == 'windows-latest' + run: cargo build --target ${{ matrix.build_target }} --release + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: ${{ env.BINARY_NAME }}_${{ matrix.platform_name }} + path: target/${{ matrix.build_target }}/release/${{ env.BINARY_NAME }}* + + release: + name: Create Release Page + needs: build + runs-on: ubuntu-latest + outputs: + upload_url: ${{ steps.create_release.outputs.upload_url }} + permissions: + contents: write + steps: + - uses: actions/checkout@v4 - name: Get version run: echo "VERSION=$(grep -P '^version = \"\d+\.\d+\.\d+\"' Cargo.toml | awk -F '\"' '{print $2}')" >> $GITHUB_ENV - name: Show version - run: echo ${{ env.VERSION }} - - uses: actions/upload-artifact@v3.1.2 - name: Upload artifact + run: echo ${{ env.VERSION }} + - uses: ncipollo/release-action@v1 + id: create_release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - name: ${{ env.BINARY_NAME }}_${{ env.VERSION }}_${{ env.BUILD_TARGET }} - path: target/${{ env.BUILD_TARGET }}/release/${{ env.BINARY_NAME }} - build_arch: - name: Arch Linux package - runs-on: ubuntu-latest - needs: ["build"] - container: - image: archlinux:base-devel - options: --user 1001 - permissions: - contents: write + allowUpdates: true + body: "Релиз rexec версии ${{ env.VERSION }}. Статические сборки для Linux (x86_64), Windows (x86_64) и MacOS (arm64)." + + upload: + name: Upload Release Assets + needs: release + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + include: + - os: ubuntu-latest + platform_name: linux-amd64 + - os: windows-latest + platform_name: windows-amd64 + - os: macos-latest + platform_name: macos-arm64 steps: - - uses: actions/checkout@v3 - - name: Get version - run: echo "VERSION=$(grep -P '^version = \"\d+\.\d+\.\d+\"' Cargo.toml | awk -F '\"' '{print $2}')" >> $GITHUB_ENV - - uses: actions/download-artifact@master - name: Download - id: download_binary + - uses: actions/checkout@v4 + + - uses: actions/download-artifact@v4 + name: Download ${{ matrix.platform_name }} artifact with: - name: ${{ env.BINARY_NAME }}_${{ env.VERSION }}_${{ env.BUILD_TARGET }} - path: ${{ env.BINARY_NAME }}_${{ env.VERSION }}_${{ env.BUILD_TARGET }} - - name: Prepare build env - run: | - mkdir -p target/${{ env.BUILD_TARGET }}/release/ - mv ${{ env.BINARY_NAME }}_${{ env.VERSION }}_${{ env.BUILD_TARGET }}/rexec target/${{ env.BUILD_TARGET }}/release/ - sed -i -e "s/some_ver/${{ env.VERSION }}/" PKGBUILD - - name: Build ZST package - run: | - makepkg -f - - uses: actions/upload-artifact@v3.1.2 - name: Upload artifact + name: ${{ env.BINARY_NAME }}_${{ matrix.platform_name }} + path: ${{ env.BINARY_NAME }}_${{ matrix.platform_name }} + + - name: Upload Release Asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - name: ${{ env.BINARY_NAME }}_${{ env.VERSION }}_${{ env.BUILD_TARGET }}.zst - path: ${{ github.workspace }}/*zst - - - release: - name: Making New Release ^_^ - needs: - - build - - build_arch - runs-on: ubuntu-latest - permissions: - contents: write - steps: - - uses: actions/checkout@v3 - - name: Get version - run: echo "VERSION=$(grep -P '^version = \"\d+\.\d+\.\d+\"' Cargo.toml | awk -F '\"' '{print $2}')" >> $GITHUB_ENV - - uses: actions/download-artifact@master - name: Download binary - id: download_binary - with: - name: ${{ env.BINARY_NAME }}_${{ env.VERSION }}_${{ env.BUILD_TARGET }} - path: ${{ env.BINARY_NAME }}_${{ env.VERSION }}_${{ env.BUILD_TARGET }} - - uses: actions/download-artifact@master - id: download_pkg - name: Download ZST package - with: - name: ${{ env.BINARY_NAME }}_${{ env.VERSION }}_${{ env.BUILD_TARGET }}.zst - path: ${{ env.BINARY_NAME }}_${{ env.VERSION }}_${{ env.BUILD_TARGET }}.zst - - uses: ncipollo/release-action@v1 - name: Update release page - with: - artifacts: "${{ steps.download_binary.outputs.download-path }}/*,${{ steps.download_pkg.outputs.download-path }}/*" - allowUpdates: true - body: Static musl build for x86_64-linux and Arch Linux package - - dispatch: - name: Notify my Arch Repo - needs: - - build - - build_arch - - release - runs-on: ubuntu-latest - timeout-minutes: 5 - steps: - - name: Dispatch to workflows - run: | - curl -L \ - -X POST \ - -H "Accept: application/vnd.github+json" \ - -H "Authorization: Bearer ${{ secrets.ACTIONS_KEY }}" \ - -H "X-GitHub-Api-Version: 2022-11-28" \ - https://api.github.com/repos/house-of-vanity/arch_repo/dispatches \ - -d '{"event_type":"new_package","client_payload":{}}' + upload_url: ${{ needs.release.outputs.upload_url }} + asset_path: ${{ env.BINARY_NAME }}_${{ matrix.platform_name }}/${{ env.BINARY_NAME }}${{ matrix.platform_name == 'windows-amd64' && '.exe' || '' }} + asset_name: ${{ env.BINARY_NAME }}_${{ matrix.platform_name }}${{ matrix.platform_name == 'windows-amd64' && '.exe' || '' }} + asset_content_type: application/octet-stream