Update CI

This commit is contained in:
Ultradesu
2025-04-08 18:38:56 +01:00
parent 86d49f1e73
commit 1257eed28b

View File

@ -1,117 +1,140 @@
name: Rust static build and publish name: Rust static build and publish
on: on:
push: push:
tags: tags:
- '*' - 'v*.*.*'
env: env:
CARGO_TERM_COLOR: always CARGO_TERM_COLOR: always
BUILD_TARGET: x86_64-unknown-linux-musl
BINARY_NAME: rexec BINARY_NAME: rexec
jobs: jobs:
build: build:
name: Build static binary 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: permissions:
contents: write contents: write
steps: 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: dtolnay/rust-toolchain@stable
- uses: mbrobbel/rustfmt-check@master - uses: mbrobbel/rustfmt-check@master
with: with:
token: ${{ secrets.GITHUB_TOKEN }} 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 uses: gmiam/rust-musl-action@master
with: 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 - name: Get version
run: echo "VERSION=$(grep -P '^version = \"\d+\.\d+\.\d+\"' Cargo.toml | awk -F '\"' '{print $2}')" >> $GITHUB_ENV run: echo "VERSION=$(grep -P '^version = \"\d+\.\d+\.\d+\"' Cargo.toml | awk -F '\"' '{print $2}')" >> $GITHUB_ENV
- name: Show version - name: Show version
run: echo ${{ env.VERSION }} run: echo ${{ env.VERSION }}
- uses: actions/upload-artifact@v3.1.2 - uses: ncipollo/release-action@v1
name: Upload artifact id: create_release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with: with:
name: ${{ env.BINARY_NAME }}_${{ env.VERSION }}_${{ env.BUILD_TARGET }} allowUpdates: true
path: target/${{ env.BUILD_TARGET }}/release/${{ env.BINARY_NAME }} body: "Релиз rexec версии ${{ env.VERSION }}. Статические сборки для Linux (x86_64), Windows (x86_64) и MacOS (arm64)."
build_arch:
name: Arch Linux package upload:
runs-on: ubuntu-latest name: Upload Release Assets
needs: ["build"] needs: release
container: runs-on: ${{ matrix.os }}
image: archlinux:base-devel strategy:
options: --user 1001 matrix:
permissions: os: [ubuntu-latest, windows-latest, macos-latest]
contents: write include:
- os: ubuntu-latest
platform_name: linux-amd64
- os: windows-latest
platform_name: windows-amd64
- os: macos-latest
platform_name: macos-arm64
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Get version
run: echo "VERSION=$(grep -P '^version = \"\d+\.\d+\.\d+\"' Cargo.toml | awk -F '\"' '{print $2}')" >> $GITHUB_ENV - uses: actions/download-artifact@v4
- uses: actions/download-artifact@master name: Download ${{ matrix.platform_name }} artifact
name: Download
id: download_binary
with: with:
name: ${{ env.BINARY_NAME }}_${{ env.VERSION }}_${{ env.BUILD_TARGET }} name: ${{ env.BINARY_NAME }}_${{ matrix.platform_name }}
path: ${{ env.BINARY_NAME }}_${{ env.VERSION }}_${{ env.BUILD_TARGET }} path: ${{ env.BINARY_NAME }}_${{ matrix.platform_name }}
- name: Prepare build env
run: | - name: Upload Release Asset
mkdir -p target/${{ env.BUILD_TARGET }}/release/ uses: actions/upload-release-asset@v1
mv ${{ env.BINARY_NAME }}_${{ env.VERSION }}_${{ env.BUILD_TARGET }}/rexec target/${{ env.BUILD_TARGET }}/release/ env:
sed -i -e "s/some_ver/${{ env.VERSION }}/" PKGBUILD GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Build ZST package
run: |
makepkg -f
- uses: actions/upload-artifact@v3.1.2
name: Upload artifact
with: with:
name: ${{ env.BINARY_NAME }}_${{ env.VERSION }}_${{ env.BUILD_TARGET }}.zst upload_url: ${{ needs.release.outputs.upload_url }}
path: ${{ github.workspace }}/*zst 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
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":{}}'