Skip to content

Continuous Integration and Deployment #104

Continuous Integration and Deployment

Continuous Integration and Deployment #104

Workflow file for this run

name: Continuous Integration and Deployment
on:
workflow_dispatch:
push:
branches: [main]
pull_request:
branches: [main]
env:
CARGO_TERM_COLOR: always
CARGO_INCREMENTAL: 0
CARGO_PROFILE_TEST_DEBUG: 0
jobs:
changes:
name: Identify changes
runs-on: ubuntu-22.04
permissions:
pull-requests: read
steps:
- uses: actions/checkout@v4
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
lx:
- Cargo.toml
- Cargo.lock
- lx/src/**
- lx/crates/**
cfg: [render.yaml, _scripts/**, .github/workflows/**]
outputs:
lx: ${{ steps.filter.outputs.lx }}
cfg: ${{ steps.filter.outputs.cfg }}
check:
name: Lint and Test
needs: [changes]
if: ${{ needs.changes.outputs.lx == 'true' || needs.changes.outputs.cfg == 'true' || github.event_name == 'workflow_dispatch' }}
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: actions-rust-lang/setup-rust-toolchain@v1
- uses: taiki-e/install-action@nextest
- run: cargo fmt --all --quiet -- --check
- run: cargo check --locked
- run: cargo clippy --locked -- --no-deps
- run: cargo nextest run --locked --no-fail-fast
release:
name: Create and upload release
needs: [check]
if: ${{
(github.event.push.commits.author.username == 'chriskrycho' && github.ref_name == 'main')
|| github.event_name == 'workflow_dispatch'
}}
permissions:
contents: write
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: actions-rust-lang/setup-rust-toolchain@v1
- name: Create release build
run: cargo build --locked --release
- name: Show release build info
run: ls -l target/release/lx
- name: Rename and move release binary
run: mv target/release/lx lx-linux
- name: Generate Release Name
id: release_name
run: |
SHA=$(git rev-parse --short HEAD)
echo "release_name=lx-${SHA}" >> "$GITHUB_OUTPUT"
- uses: softprops/action-gh-release@v2
with:
files: lx-linux
fail_on_unmatched_files: true
name: ${{ steps.release_name.outputs.release_name }}
tag_name: ${{ steps.release_name.outputs.release_name }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
build-check:
name: Check build results
needs: [check, release]
runs-on: ubuntu-22.04
steps:
- name: Check results
id: check
run: |
check_result="${{ needs.check.result }}"
release_result="${{ needs.release.result }}"
all_skipped=$([[ $check_result == "skipped" ]] && echo true || echo false)
all_success=$([[ $check_result == "success" && $release_result == "success" ]] && echo true || echo false)
if [[ $all_skipped == "true" ]]; then
STATE=not-needed
elif [[ $all_success == "true" ]]; then
STATE=succeeded
else
STATE=failed
fi
echo "state: $STATE"
echo "state=$STATE" >> "$GITHUB_OUTPUT"
outputs:
state: ${{ steps.check.outputs.state }}