Build macos LAN support #105
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Pull Request | |
on: | |
pull_request: | |
types: | |
- opened | |
- reopened | |
- synchronize | |
- closed | |
push: | |
tags: | |
- '*' | |
jobs: | |
style: | |
name: Style | |
runs-on: ubuntu-latest | |
container: | |
image: ghcr.io/tektronix/tsp-toolkit-build:latest | |
credentials: | |
username: ${{github.actor}} | |
password: ${{secrets.GITHUB_TOKEN}} | |
steps: | |
- name: Tool Versions | |
run: cargo fmt --version | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Check Style | |
run: cargo fmt --check --verbose | |
lint: | |
name: Lint | |
runs-on: ubuntu-latest | |
container: | |
image: ghcr.io/tektronix/tsp-toolkit-build:latest | |
credentials: | |
username: ${{github.actor}} | |
password: ${{secrets.GITHUB_TOKEN}} | |
steps: | |
- name: Tool Versions | |
run: cargo clippy --version | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Lint | |
run: cargo clippy | |
sbom: | |
name: Generate CycloneDX | |
runs-on: ubuntu-latest | |
container: | |
image: ghcr.io/tektronix/tsp-toolkit-build:latest | |
credentials: | |
username: ${{github.actor}} | |
password: ${{secrets.GITHUB_TOKEN}} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Generate Rust BOM | |
run: cargo cyclonedx --format json --all --describe crate -vvv | |
- name: Upload Results | |
uses: actions/upload-artifact@v4 | |
with: | |
name: software-bom | |
path: | | |
**/*.cdx.json | |
test: | |
name: Test | |
runs-on: ubuntu-latest | |
container: | |
image: ghcr.io/tektronix/tsp-toolkit-build:latest | |
credentials: | |
username: ${{github.actor}} | |
password: ${{secrets.GITHUB_TOKEN}} | |
env: | |
CARGO_HOME: ".cargo" | |
RUSTFLAGS: "-Cinstrument-coverage -L ./" | |
TEST_DIR: "test-results" | |
LLVM_PROFILE_FILE: "../test-results/%p-%m.profraw" | |
steps: | |
- name: Tool Versions | |
run: | | |
# TODO reinstate after this issue closes: https://github.com/xd009642/tarpaulin/issues/1493 | |
# cargo install cargo-tarpaulin | |
# cargo tarpaulin --version | |
cargo --version | |
grcov --version | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Get Latest VISA Stub Release | |
uses: robinraju/release-downloader@v1 | |
with: | |
repository: tektronix/libvisa-stub | |
latest: true | |
fileName: '*' | |
- name: List Directory | |
run: ls -Rl * | |
- name: Prebuild | |
run: mkdir -p ${{env.CARGO_HOME}}; cargo build --tests | |
- name: Run Tests | |
run: | | |
mkdir -p "${{env.TEST_DIR}}" | |
# TODO reinstate after this issue closes: https://github.com/xd009642/tarpaulin/issues/1493 | |
# cargo +nightly tarpaulin --verbose --all-features --workspace --timeout 120 --engine llvm --out xml --output-dir ${{env.TEST_DIR}} | |
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$PWD" cargo test --all -- -Z unstable-options --format json --report-time > ${{env.TEST_DIR}}/cargo_test.json | |
# - name: Process Test Results | |
# run: | | |
# cat ${{env.TEST_DIR}}/cargo_test.json | cargo2junit > ${{env.TEST_DIR}}/report.xml | |
# env: | |
# CARGO_HOME: ".cargo" | |
# TEST_DIR: "test-results" | |
- name: Upload Results | |
uses: actions/upload-artifact@v4 | |
if: ${{always()}} | |
with: | |
name: unit-test-report | |
path: | | |
${{env.TEST_DIR}} | |
code_coverage: | |
name: Code Coverage | |
runs-on: ubuntu-latest | |
needs: test | |
steps: | |
- name: Download Test Results | |
uses: actions/download-artifact@v4 | |
with: | |
name: unit-test-report | |
path: test-results | |
- name: Display structure of downloaded files | |
run: ls -R | |
- name: Code Coverage Report | |
uses: irongut/[email protected] | |
continue-on-error: true | |
with: | |
filename: test-results/cobertura.xml | |
badge: true | |
format: markdown | |
hide_branch_rate: true | |
hide_complexity: true | |
indicators: true | |
output: both | |
thresholds: "30 50" | |
- name: Add Coverage PR Comment | |
uses: marocchino/sticky-pull-request-comment@v2 | |
continue-on-error: true | |
if: github.event_name == 'pull_request' | |
with: | |
header: Test Coverage | |
path: code-coverage-results.md | |
build: | |
name: Build | |
strategy: | |
matrix: | |
include: | |
- runner: ubuntu-latest | |
triple: x86_64-unknown-linux-gnu | |
vscode-platform: linux-x64 | |
- runner: windows-latest | |
triple: x86_64-pc-windows-msvc | |
vscode-platform: win32-x64 | |
- runner: macos-latest | |
triple: aarch64-apple-darwin | |
vscode-platform: darwin-arm64 | |
runs-on: ${{matrix.runner}} | |
env: | |
RUSTFLAGS: "-L ${{github.workspace}}" | |
LIB_VISA_PATH: "${{github.workflow}}" | |
steps: | |
- name: Tool Setup | |
run: rustup update nightly && rustup default nightly | |
- name: Ensure Correct Target is Installed | |
run: rustup target add ${{matrix.triple}} | |
- name: Tool Versions | |
run: rustc --version | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Get Latest VISA Stub Release | |
uses: robinraju/release-downloader@v1 | |
with: | |
repository: tektronix/libvisa-stub | |
latest: true | |
fileName: '*' | |
- name: Build LAN-only | |
run: | | |
cargo build --verbose --target "${{matrix.triple}}" --release | |
cargo build --verbose --target "${{matrix.triple}}" --release --tests | |
- name: Build VISA | |
if: ${{ matrix.runner != 'macos-latest' }} | |
run: | | |
cargo build --verbose --target "${{matrix.triple}}" --release --features "visa" | |
cargo build --verbose --target "${{matrix.triple}}" --release --tests --features "visa" | |
- name: Upload Artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: executable | |
path: | | |
target/${{matrix.triple}}/release/kic* | |
!target/${{matrix.triple}}/**/*.d | |
!target/${{matrix.triple}}/**/*.rlib | |
release: | |
name: Release | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
checks: write | |
pull-requests: read | |
needs: | |
- build | |
- lint | |
- style | |
- test | |
- code_coverage | |
- sbom | |
if: ${{ (endsWith(github.base_ref, 'main') && (contains(github.head_ref, 'release/')) || github.event.pull_request.merged ) }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
fetch-tags: true | |
- name: Get RC Version | |
id: lasttag | |
run: | | |
apt-get update && apt-get install -yqq jq | |
COMMIT="${{github.sha}}" | |
if ${{contains(github.head_ref, 'release/')}}; then | |
V="${{github.head_ref}}" | |
V="${V#release/}" | |
else | |
V="$(cargo metadata --format-version=1 --no-deps | jq '.packages[0].version')" | |
V=v${V//\"/} #remove '"'s | |
fi | |
# Check to see if the version tag already exists | |
# If it does, print a message and exit with an error code | |
if [ $(git tag --list "$V") ]; then | |
echo "Version tag already exists. Did you bump the version number?" | |
exit 1 | |
fi | |
# Create an RC release if | |
# 1) This PR is a release branch that hasn't been merged to main. | |
# 2) This is a feature branch being merged into the main branch. | |
if ${{(! github.event.pull_request.merged && contains(github.head_ref, 'release/')) || (github.event.pull_request.merged && !contains(github.head_ref, 'release/'))}}; then | |
V="${V}-$(git tag --list ${V}* | wc -l)" | |
fi | |
CL=${V#v} | |
CL=${CL%-*} | |
echo "version=${V}" >> $GITHUB_OUTPUT | |
echo "cl_version=${CL}" >> $GITHUB_OUTPUT | |
echo "commit=${COMMIT}" >> $GITHUB_OUTPUT | |
- run: 'git tag --list ${V}*' | |
- name: Get SBOM | |
uses: actions/download-artifact@v4 | |
with: | |
name: software-bom | |
path: sbom | |
- name: Get Changelog for this Tag | |
id: changelog | |
uses: coditory/changelog-parser@v1 | |
with: | |
version: ${{steps.lasttag.outputs.cl_version}} | |
- name: Create Release | |
uses: ncipollo/release-action@v1 | |
with: | |
name: ${{steps.lasttag.outputs.version}} | |
artifacts: sbom/**/* | |
body: | | |
## Features Requests / Bugs | |
If you find issues or have a feature request, please enter a [new issue on GitHub](${{github.server_url}}/${{github.repository}}/issues/new). | |
## Installation | |
View the installation instructions in the [README](${{github.server_url}}/${{github.repository}}/blob/main/README.md) | |
## Changelog | |
${{steps.changelog.outputs.description}} | |
prerelease: ${{ (! github.event.pull_request.merged) || (github.event.pull_request.merged && ! contains(github.head_ref, 'release/')) }} | |
commit: ${{steps.lasttag.outputs.commit}} | |
makeLatest: true | |
tag: ${{steps.lasttag.outputs.version}} | |