Skip to content

chore: allow git lfs to get examples data for smoke tests #5

chore: allow git lfs to get examples data for smoke tests

chore: allow git lfs to get examples data for smoke tests #5

Workflow file for this run

# Build CLI binaries and publish them to GitHub Releases.
name: cli
on:
push:
branches: [ 'rust-ci' ]
pull_request:
repository_dispatch:
types: build
workflow_dispatch:
workflow_call:
concurrency:
group: cli-${{ github.workflow }}-${{ github.ref_type }}-${{ github.event.pull_request.number || github.ref || github.run_id }}
cancel-in-progress: true
defaults:
run:
shell: bash -euxo pipefail {0}
env:
GITHUB_REPOSITORY_URL: ${{ github.server_url }}/${{ github.repository }}
VERBOSE: 1
jobs:
builder-docker-image:
name: "Run 'builder-docker-image.yml' workflow"
uses: ./.github/workflows/builder-docker-image.yml
secrets: inherit
concurrency:
group: cli-builder-docker-image-workflow_call-${{ github.workflow }}-${{ github.ref_type }}-${{ github.event.pull_request.number || github.ref || github.run_id }}
cancel-in-progress: true
build-cli:
name: "Build CLI (${{ matrix.arch }})"
needs: [ builder-docker-image ]
runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix:
arch:
- aarch64-apple-darwin
- aarch64-unknown-linux-gnu
- aarch64-unknown-linux-musl
- x86_64-apple-darwin
- x86_64-pc-windows-gnu
- x86_64-unknown-linux-gnu
- x86_64-unknown-linux-musl
steps:
- name: "Set up Docker Buildx"
uses: docker/setup-buildx-action@v3
- name: "Checkout code"
uses: actions/checkout@v4
with:
fetch-depth: 1
submodules: true
- name: "Get docker build checksum"
id: docker-build-checksum
run: echo "checksum=$(./scripts/docker_build_checksum.sh)" >> $GITHUB_OUTPUT
- name: "Setup cache for Docker buildx (${{ matrix.arch }})"
uses: actions/cache@v4
with:
path: .cache/docker/buildx
key: neherlab-pangraph-cli-cache-v1-buildx-${{ runner.os }}-${{ matrix.arch }}-${{ steps.docker-build-checksum.outputs.checksum }}
restore-keys: |
neherlab-pangraph-cli-cache-v1-buildx-${{ runner.os }}-${{ matrix.arch }}-${{ steps.docker-build-checksum.outputs.checksum }}
neherlab-pangraph-cli-cache-v1-buildx-${{ runner.os }}-${{ matrix.arch }}-
neherlab-pangraph-cli-cache-v1-buildx-${{ runner.os }}-${{ steps.docker-build-checksum.outputs.checksum }}
neherlab-pangraph-cli-cache-v1-buildx-${{ runner.os }}-
- name: "Setup cache for Rust and Cargo"
uses: actions/cache@v4
with:
path: |
.cache/docker/.cargo
.build/
key: neherlab-pangraph-cli-cache-v1-cargo-${{ runner.os }}-${{ matrix.arch }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
neherlab-pangraph-cli-cache-v1-cargo-${{ runner.os }}-${{ matrix.arch }}-${{ hashFiles('**/Cargo.lock') }}
neherlab-pangraph-cli-cache-v1-cargo-${{ runner.os }}-${{ matrix.arch }}-
neherlab-pangraph-cli-cache-v1-cargo-${{ runner.os }}-
- name: "Install deps"
run: |
mkdir -p "${HOME}/bin"
curl -fsSL "https://github.com/TomWright/dasel/releases/download/v1.24.3/dasel_linux_amd64" -o "${HOME}/bin/dasel" && chmod +x "${HOME}/bin/dasel"
- name: "Prepare .env file"
run: |
cp .env.example .env
sed -i -e "s|OSXCROSS_URL=http://example.com/osxcross/osxcross.tar.xz|OSXCROSS_URL=${{ secrets.OSXCROSS_URL }}|g" .env
- name: "Login to Docker Hub"
uses: docker/login-action@v3
with:
registry: docker.io
username: ${{ secrets.NEHERLAB_BOT_DOCKERHUB_USERNAME }}
password: ${{ secrets.NEHERLAB_BOT_DOCKERHUB_TOKEN }}
- name: "Build docker image (${{ matrix.arch }})"
run: |
CROSS="${{ matrix.arch }}" ./docker/dev docker-image-build-push
- name: "Build CLI (${{ matrix.arch }})"
run: |
CROSS="${{ matrix.arch }}" ./docker/dev build-release
- name: "Upload build artifacts (${{ matrix.arch }})"
uses: actions/upload-artifact@v4
with:
name: out-${{ matrix.arch }}
path: ./.out/*
include-hidden-files: true
run-unit-tests:
name: "Run unit tests"
needs: [ builder-docker-image ]
runs-on: ubuntu-22.04
steps:
- name: "Set up Docker Buildx"
uses: docker/setup-buildx-action@v3
- name: "Checkout code"
uses: actions/checkout@v4
with:
fetch-depth: 1
submodules: true
- name: "Get docker build checksum"
id: docker-build-checksum
run: echo "checksum=$(./scripts/docker_build_checksum.sh)" >> $GITHUB_OUTPUT
- name: "Setup cache for Docker buildx"
uses: actions/cache@v4
with:
path: .cache/docker/buildx
key: neherlab-pangraph-cli-cache-v1-buildx-unit-tests-${{ runner.os }}-${{ steps.docker-build-checksum.outputs.checksum }}
restore-keys: |
neherlab-pangraph-cli-cache-v1-buildx-unit-tests-${{ runner.os }}-${{ steps.docker-build-checksum.outputs.checksum }}
neherlab-pangraph-cli-cache-v1-buildx-unit-tests-${{ runner.os }}-
- name: "Setup cache for Rust and Cargo"
uses: actions/cache@v4
with:
path: |
.cache/docker/.cargo
.build/
key: neherlab-pangraph-cli-cache-v1-cargo-unit-tests-${{ runner.os }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
neherlab-pangraph-cli-cache-v1-cargo-unit-tests-${{ runner.os }}-${{ hashFiles('**/Cargo.lock') }}
neherlab-pangraph-cli-cache-v1-cargo-unit-tests-${{ runner.os }}-
- name: "Prepare .env file"
run: |
cp .env.example .env
sed -i -e "s|OSXCROSS_URL=http://example.com/osxcross/osxcross.tar.xz|OSXCROSS_URL=${{ secrets.OSXCROSS_URL }}|g" .env
- name: "Run unit tests"
run: |
./docker/dev test
run-lints:
name: "Run lints"
needs: [ builder-docker-image ]
runs-on: ubuntu-22.04
steps:
- name: "Set up Docker Buildx"
uses: docker/setup-buildx-action@v3
- name: "Checkout code"
uses: actions/checkout@v4
with:
fetch-depth: 1
submodules: true
- name: "Get docker build checksum"
id: docker-build-checksum
run: echo "checksum=$(./scripts/docker_build_checksum.sh)" >> $GITHUB_OUTPUT
- name: "Setup cache for Docker buildx"
uses: actions/cache@v4
with:
path: .cache/docker/buildx
key: neherlab-pangraph-cli-cache-v1-buildx-lints-${{ runner.os }}-${{ steps.docker-build-checksum.outputs.checksum }}
restore-keys: |
neherlab-pangraph-cli-cache-v1-buildx-lints-${{ runner.os }}-${{ steps.docker-build-checksum.outputs.checksum }}
neherlab-pangraph-cli-cache-v1-buildx-lints-${{ runner.os }}-
- name: "Setup cache for Rust and Cargo"
uses: actions/cache@v4
with:
path: |
.cache/docker/.cargo
.build/
key: neherlab-pangraph-cli-cache-v1-cargo-lints-${{ runner.os }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
neherlab-pangraph-cli-cache-v1-cargo-lints-${{ runner.os }}-${{ hashFiles('**/Cargo.lock') }}
neherlab-pangraph-cli-cache-v1-cargo-lints-${{ runner.os }}-
- name: "Prepare .env file"
run: |
cp .env.example .env
sed -i -e "s|OSXCROSS_URL=http://example.com/osxcross/osxcross.tar.xz|OSXCROSS_URL=${{ secrets.OSXCROSS_URL }}|g" .env
- name: "Run lints"
run: |
./docker/dev lint-ci
run-smoke-tests:
name: "Run smoke tests (linux)"
needs: [ build-cli ]
runs-on: ubuntu-22.04
steps:
- name: "Set up Docker Buildx"
uses: docker/setup-buildx-action@v3
- name: "Checkout code"
uses: actions/checkout@v4
with:
fetch-depth: 1
submodules: true
- name: "Install dependencies"
run: |
mkdir -p "${HOME}/bin"
export PATH="${HOME}/bin:${PATH}"
curl -fsSL "https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64" -o ${HOME}/bin/jq && chmod +x ${HOME}/bin/jq
- name: "Download build artifacts"
uses: actions/download-artifact@v4
with:
pattern: out-*
merge-multiple: true
path: ".out"
- name: "Run smoke tests (linux)"
run: |
chmod +x ./.out/*
JOBS=2 ./tests/run-smoke-tests ./.out/pangraph-x86_64-unknown-linux-gnu
run-linux-distros-test:
name: "Run Linux distros compatibility test"
needs: [ build-cli ]
runs-on: ubuntu-22.04
steps:
- name: "Set up Docker Buildx"
uses: docker/setup-buildx-action@v3
- name: "Checkout code"
uses: actions/checkout@v4
with:
fetch-depth: 1
submodules: true
- name: "Download build artifacts"
uses: actions/download-artifact@v4
with:
pattern: out-*
merge-multiple: true
path: ".out"
- name: "Test Linux distros compatibility"
run: |
chmod +x ./.out/pangraph-x86_64-unknown-linux-gnu
./tests/test-linux-distros ./.out/pangraph-x86_64-unknown-linux-gnu
check-cli-docs:
name: "Check that autogenerated CLI documentation is up-to-date"
needs: [ build-cli ]
runs-on: ubuntu-22.04
steps:
- name: "Checkout code"
uses: actions/checkout@v4
with:
fetch-depth: 1
submodules: true
- name: "Download build artifacts"
uses: actions/download-artifact@v4
with:
pattern: out-*
merge-multiple: true
path: ".out"
# - name: "Re-generate CLI docs"
# run: |
# chmod +x ./.out/pangraph-x86_64-unknown-linux-gnu
# ./scripts/update_cli_reference_docs ./.out/pangraph-x86_64-unknown-linux-gnu
#
# - name: "Check that the git diff is clean"
# run: |
# git -c color.ui=always diff --exit-code 'docs/user/pangraph-cli/reference.md' || (echo "Autogenerated CLI documentation is not up-to-date, please run './scripts/update_cli_reference_docs <path_to_pangraph>', then verify and commit the changes." >&2; exit 1)
publish-to-github-releases:
name: "Publish to GitHub Releases"
needs: [ build-cli, run-unit-tests, run-lints, run-smoke-tests, run-linux-distros-test, check-cli-docs ]
if: endsWith(github.ref, '/release-cli')
runs-on: ubuntu-22.04
steps:
- name: "Checkout code"
uses: actions/checkout@v4
with:
fetch-depth: 1
submodules: true
lfs: true
- name: "Download build artifacts"
uses: actions/download-artifact@v4
with:
pattern: out-*
merge-multiple: true
path: ".out"
- name: "Install deploy dependencies"
run: |
mkdir -p "${HOME}/bin"
curl -fsSL "https://github.com/cli/cli/releases/download/v2.10.1/gh_2.10.1_linux_amd64.tar.gz" | tar xz -C "${HOME}/bin" --strip-components=2 gh_2.10.1_linux_amd64/bin/gh
curl -fsSL "https://github.com/TomWright/dasel/releases/download/v1.24.3/dasel_linux_amd64" -o "${HOME}/bin/dasel" && chmod +x "${HOME}/bin/dasel"
curl -fsSL "https://github.com/orhun/git-cliff/releases/download/v0.7.0/git-cliff-0.7.0-x86_64-unknown-linux-gnu.tar.gz" | tar -C "${HOME}/bin" --strip-components=1 -xz "git-cliff-0.7.0/git-cliff"
curl -fsSL "https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64" -o ${HOME}/bin/jq && chmod +x ${HOME}/bin/jq
- name: "Publish build artifacts to GitHub releases"
run: |
export PATH="${PATH}:${HOME}/bin"
export GITHUB_TOKEN="${{ secrets.NEHERLAB_BOT_GITHUB_TOKEN }}"
./scripts/publish_github \
--artifacts_dir ".out" \
--repo "${{ github.repository }}" \
--git_sha "${{ github.sha }}"
publish-to-docker-hub:
name: "Publish to Docker Hub"
needs: [ build-cli, run-unit-tests, run-lints, run-smoke-tests, run-linux-distros-test, check-cli-docs ]
if: endsWith(github.ref, '/release-cli')
runs-on: ubuntu-22.04
steps:
- name: "Checkout code"
uses: actions/checkout@v4
with:
fetch-depth: 1
submodules: true
- name: "Download build artifacts"
uses: actions/download-artifact@v4
with:
pattern: out-*
merge-multiple: true
path: ".out"
- name: "Install deploy dependencies"
run: |
mkdir -p "${HOME}/bin"
curl -fsSL "https://github.com/TomWright/dasel/releases/download/v1.24.3/dasel_linux_amd64" -o "${HOME}/bin/dasel" && chmod +x "${HOME}/bin/dasel"
- name: "Login to Docker Hub"
uses: docker/login-action@v3
with:
registry: docker.io
username: ${{ secrets.NEHERLAB_BOT_DOCKERHUB_USERNAME }}
password: ${{ secrets.NEHERLAB_BOT_DOCKERHUB_TOKEN }}
- name: "Build and publish Docker container images to Docker Hub"
run: |
export PATH="${PATH}:${HOME}/bin"
chmod +x ./.out/*
./scripts/publish_docker --push