Skip to content

ci(release): Preparing v0.0.3 #580

ci(release): Preparing v0.0.3

ci(release): Preparing v0.0.3 #580

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-07-28
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
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@v3
- name: Setup Node && PNPM
uses: ./.github/actions/setup-node
- name: Run Pre Commit
uses: pre-commit/action@v3.0.1
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: Check unused dependencies
run: cargo machete --skip-target-dir
- name: Lint project
run: make lint
test-coverage:
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: secret
steps:
- uses: actions/checkout@v4
- name: Create .env file with NATS environment variables
run: |
echo "NATS_URL=${{ env.NATS_URL }}" > .env
echo "NATS_ADMIN_PASS=${{ env.NATS_ADMIN_PASS }}" >> .env
echo "NATS_PUBLIC_PASS=${{ env.NATS_PUBLIC_PASS }}" >> .env
- name: Install Rust
uses: ./.github/actions/setup-rust
- name: Start Nats
run: |
make start/nats
- name: Run tests
run: make test
- name: Install dependencies
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
run: |
sudo apt-get update
sudo apt-get install -y libclang-dev curl
- name: Install Tarpaulin (Pre-built Binary)
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
uses: taiki-e/cache-cargo-install-action@v2
with:
tool: cargo-tarpaulin@0.31
- name: Generate Code Coverage
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
run: make coverage
- name: Upload to codecov.io
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
uses: codecov/codecov-action@v4
with:
name: codecov-data-systems
fail_ci_if_error: true
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
with:
name: ${{ steps.artifact-name.outputs.value }}
path: ${{ matrix.package }}-*
if-no-files-found: error
release:
name: Create Release with Knope
if: (github.head_ref == 'changeset/release-main' && github.event.pull_request.merged == true) || github.event_name
== 'workflow_dispatch'
needs:
- test-coverage
- build
runs-on: ubuntu-latest
permissions:
contents: read
actions: write
steps:
- name: Checkout Repository
uses: actions/checkout@v4.1.6
- name: Download Artifacts
uses: actions/download-artifact@v4.1.7
with:
path: artifacts
merge-multiple: true
- name: List Artifacts
run: ls -R artifacts
- name: Cache Artifacts
uses: actions/cache@v4
with:
path: artifacts
key: ${{ runner.os }}-artifacts-${{ github.sha }}
restore-keys: |
${{ runner.os }}-artifacts-
- name: Run Knope Action
uses: knope-dev/action@v2.1.0
with:
github-token: ${{ secrets.REPO_TOKEN }}
- name: Knope Release
run: knope release
env:
github-token: ${{ secrets.REPO_TOKEN }}
publish-crates:
name: Publish on Crates.io
needs:
- publish-crates-check
- release
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Restore Artifacts Cache
uses: actions/cache@v4
with:
path: artifacts
key: ${{ runner.os }}-artifacts-${{ github.sha }}
restore-keys: |
${{ runner.os }}-artifacts-
- name: Install Rust Toolchain
uses: dtolnay/rust-toolchain@master
- name: Publish Crate
uses: FuelLabs/publish-crates@v1
with:
publish-delay: 60000
registry-token: ${{ secrets.CARGO_REGISTRY_TOKEN }}