Skip to content

Make Checking Model Support Easier #121

Make Checking Model Support Easier

Make Checking Model Support Easier #121

Workflow file for this run

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}}