Skip to content

fix: do not change directory to repo-root (#349) #737

fix: do not change directory to repo-root (#349)

fix: do not change directory to repo-root (#349) #737

Workflow file for this run

name: Binary builds
on:
push:
branches: [main]
paths:
- cpp-linter/src/**
- cpp-linter/Cargo.toml
- clang-tools-manager/src/**
- clang-tools-manager/Cargo.toml
- Cargo.toml
- Cargo.lock
tags:
- cpp-linter/v*
- clang-tools-manager/v*
pull_request:
branches: [main]
paths:
- cpp-linter/src/**
- cpp-linter/Cargo.toml
- clang-tools-manager/src/**
- clang-tools-manager/Cargo.toml
- Cargo.toml
- Cargo.lock
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
permissions: {}
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
jobs:
seed-build-script:
runs-on: ubuntu-latest
name: Pre-seed static binaries' versions
steps:
- env:
GITHUB_TOKEN: ${{ github.token }}
run: >-
gh release download
-R cpp-linter/clang-tools-static-binaries
--pattern versions.json
--output versions.json
- name: Upload versions.json
uses: actions/upload-artifact@v7
with:
name: static-binary-versions
path: versions.json
if-no-files-found: error
create-assets:
needs: [seed-build-script]
name: ${{ matrix.target }}
strategy:
fail-fast: false
matrix:
include:
- target: aarch64-unknown-linux-gnu
os: ubuntu-latest
cross: true
- target: aarch64-unknown-linux-musl
os: ubuntu-latest
cross: true
- target: x86_64-unknown-linux-gnu
os: ubuntu-latest
cross: false
- target: x86_64-unknown-linux-musl
os: ubuntu-latest
cross: true
- target: arm-unknown-linux-gnueabi
os: ubuntu-latest
cross: true
- target: arm-unknown-linux-gnueabihf
os: ubuntu-latest
cross: true
- target: armv7-unknown-linux-gnueabihf
os: ubuntu-latest
cross: true
- target: powerpc-unknown-linux-gnu
os: ubuntu-latest
cross: true
- target: powerpc64-unknown-linux-gnu
os: ubuntu-latest
cross: true
- target: powerpc64le-unknown-linux-gnu
os: ubuntu-latest
cross: true
- target: s390x-unknown-linux-gnu
os: ubuntu-latest
cross: true
- target: aarch64-apple-darwin
os: macos-latest
cross: false
- target: x86_64-apple-darwin
os: macos-latest
cross: false
- target: x86_64-pc-windows-msvc
os: windows-latest
cross: false
- target: aarch64-pc-windows-msvc
os: windows-latest
cross: false
runs-on: ${{ matrix.os }}
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v6.0.2
with:
persist-credentials: false
- name: Setup Rust
shell: bash
env:
RS_TARGET: ${{ matrix.target }}
run: |-
rustup update stable --no-self-update
rustup target add ${RS_TARGET}
- name: Install cargo-binstall
if: matrix.cross
uses: cargo-bins/cargo-binstall@aaa84a43aec4955a42c5ffc65d258961e39f276e # v1.19.1
env:
GITHUB_TOKEN: ${{ github.token }}
- name: Install cross (cargo cross compiler)
if: matrix.cross
env:
GITHUB_TOKEN: ${{ github.token }}
run: cargo binstall -y cross
- name: Restore build script seed
uses: actions/download-artifact@v8
with:
name: static-binary-versions
path: clang-tools-manager
- name: Build
run: >-
${{ matrix.cross && 'cross' || 'cargo '}}
build
--bin cpp-linter
--bin clang-tools
--release
--target ${{ matrix.target }}
--features bin
- name: Prepare artifacts (unix)
if: runner.os != 'Windows'
shell: bash
run: |-
mkdir dist
cp LICENSE dist/LICENSE
cd dist
tgt="cpp-linter"
mv "../target/${{ matrix.target }}/release/${tgt}" "./${tgt}"
arc_name="${tgt}-${{ matrix.target }}.tar.gz"
tar -a -c -v -z -f "${arc_name}" ${tgt} LICENSE
tgt="clang-tools"
mv "../target/${{ matrix.target }}/release/${tgt}" "./${tgt}"
arc_name="${tgt}-${{ matrix.target }}.tar.gz"
tar -a -c -v -z -f "${arc_name}" ${tgt} LICENSE
- name: Prepare artifacts (windows)
if: runner.os == 'Windows'
shell: pwsh
# `tar.exe` in powershell is different from `tar` in bash.
# need to use `tar.exe` in powershell to create a valid zip file.
run: |-
mkdir dist
Copy-Item ./LICENSE ./dist/LICENSE
cd dist
$tgt = "cpp-linter"
mv "../target/${{ matrix.target }}/release/${tgt}.exe" "./${tgt}.exe"
$arc_name = "${tgt}-${{ matrix.target }}.zip"
tar -a -c -v -f "${arc_name}" "${tgt}.exe" "LICENSE"
$tgt = "clang-tools"
mv "../target/${{ matrix.target }}/release/${tgt}.exe" "./${tgt}.exe"
$arc_name = "${tgt}-${{ matrix.target }}.zip"
tar -a -c -v -f "${arc_name}" "${tgt}.exe" "LICENSE"
- name: Upload cpp-linter artifacts
uses: actions/upload-artifact@v7
with:
name: cpp-linter-${{ matrix.target }}
path: dist/cpp-linter-${{ matrix.target }}*
if-no-files-found: error
- name: Upload clang-tools artifacts
uses: actions/upload-artifact@v7
with:
name: clang-tools-${{ matrix.target }}
path: dist/clang-tools-${{ matrix.target }}*
if-no-files-found: error
publish:
if: startswith(github.ref, 'refs/tags/cpp-linter/v') || startswith(github.ref, 'refs/tags/clang-tools-manager/v')
runs-on: ubuntu-latest
needs: [create-assets]
permissions:
id-token: write
contents: write
steps:
- uses: actions/checkout@v6.0.2
with:
persist-credentials: false
- name: Install Rust
run: rustup update stable --no-self-update
- name: Download built assets
uses: actions/download-artifact@v8
with:
pattern: ${{ startsWith(github.ref_name, 'cpp-linter') && 'cpp-linter' || 'clang-tools' }}-*
path: dist
merge-multiple: true
- name: Create a Github Release
env:
BIN_NAME: ${{ startsWith(github.ref_name, 'cpp-linter') && 'cpp-linter' || 'clang-tools' }}
GH_TOKEN: ${{ github.token }}
GIT_REF: ${{ github.ref_name }}
run: |
files=$(ls dist/${BIN_NAME}*)
gh release upload "${GIT_REF}" ${files}
- name: Establish provenance
id: auth
uses: rust-lang/crates-io-auth-action@bbd81622f20ce9e2dd9622e3218b975523e45bbe # v1.0.4
- name: Publish package
env:
PKG_NAME: ${{ startsWith(github.ref_name, 'cpp-linter') && 'cpp-linter' || 'clang-tools-manager' }}
CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}
run: cargo publish -p ${PKG_NAME}