ci(release): Preparing v0.0.14 #1628
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: | |
pull_request: | |
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 | |
data-parser | |
fuel-streams | |
core | |
executors | |
macros | |
nats | |
storage | |
consumer | |
publisher | |
webserver | |
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 | |
install-deps: | |
name: Install dependencies | |
needs: | |
- cargo-verifications | |
- publish-crates-check | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Rust | |
uses: ./.github/actions/setup-rust | |
with: | |
toolchain: ${{ env.RUST_NIGHTLY_VERSION }} | |
cache: true | |
- name: Install nextest | |
uses: taiki-e/cache-cargo-install-action@v2 | |
with: | |
tool: cargo-nextest | |
locked: true | |
- name: Install dependencies | |
run: cargo fetch | |
# test-helm: | |
# needs: install-deps | |
# name: Test Helm | |
# runs-on: ubuntu-latest | |
# steps: | |
# - uses: actions/checkout@v4 | |
# - name: Set up Helm | |
# uses: azure/setup-helm@v4 | |
# with: | |
# version: "latest" | |
# - name: Install helm unittest plugin | |
# run: | | |
# helm plugin install https://github.com/helm-unittest/helm-unittest.git | |
# - name: Run Helm unit tests | |
# run: | | |
# make helm-test | |
test: | |
needs: install-deps | |
name: Test ${{ matrix.package }} | |
runs-on: ubuntu-latest | |
env: | |
NATS_URL: nats://127.0.0.1:4222 | |
NATS_PUBLISHER_URL: nats://127.0.0.1:4333 | |
NATS_SYSTEM_USER: sys | |
NATS_SYSTEM_PASSWORD: sys | |
NATS_ADMIN_USER: admin | |
NATS_ADMIN_PASS: admin | |
NATS_PUBLIC_USER: default_user | |
NATS_PUBLIC_PASS: "" | |
AWS_ACCESS_KEY_ID: test | |
AWS_SECRET_ACCESS_KEY: test | |
AWS_REGION: us-east-1 | |
AWS_ENDPOINT_URL: http://localhost:4566 | |
AWS_S3_BUCKET_NAME: fuel-streams-local | |
strategy: | |
fail-fast: false | |
matrix: | |
package: | |
- fuel-data-parser | |
- fuel-streams | |
- fuel-streams-core | |
- fuel-streams-macros | |
- sv-webserver | |
- sv-publisher | |
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/cache-cargo-install-action@v2 | |
with: | |
tool: cargo-nextest | |
locked: true | |
- name: Start Docker | |
run: | | |
make start-docker | |
- name: Run tests | |
run: make test PACKAGE=${{ matrix.package }} PROFILE=ci | |
- name: Stop Docker | |
if: always() | |
run: make stop-docker | |
build: | |
needs: install-deps | |
name: Build ${{ matrix.package }} for ${{ matrix.platform.target }} | |
runs-on: ${{ matrix.platform.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
package: | |
- sv-consumer | |
- sv-publisher | |
- sv-webserver | |
is_release: | |
- ${{ github.ref == 'refs/heads/main' || github.event_name == 'workflow_dispatch' }} | |
platform: | |
# linux x86_64 | |
- os_name: Linux-x86_64-gnu | |
os: ubuntu-latest | |
target: x86_64-unknown-linux-gnu | |
build_on_pr: true | |
- os_name: Linux-x86_64-musl | |
os: ubuntu-latest | |
target: x86_64-unknown-linux-musl | |
build_on_pr: false | |
# linux aarch64 | |
- os_name: Linux-aarch64-gnu | |
os: ubuntu-latest | |
target: aarch64-unknown-linux-gnu | |
build_on_pr: false | |
- os_name: Linux-aarch64-musl | |
os: ubuntu-latest | |
target: aarch64-unknown-linux-musl | |
build_on_pr: false | |
# macOS | |
- os_name: macOS-x86_64 | |
os: macOS-latest | |
target: x86_64-apple-darwin | |
build_on_pr: true | |
- os_name: macOS-aarch64 | |
os: macOS-latest | |
target: aarch64-apple-darwin | |
build_on_pr: false | |
exclude: | |
- is_release: false | |
platform: {build_on_pr: false} | |
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: | |
- test | |
# - test-helm | |
- 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 }} |