diff --git a/.github/workflows/docker_image.yml b/.github/workflows/docker_image.yml index 85fc610f441..9bdafcbb435 100644 --- a/.github/workflows/docker_image.yml +++ b/.github/workflows/docker_image.yml @@ -54,7 +54,7 @@ jobs: -t ${{ env.DOCKER_IMAGE }}:${{ env.BRANCH_NAME }} \ -t ${{ env.DOCKER_IMAGE }}:${{ env.GIT_COMMIT_SHORT }} \ -t ${{ env.DOCKER_IMAGE }}:${{ env.GIT_COMMIT_LONG }} - + docker run --rm linera ./linera --version - name: Push Docker image to Google Artifact Registry run: | docker push ${{ env.DOCKER_IMAGE }}:${{ env.BRANCH_NAME }} diff --git a/.github/workflows/kubernetes.yml b/.github/workflows/kubernetes.yml new file mode 100644 index 00000000000..85861ae2a23 --- /dev/null +++ b/.github/workflows/kubernetes.yml @@ -0,0 +1,96 @@ +name: Kubernetes + +on: + push: + branches: [ main ] + pull_request: + branches: + - "**" + paths: + - '.github/workflows/kubernetes.yml' + - 'toolchains/**' + - 'configuration/**' + - 'docker/**' + - 'kubernetes/**' + - 'linera-service/**' + - 'linera-rpc/**' + workflow_dispatch: + +# This allows a subsequently queued workflow run to interrupt previous runs on pull-requests +concurrency: + group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.run_id }}' + cancel-in-progress: true + +env: + CARGO_TERM_COLOR: always + CARGO_INCREMENTAL: 0 + CARGO_NET_RETRY: 10 + RUST_BACKTRACE: short + RUSTFLAGS: "-D warnings" + RUSTUP_MAX_RETRIES: 10 + LINERA_TRY_RELEASE_BINARIES: "true" + +permissions: + contents: read + +jobs: + kind-deployment-e2e-tests: + runs-on: ubuntu-latest-16-cores + timeout-minutes: 90 + + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - uses: actions-rust-lang/setup-rust-toolchain@v1 + - name: Install Protoc + uses: arduino/setup-protoc@v1 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + - name: Build client binary + run: | + cargo build --release --locked --bin linera --bin linera-proxy --bin linera-server --features scylladb,rocksdb,kubernetes,metrics + strip target/release/linera + strip target/release/linera-proxy + strip target/release/linera-server + - name: Setup helmfile + uses: mamezou-tech/setup-helmfile@v1.3.0 + - name: Run e2e tests + uses: nick-fields/retry@v2 + with: + # Port forwarding sometimes dies, which makes all requests timeout + # Which is why we need retries + max_attempts: 1 + timeout_minutes: 20 + command: | + kind get clusters | xargs -I {} kind delete cluster --name {} + RUST_LOG=linera=info cargo test --locked -p linera-service --features scylladb,kubernetes --test linera_net_tests -- kubernetes --nocapture + - name: Setup upterm session + uses: lhotari/action-upterm@v1 + if: ${{ failure() }} + with: + wait-timeout-minutes: 120 + - name: Port forward Prometheus + run: | + kubectl port-forward prometheus-linera-core-kube-prometheu-prometheus-0 9090 & + - name: Check Proxy metric + # Check one random proxy metric that we expect to be logged after running the e2e tests + run: | + curl -s 'http://127.0.0.1:9090/api/v1/query?query=linera_proxy_request_latency_bucket' | jq -r '.data.result[]' | grep -q . + - name: Check Server metric + # Check one random server metric that we expect to be logged after running the e2e tests + run: | + curl -s 'http://127.0.0.1:9090/api/v1/query?query=linera_server_request_latency_bucket' | jq -r '.data.result[]' | grep -q . + - name: Check Scylla metric + # Check one random server metric that we expect to be logged after running the e2e tests + run: | + curl -s 'http://127.0.0.1:9090/api/v1/query?query=scylla_database_total_reads' | jq -r '.data.result[]' | grep -q . + - name: Check Scylla Manager metric + # Check one random server metric that we expect to be logged after running the e2e tests + run: | + curl -s 'http://127.0.0.1:9090/api/v1/query?query=scylla_manager_agent_rclone_bytes_transferred_total' | jq -r '.data.result[]' | grep -q . + - name: Destroy the kind clusters + if: always() + shell: bash + run: >- + kind get clusters | xargs -I {} kind delete cluster --name {} diff --git a/docker/Dockerfile b/docker/Dockerfile index c46ca94e85e..c72f7a2f72c 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -21,7 +21,7 @@ ARG target=x86_64-unknown-linux-gnu ARG binaries= ARG copy=${binaries:+_copy} -FROM rust:1.74-slim-bookworm AS builder +FROM rust:1.81-slim-bookworm AS builder ARG git_commit ARG target diff --git a/linera-service/src/cli_wrappers/local_kubernetes_net.rs b/linera-service/src/cli_wrappers/local_kubernetes_net.rs index 92c9af39f44..da3c45ec88a 100644 --- a/linera-service/src/cli_wrappers/local_kubernetes_net.rs +++ b/linera-service/src/cli_wrappers/local_kubernetes_net.rs @@ -97,7 +97,7 @@ impl SharedLocalKubernetesNetTestingConfig { testing_prng_seed: Some(37), num_other_initial_chains: 2, initial_amount: Amount::from_tokens(2000), - num_initial_validators: 4, + num_initial_validators: 1, num_shards: 4, binaries, no_build: false,