Skip to content

ci(repo): Fix test action (#303) #1214

ci(repo): Fix test action (#303)

ci(repo): Fix test action (#303) #1214

Workflow file for this run

name: CI
on:
workflow_dispatch:
pull_request:
types:
- opened
- synchronize
- edited
- reopened
push:
branches:
- main
env:
CARGO_TERM_COLOR: always
CLICOLOR: 1
RUST_NIGHTLY_VERSION: nightly-2024-10-18
CI: true
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
validate-title:
name: Validate PR Title
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
steps:
- uses: amannn/action-semantic-pull-request@v5
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
requireScope: true
subjectPattern: ^([A-Z]).+$
types: |
build
ci
docs
feat
fix
perf
refactor
test
scopes: |
benches
repo
deps
release
core
publisher
data-parser
fuel-streams
macros
lockfile:
name: Validate Lockfile
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: ./.github/actions/setup-rust
- run: cargo update --workspace --locked
pre-commit:
name: Pre-commit
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check workflow files
uses: docker://rhysd/actionlint:latest
env:
SHELLCHECK_OPTS: --exclude=SC2086,SC2129
with:
args: -color
- name: Install Rust
uses: ./.github/actions/setup-rust
with:
toolchain: ${{ env.RUST_NIGHTLY_VERSION }}
- name: Install Python
uses: actions/setup-python@v5
- name: Setup Node && PNPM
uses: ./.github/actions/setup-node
- name: Run Pre Commit
uses: pre-commit/[email protected]
commitlint:
name: Validating commits
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Node && PNPM
uses: ./.github/actions/setup-node
- name: Validate current commit (last commit) with commitlint
if: github.event_name == 'push'
run: pnpm commitlint --last --verbose
- name: Validate PR commits with commitlint
if: github.event_name == 'pull_request'
run: |
pnpm commitlint \
--from ${{ github.event.pull_request.head.sha }}~${{ github.event.pull_request.commits }} \
--to ${{ github.event.pull_request.head.sha }} \
--verbose
publish-crates-check:
name: Publish Check
needs:
- lockfile
- pre-commit
- commitlint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: ./.github/actions/setup-rust
with:
cache: false
- name: Publish crate check
uses: katyo/publish-crates@v2
with:
no-verify: true
dry-run: true
check-repo: false
ignore-unpublished-changes: true
cargo-verifications:
name: Cargo verifications
needs:
- lockfile
- pre-commit
- commitlint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: ./.github/actions/setup-rust
with:
toolchain: ${{ env.RUST_NIGHTLY_VERSION }}
- name: Setup Node && PNPM
uses: ./.github/actions/setup-node
- name: Check for typos
uses: crate-ci/typos@master
with:
config: ./.typos.toml
- uses: taiki-e/install-action@cargo-machete
- name: Lint project
run: make lint
test:
needs:
- cargo-verifications
name: Test
runs-on: ubuntu-latest
env:
NATS_URL: nats://127.0.0.1:4222
NATS_ADMIN_PASS: secret
NATS_PUBLIC_PASS: temp-public-pass
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: ./.github/actions/setup-rust
with:
toolchain: ${{ env.RUST_NIGHTLY_VERSION }}
- name: Install nextest
uses: taiki-e/install-action@nextest
- name: Start Nats
run: |
make start/nats
- name: Run tests
run: make test
- name: Stop Nats
if: always()
run: make stop/nats
# test-coverage:
# # if: github.event_name == 'push' && github.ref == 'refs/heads/main'
# needs:
# - cargo-verifications
# name: Test & Coverage
# runs-on: ubuntu-latest
# env:
# NATS_URL: nats://127.0.0.1:4222
# NATS_ADMIN_PASS: secret
# NATS_PUBLIC_PASS: temp-public-pass
# steps:
# - uses: actions/checkout@v4
#
# - name: Install Rust
# uses: ./.github/actions/setup-rust
# with:
# toolchain: ${{ env.RUST_NIGHTLY_VERSION }}
# target: x86_64-unknown-linux-gnu,wasm32-unknown-unknown
# cache: false
#
# - name: Start Nats
# run: |
# make start/nats
#
# - name: Install dependencies
# run: |
# sudo apt-get update
# sudo apt-get install -y libclang-dev curl
#
# - name: Install Tarpaulin (Pre-built Binary)
# uses: taiki-e/cache-cargo-install-action@v2
# with:
# tool: [email protected]
#
# - name: Generate Code Coverage
# run: make coverage
#
# - name: Upload to codecov.io
# uses: codecov/codecov-action@v4
# if: always()
# with:
# name: codecov-data-systems
# fail_ci_if_error: false
# verbose: true
# files: ./cov-reports/cobertura.xml ./cov-reports/tarpaulin-report.xml
# token: ${{ secrets.CODECOV_TOKEN }}
#
# - name: Stop Nats
# if: always()
# run: make stop/nats
build:
needs:
- cargo-verifications
name: Build ${{ matrix.package }} for ${{ matrix.platform.target }}
runs-on: ${{ matrix.platform.os }}
strategy:
fail-fast: false
matrix:
package:
- fuel-streams-publisher
platform:
# linux x86_64
- os_name: Linux-x86_64-gnu
os: ubuntu-latest
target: x86_64-unknown-linux-gnu
- os_name: Linux-x86_64-musl
os: ubuntu-latest
target: x86_64-unknown-linux-musl
# linux aarch64
- os_name: Linux-aarch64-gnu
os: ubuntu-latest
target: aarch64-unknown-linux-gnu
- os_name: Linux-aarch64-musl
os: ubuntu-latest
target: aarch64-unknown-linux-musl
# macOS
- os_name: macOS-x86_64
os: macOS-latest
target: x86_64-apple-darwin
- os_name: macOS-aarch64
os: macOS-latest
target: aarch64-apple-darwin
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: ./.github/actions/setup-rust
with:
target: ${{ matrix.platform.target }}
cache: false
- name: Install packages (macOS)
if: matrix.platform.os == 'macOS-latest'
run: |
brew install llvm
- name: Install cross
if: matrix.platform.os != 'macOS-latest'
uses: baptiste0928/cargo-install@v3
with:
crate: cross
cache-key: ${{ matrix.platform.target }}
git: https://github.com/cross-rs/cross
- name: Build with cross for Linux
if: matrix.platform.os != 'macOS-latest'
run: |
cross build --release --locked --target ${{ matrix.platform.target }} --package ${{ matrix.package }}
- name: Build with cargo for MacOS
if: matrix.platform.os == 'macOS-latest'
run: |
rustup target add ${{ matrix.platform.target }}
cargo build --release --locked --target ${{ matrix.platform.target }} --package ${{ matrix.package }}
- name: Strip binaries
run: ./scripts/strip-binary.sh "${{ matrix.platform.target }}"
- name: Set Artifact Name
id: artifact-name
shell: bash
run: |
echo "value=${{ matrix.package }}-${{ matrix.platform.os_name }}" >> $GITHUB_OUTPUT
- name: Package as archive
shell: bash
run: |
cd target/${{ matrix.platform.target }}/release
tar czvf ../../../${{ steps.artifact-name.outputs.value }}.tar.gz ${{ matrix.package }}
cd -
- name: Publish release artifacts
uses: actions/upload-artifact@v4
if: >-
(github.event_name == 'push' &&
github.ref == 'refs/heads/main' &&
contains(github.event.head_commit.message, 'ci(release): Preparing')) ||
github.event_name == 'workflow_dispatch'
with:
name: ${{ steps.artifact-name.outputs.value }}
path: ${{ matrix.package }}-*
if-no-files-found: error
retention-days: 30
release:
name: Create Release with Knope
if: >-
(github.event_name == 'push' &&
github.ref == 'refs/heads/main' &&
contains(github.event.head_commit.message, 'ci(release): Preparing')) ||
github.event_name == 'workflow_dispatch'
needs:
- build
runs-on: ubuntu-latest
permissions:
contents: read
actions: write
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Download Artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
merge-multiple: true
- name: List Artifacts
run: ls -R artifacts
- name: Run Knope Action
uses: knope-dev/[email protected]
with:
github-token: ${{ secrets.REPO_TOKEN }}
- name: Knope Release
run: knope release
env:
GITHUB_TOKEN: ${{ secrets.REPO_TOKEN }}