feat: added correctness test #108
Workflow file for this run
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: Rust Build and Test | |
on: | |
push: | |
branches: [ "main" ] | |
pull_request: | |
branches: [ "main" ] | |
merge_group: | |
branches: [ "main" ] | |
workflow_dispatch: | |
env: | |
CARGO_TERM_COLOR: always | |
SCCACHE_GHA_ENABLED: "true" | |
RUSTC_WRAPPER: "sccache" | |
jobs: | |
check: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dtolnay/rust-toolchain@stable | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
# The prefix cache key, this can be changed to start a new cache manually. | |
# default: "v0-rust" | |
prefix-key: v0 | |
# Cache only the cargo registry | |
cache-targets: false | |
- uses: mozilla-actions/[email protected] | |
- name: Install Protoc | |
run: | | |
PROTOC_VERSION=3.20.1 | |
PROTOC_ARCH=linux-x86_64 | |
PROTOC_ZIP=protoc-$PROTOC_VERSION-$PROTOC_ARCH.zip | |
curl --retry 3 --retry-max-time 90 -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" -OL https://github.com/protocolbuffers/protobuf/releases/download/v$PROTOC_VERSION/$PROTOC_ZIP | |
sudo unzip -o $PROTOC_ZIP -d /usr/local bin/protoc | |
sudo unzip -o $PROTOC_ZIP -d /usr/local 'include/*' | |
rm -f $PROTOC_ZIP | |
echo "PROTOC=/usr/local/bin/protoc" >> $GITHUB_ENV | |
echo "PROTOC_INCLUDE=/usr/local/include" >> $GITHUB_ENV | |
- name: Check fmt | |
run: make check-fmt | |
- name: Check clippy | |
run: make check-clippy | |
- name: Check generated servers | |
run: | | |
make check-api-server | |
make check-kubo-rpc-server | |
test: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dtolnay/rust-toolchain@stable | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
# The prefix cache key, this can be changed to start a new cache manually. | |
# default: "v0-rust" | |
prefix-key: v0 | |
# Cache only the cargo registry | |
cache-targets: false | |
- uses: mozilla-actions/[email protected] | |
- name: Install Protoc | |
run: | | |
PROTOC_VERSION=3.20.1 | |
PROTOC_ARCH=linux-x86_64 | |
PROTOC_ZIP=protoc-$PROTOC_VERSION-$PROTOC_ARCH.zip | |
curl --retry 3 --retry-max-time 90 -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" -OL https://github.com/protocolbuffers/protobuf/releases/download/v$PROTOC_VERSION/$PROTOC_ZIP | |
sudo unzip -o $PROTOC_ZIP -d /usr/local bin/protoc | |
sudo unzip -o $PROTOC_ZIP -d /usr/local 'include/*' | |
rm -f $PROTOC_ZIP | |
echo "PROTOC=/usr/local/bin/protoc" >> $GITHUB_ENV | |
echo "PROTOC_INCLUDE=/usr/local/include" >> $GITHUB_ENV | |
- name: Run tests | |
run: make test | |
build: | |
runs-on: ubuntu-latest | |
outputs: | |
build_tag: ${{ steps.build.outputs.build_tag }} | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dtolnay/rust-toolchain@stable | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
# The prefix cache key, this can be changed to start a new cache manually. | |
# default: "v0-rust" | |
prefix-key: v0 | |
# Cache only the cargo registry | |
cache-targets: false | |
- uses: mozilla-actions/[email protected] | |
- name: Install Protoc | |
run: | | |
PROTOC_VERSION=3.20.1 | |
PROTOC_ARCH=linux-x86_64 | |
PROTOC_ZIP=protoc-$PROTOC_VERSION-$PROTOC_ARCH.zip | |
curl --retry 3 --retry-max-time 90 -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" -OL https://github.com/protocolbuffers/protobuf/releases/download/v$PROTOC_VERSION/$PROTOC_ZIP | |
sudo unzip -o $PROTOC_ZIP -d /usr/local bin/protoc | |
sudo unzip -o $PROTOC_ZIP -d /usr/local 'include/*' | |
rm -f $PROTOC_ZIP | |
echo "PROTOC=/usr/local/bin/protoc" >> $GITHUB_ENV | |
echo "PROTOC_INCLUDE=/usr/local/include" >> $GITHUB_ENV | |
- name: Build | |
run: make build | |
- | |
name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
- | |
name: Login to Public ECR | |
uses: docker/login-action@v2 | |
with: | |
registry: public.ecr.aws | |
username: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
password: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
env: | |
AWS_REGION: us-east-1 | |
- | |
name: Build and Publish Docker Image | |
id: build | |
run: | | |
SHA_TAG=$(echo ${{ github.SHA }} | head -c 12) | |
BUILD_TAG=$SHA_TAG | |
COMMIT_MESSAGE=$(git log -1 --pretty=%B) | |
if [[ $(echo "$COMMIT_MESSAGE" | grep 'chore: version v') ]]; then | |
RELEASE_TAG=$(cargo metadata --format-version=1 --no-deps | jq '.packages[0].version' | tr -d '"') | |
# Use the release tag to deploy, if one is available. | |
BUILD_TAG=$RELEASE_TAG | |
fi | |
if [[ "${{ github.event_name }}" == "pull_request" && "${{ github.base_ref }}" == "main" ]]; then | |
# Use PR commit sha on PRs for main | |
RELEASE_TAG=$(echo ${{ github.event.pull_request.head.sha }} | head -c 12) | |
BUILD_TAG=$RELEASE_TAG | |
fi | |
make SHA="${{ github.SHA }}" SHA_TAG="$SHA_TAG" RELEASE_TAG="$RELEASE_TAG" publish-docker | |
echo "Build tag:" | |
echo ${BUILD_TAG} | |
echo "build_tag=${BUILD_TAG}" >> $GITHUB_OUTPUT | |
correctness-tests: | |
runs-on: ubuntu-latest | |
environment: github-tests-2024 | |
needs: | |
- build | |
steps: | |
- uses: actions/checkout@v3 | |
- | |
name: Setup GKE auth | |
uses: 'google-github-actions/auth@v1' | |
with: | |
credentials_json: ${{ secrets.GKE_SA_KEY }} | |
- | |
name: Get GKE credentials | |
uses: 'google-github-actions/get-gke-credentials@v1' | |
with: | |
cluster_name: ${{ vars.GKE_CLUSTER }} | |
location: ${{ vars.GKE_ZONE }} | |
- | |
name: Get Network template and update | |
env: | |
RUST_CERAMIC_IMAGE_TAG: ${{ needs.build.outputs.build_tag }} | |
RUST_CERAMIC_IMAGE_REPO: public.ecr.aws/r5b3e0r5/3box/ceramic-one | |
run: | | |
set -ex | |
export RUST_CERAMIC_IMAGE=${RUST_CERAMIC_IMAGE_REPO}:${RUST_CERAMIC_IMAGE_TAG} | |
export KERAMIK_NETWORK_NAME=hermetic-rust-ceramic-${RUST_CERAMIC_IMAGE_TAG} | |
echo "KERAMIK_NETWORK_NAME=${KERAMIK_NETWORK_NAME}" >> "$GITHUB_ENV" | |
mkdir ./bin | |
sudo apt-get update && sudo apt-get install -y curl | |
curl -L https://github.com/mikefarah/yq/releases/download/v4.40.5/yq_linux_amd64 -o ./bin/yq | |
chmod +x ./bin/yq | |
curl -L https://github.com/3box/ceramic-tests/releases/download/v0.2.0/hermetic-driver-x86_64-linux -o ./bin/hermetic-driver | |
chmod +x ./bin/hermetic-driver | |
curl -LO https://raw.githubusercontent.com/3box/ceramic-tests/main/networks/basic-rust.yaml | |
./bin/yq -i '.spec.ceramic[0].ipfs.rust.image = strenv(RUST_CERAMIC_IMAGE)' basic-rust.yaml | |
./bin/yq -i '.metadata.name = strenv(KERAMIK_NETWORK_NAME)' basic-rust.yaml | |
./bin/yq --no-colors basic-rust.yaml | |
- | |
name: Run correctness-tests | |
run: | | |
./bin/hermetic-driver test \ | |
--network basic-rust.yaml \ | |
--flavor correctness \ | |
--test-selector "fast" | |
- name: Clean up correctness-test | |
run: | | |
echo "Removing network ${KERAMIK_NETWORK_NAME}" |