Skip to content

fix: add exe metada - WIP #3423

fix: add exe metada - WIP

fix: add exe metada - WIP #3423

name: Checks and tests
on:
pull_request:
merge_group:
push:
branches:
- main
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
codespell:
name: codespell
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Codespell test
uses: codespell-project/actions-codespell@94259cd8be02ad2903ba34a22d9c13de21a74461 # 94259cd8be02ad2903ba34a22d9c13de21a74461
cargo-fmt:
name: cargo fmt
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- uses: ./.github/actions/install-rust-toolchain
with:
components: rustfmt
- name: Check code formatting
run: cargo fmt --check
cargo-clippy:
name: cargo clippy
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
permissions:
contents: read
checks: write
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- uses: ./.github/actions/install-rust-toolchain
with:
components: clippy
- uses: ./.github/actions/rust-cache
with:
identifier: 'clippy'
restore-strategy: ${{ github.ref == 'refs/heads/main' && 'exact' || 'nearest' }}
save-cache: true
- name: cargo clippy with compiler warnings
run: cargo clippy --workspace --all-targets -- -D warnings -D clippy::all
cargo-doc:
name: cargo doc
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- uses: ./.github/actions/install-rust-toolchain
- name: Create documentation
run: cargo doc --no-deps --package newrelic_agent_control
env:
RUSTDOCFLAGS: --cfg docsrs
third-party-notices-check:
name: ⚖️ Check third party licenses
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- uses: ./.github/actions/install-rust-toolchain
- name: Fetch dependencies
run: cargo fetch
- uses: newrelic/rust-licenses-noticer@9da6eb161e6fa15cf315a3012096447513015224 # v1
with:
template-file: THIRD_PARTY_NOTICES.md.tmpl
unused-dependencies-check:
name: cargo shear (unused dependencies)
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- uses: taiki-e/install-action@288875dd3d64326724fa6d9593062d9f8ba0b131 # v2.67.30
with:
tool: cargo-shear@1.7.2
- run: cargo shear
coverage:
name: ubuntu / stable / coverage
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- uses: ./.github/actions/install-rust-toolchain
with:
components: llvm-tools-preview
- name: cargo install cargo-llvm-cov
uses: taiki-e/install-action@71765c00dd3e08a5484a5b9e82a4c88b86520e0e # 71765c00dd3e08a5484a5b9e82a4c88b86520e0e
# uses: taiki-e/install-action@cargo-llvm-cov
- name: cargo generate-lockfile
if: hashFiles('Cargo.lock') == ''
run: cargo generate-lockfile
- uses: ./.github/actions/rust-cache
with:
identifier: 'coverage'
restore-strategy: ${{ github.ref == 'refs/heads/main' && 'exact' || 'nearest' }}
save-cache: true
- name: Generate coverage report
run: COVERAGE_OUT_FORMAT=json COVERAGE_OUT_FILEPATH=jcov.info make coverage
- name: Calculate and print total coverage
run: |
echo "Total functions coverage: $(jq '.data[].totals.functions.percent' jcov.info)"
echo "Total lines coverage: $(jq '.data[].totals.lines.percent' jcov.info)"
echo "Total regions coverage: $(jq '.data[].totals.regions.percent' jcov.info)"
echo "Total instantiations coverage: $(jq '.data[].totals.instantiations.percent' jcov.info)"
- name: Fail if function coverage is below 75%
run: |
fn_cov=$(jq '.data[].totals.functions.percent' jcov.info)
expected=75
if (( $(echo "$fn_cov < $expected" | bc -l) )); then
echo "Function coverage is below ${expected}%"
exit 1
fi
- name: Fail if line coverage is below 80%
run: |
ln_cov=$(jq '.data[].totals.lines.percent' jcov.info)
expected=80
if (( $(echo "$ln_cov < $expected" | bc -l) )); then
echo "Line coverage is below ${expected}%"
exit 1
fi
security:
uses: ./.github/workflows/component_security.yml
generate-release-build:
name: "Build release binaries"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- uses: ./.github/actions/install-rust-toolchain
with:
targets: >-
x86_64-unknown-linux-musl
- name: cargo generate-lockfile
if: hashFiles('Cargo.lock') == ''
run: cargo generate-lockfile
- uses: ./.github/actions/rust-cache
# We have faced issues 'hashFiles('**/Cargo.lock') failed.' in this job. As we couldn't pinpoint
# the exact cause, we are adding continue-on-error to avoid blocking merges.
continue-on-error: true
with:
identifier: 'release'
restore-strategy: ${{ github.ref == 'refs/heads/main' && 'exact' || 'nearest' }}
save-cache: true
- name: Install Zig
uses: mlugg/setup-zig@d1434d08867e3ee9daa34448df10607b98908d29 # v2
- uses: taiki-e/install-action@288875dd3d64326724fa6d9593062d9f8ba0b131 # v2.67.30
with:
tool: cargo-zigbuild@0.20.1
- name: Build k8s in release mode
run: cargo zigbuild --release --package newrelic_agent_control --bin newrelic-agent-control-k8s --target x86_64-unknown-linux-musl
- name: Build onhost in release mode
run: cargo zigbuild --release --package newrelic_agent_control --bin newrelic-agent-control --target x86_64-unknown-linux-musl
unit-docs-onhost-integration-tests:
name: Unit, docs and onhost integration tests
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- if: ${{ matrix.os == 'ubuntu-latest' }}
uses: ./.github/actions/install-rust-toolchain
with:
targets: >-
aarch64-unknown-linux-musl,
x86_64-unknown-linux-musl
- if: ${{ matrix.os == 'windows-latest' }}
uses: ./.github/actions/install-rust-toolchain
- name: cargo generate-lockfile
if: hashFiles('Cargo.lock') == ''
run: cargo generate-lockfile
- uses: ./.github/actions/rust-cache
with:
identifier: 'test-dev'
restore-strategy: 'nearest'
save-cache: false
- name: Run workspace tests excluding the agent control pkg (includes -winAdmin- ignored because it doesn't apply)
run: cargo test --workspace --exclude 'newrelic_agent_control' --all-targets -- --include-ignored
- name: Run tests agent control lib excluding root-required tests (on-host)
run: make -C agent-control test/onhost
- name: Run tests agent control integration_test excluding root-required tests (on-host)
run: make -C agent-control test/onhost/integration
- name: Run tests agent control (k8s)
run: make -C agent-control test/k8s
- name: Run documentation tests
run: cargo test --locked --doc
# Test using root can be troublesome to perform as usually the Rust toolchain is installed local to the user.
# To test for root privileges, we can run from a container (disabling the test that fail if running non-root).
on-host-root-tests:
name: tests as root
# Container operations must run on a linux runner https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idcontainer.
# We use `null` to disable the use of a container on windows.
container: ${{ matrix.os == 'ubuntu-latest' && 'rust:latest' || null }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- uses: ./.github/actions/install-rust-toolchain
- uses: ./.github/actions/rust-cache
with:
identifier: 'test-dev'
restore-strategy: 'nearest'
save-cache: false
- name: Run onHost root-required integration-tests only
run: make -C agent-control test/onhost/root/integration
on-host-oci-registry-tests:
name: tests with oci registry
# Container operations must run on a linux runner https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idcontainer.
# We use `null` to disable the use of a container on windows.
container: ${{ matrix.os == 'ubuntu-latest' && 'rust:latest' || null }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- uses: ./.github/actions/install-rust-toolchain
- uses: ./.github/actions/rust-cache
with:
identifier: 'test-dev'
restore-strategy: 'nearest'
save-cache: false
- name: Run onHost root-required integration-tests only
shell: bash
run: make -C agent-control test/onhost/oci-registry/integration
- name: Show zot logs
run: cat ~/.zot/zot.log
embedded-downloader-tests:
name: Unit test for embedded downloader
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Install Go
uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6
with:
go-version-file: "build/embedded/go.mod"
- name: run tests for embedded downloader
run: make -C build/embedded test
k8s-integration-tests:
name: K8s integration tests
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
group: [ part1, part2, flux-self-update ]
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Free up space
run: bash .github/workflows/scripts/space_cleanup.sh
- name: Setup Minikube
uses: manusa/actions-setup-minikube@8234275e0386fe1cdaf519d28c90f4f03fad89e4 # v2.15.0
with:
minikube version: v1.35.0
kubernetes version: "v1.30.14"
driver: docker
github token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Tilt
run: |
curl -fsSL https://raw.githubusercontent.com/tilt-dev/tilt/master/scripts/install.sh | bash
- uses: ./.github/actions/install-rust-toolchain
with:
targets: >-
x86_64-unknown-linux-musl
- uses: ./.github/actions/rust-cache
# We have faced issues 'hashFiles('**/Cargo.lock') failed.' in this job. As we couldn't pinpoint
# the exact cause, we are adding continue-on-error to avoid blocking merges.
continue-on-error: true
with:
identifier: 'test-dev'
restore-strategy: ${{ github.ref == 'refs/heads/main' && 'exact' || 'nearest' }}
save-cache: true
- name: Install Zig
uses: mlugg/setup-zig@d1434d08867e3ee9daa34448df10607b98908d29 # v2
- uses: taiki-e/install-action@288875dd3d64326724fa6d9593062d9f8ba0b131 # v2.67.30
with:
tool: cargo-zigbuild@0.20.1
- name: Run k8s integration tests
env:
# Tilt configs
ARCH: amd64
run: make -C agent-control test/k8s/integration-${{ matrix.group }}
k8s-e2e-tests:
uses: ./.github/workflows/component_k8s_e2e.yml
with:
scenarios: '["infra"]'
secrets:
E2E_ACCOUNT_ID: ${{ secrets.AC_PROD_E2E_ACCOUNT_ID }}
E2E_API_KEY: ${{ secrets.AC_PROD_E2E_API_KEY }}
E2E_LICENSE_KEY: ${{ secrets.AC_PROD_E2E_LICENSE_KEY }}
check-all-green:
name: 🟢 All required checks and tests pass
if: always()
needs:
# checks
- cargo-clippy
- cargo-fmt
- cargo-doc
- third-party-notices-check
- unused-dependencies-check
- codespell
- security
- coverage
# tests
- generate-release-build
- unit-docs-onhost-integration-tests
- on-host-root-tests
- on-host-oci-registry-tests
- embedded-downloader-tests
- k8s-integration-tests
- k8s-e2e-tests
runs-on: Ubuntu-latest
steps:
- name: Decide whether the needed jobs succeeded or failed
uses: re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe # 05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe
with:
# allowed-failures: docs, linters
# allowed-skips: non-voting-flaky-job
jobs: ${{ toJSON(needs) }}