ci(release): Preparing v0.0.12 (#318) #1273
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: 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-11-06 | |
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: secret | |
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 }} |