diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 28a8634d14f..1ca3d379b5a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,7 +22,7 @@ env: AWS_ROLE_ARN: arn:aws:iam::024848458133:role/github_oidc_FuelLabs_fuel-core AWS_ECR_ORG: fuellabs CARGO_TERM_COLOR: always - RUST_VERSION: 1.79.0 + RUST_VERSION: 1.81.0 RUST_VERSION_FMT: nightly-2023-10-29 RUST_VERSION_COV: nightly-2024-06-05 RUSTFLAGS: -D warnings diff --git a/.github/workflows/dependencies.yml b/.github/workflows/dependencies.yml index d4b40ea3cb7..6fc19569287 100644 --- a/.github/workflows/dependencies.yml +++ b/.github/workflows/dependencies.yml @@ -7,7 +7,7 @@ on: # Run weekly - cron: '0 0 * * Sun' workflow_dispatch: - # Needed so we can run it manually + # Needed so we can run it manually permissions: contents: read defaults: @@ -16,7 +16,7 @@ defaults: env: # So cargo doesn't complain about unstable features RUSTC_BOOTSTRAP: 1 - RUST_VERSION: 1.79.0 + RUST_VERSION: 1.81.0 PR_TITLE: Weekly `cargo update` PR_MESSAGE: | Automation to keep dependencies in `Cargo.lock` current. diff --git a/.github/workflows/docker-images.yml b/.github/workflows/docker-images.yml index 31ceffc464a..77ecc0c8a86 100644 --- a/.github/workflows/docker-images.yml +++ b/.github/workflows/docker-images.yml @@ -4,416 +4,416 @@ on: workflow_dispatch: env: - GIT_BRANCH: ${{ github.head_ref || github.ref_name }} - GIT_REPO_OWNER: ${{ github.repository_owner }} - GIT_REPO: ${{ github.repository }} - GIT_REPO_NAME: ${{ github.event.repository.name }} - AWS_ROLE_ARN: arn:aws:iam::024848458133:role/github_oidc_FuelLabs_fuel-core - AWS_ECR_ORG: fuellabs - CARGO_TERM_COLOR: always - RUST_VERSION: 1.79.0 - RUST_VERSION_FMT: nightly-2023-10-29 - RUST_VERSION_COV: nightly-2024-06-05 - RUSTFLAGS: -D warnings - REGISTRY: ghcr.io - SEGMENT_DOWNLOAD_TIMEOUT_MINS: 2 + GIT_BRANCH: ${{ github.head_ref || github.ref_name }} + GIT_REPO_OWNER: ${{ github.repository_owner }} + GIT_REPO: ${{ github.repository }} + GIT_REPO_NAME: ${{ github.event.repository.name }} + AWS_ROLE_ARN: arn:aws:iam::024848458133:role/github_oidc_FuelLabs_fuel-core + AWS_ECR_ORG: fuellabs + CARGO_TERM_COLOR: always + RUST_VERSION: 1.81.0 + RUST_VERSION_FMT: nightly-2023-10-29 + RUST_VERSION_COV: nightly-2024-06-05 + RUSTFLAGS: -D warnings + REGISTRY: ghcr.io + SEGMENT_DOWNLOAD_TIMEOUT_MINS: 2 jobs: - build-docker-images: - strategy: - matrix: - arch: [ - # build on native runners instead of using emulation - { platform: linux/amd64, runner: buildjet-8vcpu-ubuntu-2204 }, - { platform: linux/arm64, runner: buildjet-16vcpu-ubuntu-2204-arm } - ] - runs-on: ${{ matrix.arch.runner }} - permissions: - contents: read - packages: write - steps: - - name: Setup environment - run: | - echo "REGISTRY_URL=${REGISTRY@L}/${GIT_REPO@L}" >>${GITHUB_ENV} - platform=${{ matrix.arch.platform }} - echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV - - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to the ghcr.io registry - uses: docker/login-action@v3 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Log in to the docker.io registry - uses: docker/login-action@v3 - with: - username: fuellabs - password: ${{ secrets.DOCKER_IO_READ_ONLY_TOKEN }} - - - name: Docker meta - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ env.REGISTRY_URL }} - - - name: Setup Rust build cache - id: cache - uses: buildjet/cache@v3 - with: - path: | - home-cargo-bin - home-cargo-registry-index - home-cargo-registry-cache - home-cargo-git-db - target - key: ${{ env.PLATFORM_PAIR }}-${{ hashFiles('**/Cargo.lock') }} - - - name: Inject cache into docker - uses: reproducible-containers/buildkit-cache-dance@v3.1.2 - with: - cache-map: | - { - "home-cargo-bin": "/usr/local/cargo/bin", - "home-cargo-registry-index": "/usr/local/cargo/registry/index", - "home-cargo-registry-cache": "/usr/local/cargo/registry/cache", - "home-cargo-git-db": "/usr/local/cargo/git/db", - "target": "/build/target" - } - skip-extraction: ${{ steps.cache.outputs.cache-hit }} - - - name: Build Docker image - id: build - uses: docker/build-push-action@v6 - with: - context: . - platforms: ${{ matrix.arch.platform }} - file: deployment/Dockerfile - labels: ${{ steps.meta.outputs.labels }} - cache-from: type=registry,ref=${{ env.REGISTRY_URL }}-build-cache:latest-${{ matrix.arch.runner }} - cache-to: type=registry,ref=${{ env.REGISTRY_URL }}-build-cache:latest-${{ matrix.arch.runner }},mode=max,image-manifest=true,oci-mediatypes=true - outputs: | - type=image,name=${{ env.REGISTRY_URL }},push-by-digest=true,name-canonical=true,push=true - - - name: Export digest - run: | - mkdir -p /tmp/digests - digest="${{ steps.build.outputs.digest }}" - touch "/tmp/digests/${digest#sha256:}" - - - name: Upload digest - uses: actions/upload-artifact@v4 - with: - name: digests-${{ env.PLATFORM_PAIR }} - path: /tmp/digests/* - if-no-files-found: error - retention-days: 1 - - publish-docker-image: - needs: - - build-docker-images - runs-on: ubuntu-latest - permissions: - contents: read - packages: write - id-token: write - steps: - - name: Setup environment - run: | - echo "REGISTRY_URL=${REGISTRY@L}/${GIT_REPO@L}" >>${GITHUB_ENV} - - - name: Download digests - uses: actions/download-artifact@v4 - with: - path: /tmp/digests - pattern: digests-* - merge-multiple: true - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Configure AWS credentials for ECR publishing - uses: aws-actions/configure-aws-credentials@v4 - with: - role-to-assume: ${{ env.AWS_ROLE_ARN }} - aws-region: us-east-1 # ecr public is only in us-east-1 - - - name: Login to Amazon ECR Public - id: login-ecr-public - uses: aws-actions/amazon-ecr-login@v2 - with: - registry-type: public - - - name: Log in to the ghcr.io registry - uses: docker/login-action@v3 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Log in to the docker.io registry - uses: docker/login-action@v3 - with: - username: fuellabs - password: ${{ secrets.DOCKER_IO_READ_ONLY_TOKEN }} - - - name: Docker metadata - id: meta - uses: docker/metadata-action@v5 - with: - images: | - ${{ env.REGISTRY_URL }} - ${{ steps.login-ecr-public.outputs.registry }}/${{ env.AWS_ECR_ORG }}/${{ env.GIT_REPO_NAME }} - tags: | - type=sha - type=ref,event=branch - type=ref,event=tag - type=semver,pattern={{raw}} - type=raw,value=sha-{{sha}}-{{date 'YYYYMMDDhhmmss'}} - type=raw,value=latest,enable={{is_default_branch}} - - - name: Create manifest list and push to all registries - working-directory: /tmp/digests - run: | - docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ - $(printf '${{ env.REGISTRY_URL }}@sha256:%s ' *) - - - name: Inspect image - run: | - docker buildx imagetools inspect ${{ env.REGISTRY_URL }}:${{ steps.meta.outputs.version }} - - # duplicate of publish-docker-image, but with profiling features enabled - # this is split into a separate action since it takes longer to build - publish-docker-image-profiling: - runs-on: buildjet-16vcpu-ubuntu-2204 - permissions: - contents: read - packages: write - id-token: write - steps: - - name: Setup environment - run: | - echo "REGISTRY_URL=${REGISTRY@L}/${GIT_REPO@L}" >>${GITHUB_ENV} - - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Configure AWS credentials for ECR publishing - uses: aws-actions/configure-aws-credentials@v4 - with: - role-to-assume: ${{ env.AWS_ROLE_ARN }} - aws-region: us-east-1 # ecr public is only in us-east-1 - - - name: Login to Amazon ECR Public - id: login-ecr-public - uses: aws-actions/amazon-ecr-login@v2 - with: - registry-type: public - - - name: Log in to the ghcr.io registry - uses: docker/login-action@v1 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Log in to the docker.io registry - uses: docker/login-action@v2 - with: - username: fuellabs - password: ${{ secrets.DOCKER_IO_READ_ONLY_TOKEN }} - - - name: Docker meta - id: meta - uses: docker/metadata-action@v5 - with: - images: | - ${{ env.REGISTRY_URL }}-debug - ${{ steps.login-ecr-public.outputs.registry }}/${{ env.AWS_ECR_ORG }}/${{ env.GIT_REPO_NAME }}-debug - tags: | - type=sha - type=ref,event=branch - type=ref,event=tag - type=semver,pattern={{raw}} - type=raw,value=sha-{{sha}}-{{date 'YYYYMMDDhhmmss'}} - type=raw,value=latest,enable={{is_default_branch}} - - - name: Setup Rust build cache - id: cache - uses: buildjet/cache@v3 - with: - path: | - home-cargo-bin - home-cargo-registry-index - home-cargo-registry-cache - home-cargo-git-db - target - key: publish-docker-image-profiling-${{ hashFiles('**/Cargo.lock') }} - - - name: Inject cache into docker - uses: reproducible-containers/buildkit-cache-dance@v3.1.2 - with: - cache-map: | - { - "home-cargo-bin": "/usr/local/cargo/bin", - "home-cargo-registry-index": "/usr/local/cargo/registry/index", - "home-cargo-registry-cache": "/usr/local/cargo/registry/cache", - "home-cargo-git-db": "/usr/local/cargo/git/db", - "target": "/build/target" - } - skip-extraction: ${{ steps.cache.outputs.cache-hit }} - - - name: Build & push Docker image - id: build - uses: docker/build-push-action@v6 - with: - context: . - file: deployment/Dockerfile - build-args: "DEBUG_SYMBOLS=true" - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - cache-from: type=registry,ref=${{ env.REGISTRY_URL }}-build-cache-debug:latest - cache-to: type=registry,ref=${{ env.REGISTRY_URL }}-build-cache-debug:latest,mode=max,image-manifest=true,oci-mediatypes=true - - - uses: FuelLabs/.github/.github/actions/slack-notify-template@master - if: always() && (github.ref == 'refs/heads/master' || github.ref_type == 'tag') - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - slack_webhook: ${{ secrets.SLACK_WEBHOOK_NOTIFY_BUILD }} + build-docker-images: + strategy: + matrix: + arch: [ + # build on native runners instead of using emulation + { platform: linux/amd64, runner: buildjet-8vcpu-ubuntu-2204 }, + { platform: linux/arm64, runner: buildjet-16vcpu-ubuntu-2204-arm } + ] + runs-on: ${{ matrix.arch.runner }} + permissions: + contents: read + packages: write + steps: + - name: Setup environment + run: | + echo "REGISTRY_URL=${REGISTRY@L}/${GIT_REPO@L}" >>${GITHUB_ENV} + platform=${{ matrix.arch.platform }} + echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV + + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to the ghcr.io registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Log in to the docker.io registry + uses: docker/login-action@v3 + with: + username: fuellabs + password: ${{ secrets.DOCKER_IO_READ_ONLY_TOKEN }} + + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY_URL }} + + - name: Setup Rust build cache + id: cache + uses: buildjet/cache@v3 + with: + path: | + home-cargo-bin + home-cargo-registry-index + home-cargo-registry-cache + home-cargo-git-db + target + key: ${{ env.PLATFORM_PAIR }}-${{ hashFiles('**/Cargo.lock') }} + + - name: Inject cache into docker + uses: reproducible-containers/buildkit-cache-dance@v3.1.2 + with: + cache-map: | + { + "home-cargo-bin": "/usr/local/cargo/bin", + "home-cargo-registry-index": "/usr/local/cargo/registry/index", + "home-cargo-registry-cache": "/usr/local/cargo/registry/cache", + "home-cargo-git-db": "/usr/local/cargo/git/db", + "target": "/build/target" + } + skip-extraction: ${{ steps.cache.outputs.cache-hit }} + + - name: Build Docker image + id: build + uses: docker/build-push-action@v6 + with: + context: . + platforms: ${{ matrix.arch.platform }} + file: deployment/Dockerfile + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=registry,ref=${{ env.REGISTRY_URL }}-build-cache:latest-${{ matrix.arch.runner }} + cache-to: type=registry,ref=${{ env.REGISTRY_URL }}-build-cache:latest-${{ matrix.arch.runner }},mode=max,image-manifest=true,oci-mediatypes=true + outputs: | + type=image,name=${{ env.REGISTRY_URL }},push-by-digest=true,name-canonical=true,push=true + + - name: Export digest + run: | + mkdir -p /tmp/digests + digest="${{ steps.build.outputs.digest }}" + touch "/tmp/digests/${digest#sha256:}" + + - name: Upload digest + uses: actions/upload-artifact@v4 + with: + name: digests-${{ env.PLATFORM_PAIR }} + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 + + publish-docker-image: + needs: + - build-docker-images + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + id-token: write + steps: + - name: Setup environment + run: | + echo "REGISTRY_URL=${REGISTRY@L}/${GIT_REPO@L}" >>${GITHUB_ENV} + + - name: Download digests + uses: actions/download-artifact@v4 + with: + path: /tmp/digests + pattern: digests-* + merge-multiple: true + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Configure AWS credentials for ECR publishing + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ env.AWS_ROLE_ARN }} + aws-region: us-east-1 # ecr public is only in us-east-1 + + - name: Login to Amazon ECR Public + id: login-ecr-public + uses: aws-actions/amazon-ecr-login@v2 + with: + registry-type: public + + - name: Log in to the ghcr.io registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Log in to the docker.io registry + uses: docker/login-action@v3 + with: + username: fuellabs + password: ${{ secrets.DOCKER_IO_READ_ONLY_TOKEN }} + + - name: Docker metadata + id: meta + uses: docker/metadata-action@v5 + with: + images: | + ${{ env.REGISTRY_URL }} + ${{ steps.login-ecr-public.outputs.registry }}/${{ env.AWS_ECR_ORG }}/${{ env.GIT_REPO_NAME }} + tags: | + type=sha + type=ref,event=branch + type=ref,event=tag + type=semver,pattern={{raw}} + type=raw,value=sha-{{sha}}-{{date 'YYYYMMDDhhmmss'}} + type=raw,value=latest,enable={{is_default_branch}} + + - name: Create manifest list and push to all registries + working-directory: /tmp/digests + run: | + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ + $(printf '${{ env.REGISTRY_URL }}@sha256:%s ' *) + + - name: Inspect image + run: | + docker buildx imagetools inspect ${{ env.REGISTRY_URL }}:${{ steps.meta.outputs.version }} + + # duplicate of publish-docker-image, but with profiling features enabled + # this is split into a separate action since it takes longer to build + publish-docker-image-profiling: + runs-on: buildjet-16vcpu-ubuntu-2204 + permissions: + contents: read + packages: write + id-token: write + steps: + - name: Setup environment + run: | + echo "REGISTRY_URL=${REGISTRY@L}/${GIT_REPO@L}" >>${GITHUB_ENV} + + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Configure AWS credentials for ECR publishing + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ env.AWS_ROLE_ARN }} + aws-region: us-east-1 # ecr public is only in us-east-1 + + - name: Login to Amazon ECR Public + id: login-ecr-public + uses: aws-actions/amazon-ecr-login@v2 + with: + registry-type: public + + - name: Log in to the ghcr.io registry + uses: docker/login-action@v1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Log in to the docker.io registry + uses: docker/login-action@v2 + with: + username: fuellabs + password: ${{ secrets.DOCKER_IO_READ_ONLY_TOKEN }} + + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: | + ${{ env.REGISTRY_URL }}-debug + ${{ steps.login-ecr-public.outputs.registry }}/${{ env.AWS_ECR_ORG }}/${{ env.GIT_REPO_NAME }}-debug + tags: | + type=sha + type=ref,event=branch + type=ref,event=tag + type=semver,pattern={{raw}} + type=raw,value=sha-{{sha}}-{{date 'YYYYMMDDhhmmss'}} + type=raw,value=latest,enable={{is_default_branch}} + + - name: Setup Rust build cache + id: cache + uses: buildjet/cache@v3 + with: + path: | + home-cargo-bin + home-cargo-registry-index + home-cargo-registry-cache + home-cargo-git-db + target + key: publish-docker-image-profiling-${{ hashFiles('**/Cargo.lock') }} + + - name: Inject cache into docker + uses: reproducible-containers/buildkit-cache-dance@v3.1.2 + with: + cache-map: | + { + "home-cargo-bin": "/usr/local/cargo/bin", + "home-cargo-registry-index": "/usr/local/cargo/registry/index", + "home-cargo-registry-cache": "/usr/local/cargo/registry/cache", + "home-cargo-git-db": "/usr/local/cargo/git/db", + "target": "/build/target" + } + skip-extraction: ${{ steps.cache.outputs.cache-hit }} + + - name: Build & push Docker image + id: build + uses: docker/build-push-action@v6 + with: + context: . + file: deployment/Dockerfile + build-args: "DEBUG_SYMBOLS=true" + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=registry,ref=${{ env.REGISTRY_URL }}-build-cache-debug:latest + cache-to: type=registry,ref=${{ env.REGISTRY_URL }}-build-cache-debug:latest,mode=max,image-manifest=true,oci-mediatypes=true + + - uses: FuelLabs/.github/.github/actions/slack-notify-template@master + if: always() && (github.ref == 'refs/heads/master' || github.ref_type == 'tag') + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + slack_webhook: ${{ secrets.SLACK_WEBHOOK_NOTIFY_BUILD }} - publish-e2e-client-docker-image: - runs-on: buildjet-4vcpu-ubuntu-2204 - permissions: - contents: read - packages: write - id-token: write - steps: - - name: Setup environment - run: | - echo "REGISTRY_URL=${REGISTRY@L}/${GIT_REPO@L}" >>${GITHUB_ENV} - - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Configure AWS credentials for ECR publishing - uses: aws-actions/configure-aws-credentials@v4 - with: - role-to-assume: ${{ env.AWS_ROLE_ARN }} - aws-region: us-east-1 # ecr public is only in us-east-1 - - - name: Login to Amazon ECR Public - id: login-ecr-public - uses: aws-actions/amazon-ecr-login@v2 - with: - registry-type: public - - - name: Log in to the ghcr.io registry - uses: docker/login-action@v1 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Log in to the docker.io registry - uses: docker/login-action@v2 - with: - username: fuellabs - password: ${{ secrets.DOCKER_IO_READ_ONLY_TOKEN }} - - - name: Docker meta - id: meta - uses: docker/metadata-action@v5 - with: - images: | - ${{ env.REGISTRY_URL }}-e2e-client - ${{ steps.login-ecr-public.outputs.registry }}/${{ env.AWS_ECR_ORG }}/${{ env.GIT_REPO_NAME }}-e2e-client - tags: | - type=sha - type=ref,event=branch - type=ref,event=tag - type=semver,pattern={{raw}} - type=raw,value=sha-{{sha}}-{{date 'YYYYMMDDhhmmss'}} - type=raw,value=latest,enable={{is_default_branch}} - - - name: Setup Rust build cache - id: cache - uses: buildjet/cache@v3 - with: - path: | - home-cargo-bin - home-cargo-registry-index - home-cargo-registry-cache - home-cargo-git-db - target - key: publish-e2e-client-docker-image-${{ hashFiles('**/Cargo.lock') }} - - - name: Inject cache into docker - uses: reproducible-containers/buildkit-cache-dance@v3.1.2 - with: - cache-map: | - { - "home-cargo-bin": "/usr/local/cargo/bin", - "home-cargo-registry-index": "/usr/local/cargo/registry/index", - "home-cargo-registry-cache": "/usr/local/cargo/registry/cache", - "home-cargo-git-db": "/usr/local/cargo/git/db", - "target": "/build/target" - } - skip-extraction: ${{ steps.cache.outputs.cache-hit }} - - - name: Build & push Docker image - id: build - uses: docker/build-push-action@v6 - with: - context: . - file: deployment/e2e-client.Dockerfile - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - cache-from: type=registry,ref=${{ env.REGISTRY_URL }}-build-cache-e2e:latest - cache-to: type=registry,ref=${{ env.REGISTRY_URL }}-build-cache-e2e:latest,mode=max,image-manifest=true,oci-mediatypes=true - - - uses: FuelLabs/.github/.github/actions/slack-notify-template@master - if: always() && (github.ref == 'refs/heads/master' || github.ref_type == 'tag') - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - slack_webhook: ${{ secrets.SLACK_WEBHOOK_NOTIFY_BUILD }} - # Deploy Fuel Core Ephemeral Developer Environment - deploy-eph-env: - if: startsWith(github.head_ref, 'preview/') - needs: - - publish-docker-image - runs-on: buildjet-4vcpu-ubuntu-2204 - steps: - - name: Set Environment Variables - run: | - tag=(`echo $GITHUB_SHA | cut -c1-7`) - echo "IMAGE_TAG=`echo sha-$tag`" >> $GITHUB_ENV - echo "DEPLOYMENT_VERSION=$(echo $GITHUB_SHA)" >> $GITHUB_ENV - echo "NAMESPACE=$(echo ${GITHUB_HEAD_REF} | cut -c 9-)" >> $GITHUB_ENV - - - name: Deploy Fuel Core Ephemeral Developer Environment - uses: benc-uk/workflow-dispatch@v1 - with: - workflow: Deploy Fuel-Core on k8s - repo: FuelLabs/fuel-deployment - ref: refs/heads/master - token: ${{ secrets.REPO_TOKEN }} - inputs: '{ "k8s-type": "${{ env.K8S }}", "config-directory": "${{ env.CONFIG }}", "config-env": "${{ env.ENV }}", "deployment-version": "${{ env.DEPLOYMENT_VERSION }}", "image-tag": "${{ env.IMAGE_TAG }}", "namespace": "${{ env.NAMESPACE }}", "delete-infra": "${{ env.DELETE_INFRA }}" }' - env: - K8S: 'eks' - CONFIG: 'fuel-dev1' - ENV: 'fueldevsway.env' - DELETE_INFRA: true + publish-e2e-client-docker-image: + runs-on: buildjet-4vcpu-ubuntu-2204 + permissions: + contents: read + packages: write + id-token: write + steps: + - name: Setup environment + run: | + echo "REGISTRY_URL=${REGISTRY@L}/${GIT_REPO@L}" >>${GITHUB_ENV} + + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Configure AWS credentials for ECR publishing + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ env.AWS_ROLE_ARN }} + aws-region: us-east-1 # ecr public is only in us-east-1 + + - name: Login to Amazon ECR Public + id: login-ecr-public + uses: aws-actions/amazon-ecr-login@v2 + with: + registry-type: public + + - name: Log in to the ghcr.io registry + uses: docker/login-action@v1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Log in to the docker.io registry + uses: docker/login-action@v2 + with: + username: fuellabs + password: ${{ secrets.DOCKER_IO_READ_ONLY_TOKEN }} + + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: | + ${{ env.REGISTRY_URL }}-e2e-client + ${{ steps.login-ecr-public.outputs.registry }}/${{ env.AWS_ECR_ORG }}/${{ env.GIT_REPO_NAME }}-e2e-client + tags: | + type=sha + type=ref,event=branch + type=ref,event=tag + type=semver,pattern={{raw}} + type=raw,value=sha-{{sha}}-{{date 'YYYYMMDDhhmmss'}} + type=raw,value=latest,enable={{is_default_branch}} + + - name: Setup Rust build cache + id: cache + uses: buildjet/cache@v3 + with: + path: | + home-cargo-bin + home-cargo-registry-index + home-cargo-registry-cache + home-cargo-git-db + target + key: publish-e2e-client-docker-image-${{ hashFiles('**/Cargo.lock') }} + + - name: Inject cache into docker + uses: reproducible-containers/buildkit-cache-dance@v3.1.2 + with: + cache-map: | + { + "home-cargo-bin": "/usr/local/cargo/bin", + "home-cargo-registry-index": "/usr/local/cargo/registry/index", + "home-cargo-registry-cache": "/usr/local/cargo/registry/cache", + "home-cargo-git-db": "/usr/local/cargo/git/db", + "target": "/build/target" + } + skip-extraction: ${{ steps.cache.outputs.cache-hit }} + + - name: Build & push Docker image + id: build + uses: docker/build-push-action@v6 + with: + context: . + file: deployment/e2e-client.Dockerfile + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=registry,ref=${{ env.REGISTRY_URL }}-build-cache-e2e:latest + cache-to: type=registry,ref=${{ env.REGISTRY_URL }}-build-cache-e2e:latest,mode=max,image-manifest=true,oci-mediatypes=true + + - uses: FuelLabs/.github/.github/actions/slack-notify-template@master + if: always() && (github.ref == 'refs/heads/master' || github.ref_type == 'tag') + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + slack_webhook: ${{ secrets.SLACK_WEBHOOK_NOTIFY_BUILD }} + # Deploy Fuel Core Ephemeral Developer Environment + deploy-eph-env: + if: startsWith(github.head_ref, 'preview/') + needs: + - publish-docker-image + runs-on: buildjet-4vcpu-ubuntu-2204 + steps: + - name: Set Environment Variables + run: | + tag=(`echo $GITHUB_SHA | cut -c1-7`) + echo "IMAGE_TAG=`echo sha-$tag`" >> $GITHUB_ENV + echo "DEPLOYMENT_VERSION=$(echo $GITHUB_SHA)" >> $GITHUB_ENV + echo "NAMESPACE=$(echo ${GITHUB_HEAD_REF} | cut -c 9-)" >> $GITHUB_ENV + + - name: Deploy Fuel Core Ephemeral Developer Environment + uses: benc-uk/workflow-dispatch@v1 + with: + workflow: Deploy Fuel-Core on k8s + repo: FuelLabs/fuel-deployment + ref: refs/heads/master + token: ${{ secrets.REPO_TOKEN }} + inputs: '{ "k8s-type": "${{ env.K8S }}", "config-directory": "${{ env.CONFIG }}", "config-env": "${{ env.ENV }}", "deployment-version": "${{ env.DEPLOYMENT_VERSION }}", "image-tag": "${{ env.IMAGE_TAG }}", "namespace": "${{ env.NAMESPACE }}", "delete-infra": "${{ env.DELETE_INFRA }}" }' + env: + K8S: 'eks' + CONFIG: 'fuel-dev1' + ENV: 'fueldevsway.env' + DELETE_INFRA: true diff --git a/.github/workflows/publish-codecov.yml b/.github/workflows/publish-codecov.yml index 42230a15b4d..20f49bca1a2 100644 --- a/.github/workflows/publish-codecov.yml +++ b/.github/workflows/publish-codecov.yml @@ -4,58 +4,58 @@ on: workflow_dispatch: env: - GIT_BRANCH: ${{ github.head_ref || github.ref_name }} - GIT_REPO_OWNER: ${{ github.repository_owner }} - GIT_REPO: ${{ github.repository }} - GIT_REPO_NAME: ${{ github.event.repository.name }} - AWS_ROLE_ARN: arn:aws:iam::024848458133:role/github_oidc_FuelLabs_fuel-core - AWS_ECR_ORG: fuellabs - CARGO_TERM_COLOR: always - RUST_VERSION: 1.79.0 - RUST_VERSION_FMT: nightly-2023-10-29 - RUST_VERSION_COV: nightly-2024-06-05 - RUSTFLAGS: -D warnings - REGISTRY: ghcr.io - SEGMENT_DOWNLOAD_TIMEOUT_MINS: 2 + GIT_BRANCH: ${{ github.head_ref || github.ref_name }} + GIT_REPO_OWNER: ${{ github.repository_owner }} + GIT_REPO: ${{ github.repository }} + GIT_REPO_NAME: ${{ github.event.repository.name }} + AWS_ROLE_ARN: arn:aws:iam::024848458133:role/github_oidc_FuelLabs_fuel-core + AWS_ECR_ORG: fuellabs + CARGO_TERM_COLOR: always + RUST_VERSION: 1.81.0 + RUST_VERSION_FMT: nightly-2023-10-29 + RUST_VERSION_COV: nightly-2024-06-05 + RUSTFLAGS: -D warnings + REGISTRY: ghcr.io + SEGMENT_DOWNLOAD_TIMEOUT_MINS: 2 jobs: - publish-codecov: - name: Publish code coverage report on GitHub pages branch - runs-on: buildjet-4vcpu-ubuntu-2204 - permissions: # Write access to push changes to pages - contents: write - steps: - - uses: actions/checkout@v4 - - name: Install latest Rust - uses: dtolnay/rust-toolchain@master - with: - toolchain: ${{ env.RUST_VERSION_COV }} - targets: wasm32-unknown-unknown - - - name: Install cargo-llvm-codecov - uses: taiki-e/install-action@cargo-llvm-cov - - - name: Code coverage report - run: cargo +${{ env.RUST_VERSION_COV }} llvm-cov --all-features --html --branch - - - name: Checkout the repo again for pushing pages revision - uses: actions/checkout@v4 - with: - ref: 'codecov-pages' - path: 'pages-branch' - - - name: Push codecov report to pages branch - working-directory: ./pages-branch - run: | - export BRANCH_B64=$(echo -n "${{ env.GIT_BRANCH }}" | basenc --base64url) - git config user.email "2204863+Dentosal@users.noreply.github.com" - git config user.name "Dentosal" - cp -r ../target/llvm-cov/html "$BRANCH_B64" - python3 ../.github/workflows/scripts/generate_pages_index.py > index.html - git add . - git commit -m "Update codecov for ${{ env.GIT_BRANCH }}" - git push - export PAGES_URL="https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }}/$BRANCH_B64/index.html" - echo "$PAGES_URL" - echo "Codecov report $PAGES_URL" >> $GITHUB_STEP_SUMMARY + publish-codecov: + name: Publish code coverage report on GitHub pages branch + runs-on: buildjet-4vcpu-ubuntu-2204 + permissions: # Write access to push changes to pages + contents: write + steps: + - uses: actions/checkout@v4 + - name: Install latest Rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: ${{ env.RUST_VERSION_COV }} + targets: wasm32-unknown-unknown + + - name: Install cargo-llvm-codecov + uses: taiki-e/install-action@cargo-llvm-cov + + - name: Code coverage report + run: cargo +${{ env.RUST_VERSION_COV }} llvm-cov --all-features --html --branch + + - name: Checkout the repo again for pushing pages revision + uses: actions/checkout@v4 + with: + ref: 'codecov-pages' + path: 'pages-branch' + + - name: Push codecov report to pages branch + working-directory: ./pages-branch + run: | + export BRANCH_B64=$(echo -n "${{ env.GIT_BRANCH }}" | basenc --base64url) + git config user.email "2204863+Dentosal@users.noreply.github.com" + git config user.name "Dentosal" + cp -r ../target/llvm-cov/html "$BRANCH_B64" + python3 ../.github/workflows/scripts/generate_pages_index.py > index.html + git add . + git commit -m "Update codecov for ${{ env.GIT_BRANCH }}" + git push + export PAGES_URL="https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }}/$BRANCH_B64/index.html" + echo "$PAGES_URL" + echo "Codecov report $PAGES_URL" >> $GITHUB_STEP_SUMMARY \ No newline at end of file diff --git a/ci_checks.sh b/ci_checks.sh index fa5454366dd..50741bdf47e 100755 --- a/ci_checks.sh +++ b/ci_checks.sh @@ -6,7 +6,7 @@ # The script runs almost all CI checks locally. # # Requires installed: -# - Rust `1.79.0` +# - Rust `1.81.0` # - Nightly rust formatter # - `cargo install cargo-sort` # - `cargo install cargo-make` diff --git a/crates/fuel-core/src/state/rocks_db.rs b/crates/fuel-core/src/state/rocks_db.rs index 8434fb09a6b..e69c6289bed 100644 --- a/crates/fuel-core/src/state/rocks_db.rs +++ b/crates/fuel-core/src/state/rocks_db.rs @@ -541,12 +541,10 @@ where iter_mode, ) .map(move |item| { - item.map(|item| { + item.inspect(|item| { self.metrics.read_meter.inc(); column_metrics.map(|metric| metric.inc()); - self.metrics.bytes_read.inc_by(T::size(&item)); - - item + self.metrics.bytes_read.inc_by(T::size(item)); }) .map_err(|e| DatabaseError::Other(e.into()).into()) }) @@ -571,9 +569,8 @@ where self.metrics.read_meter.inc(); column_metrics.map(|metric| metric.inc()); el.map(|value| { - value.map(|vec| { + value.inspect(|vec| { self.metrics.bytes_read.inc_by(vec.len() as u64); - vec }) }) .map_err(|err| DatabaseError::Other(err.into())) diff --git a/crates/services/gas_price_service/src/v1/da_source_service/block_committer_costs.rs b/crates/services/gas_price_service/src/v1/da_source_service/block_committer_costs.rs index 111e911b855..59498849996 100644 --- a/crates/services/gas_price_service/src/v1/da_source_service/block_committer_costs.rs +++ b/crates/services/gas_price_service/src/v1/da_source_service/block_committer_costs.rs @@ -151,7 +151,7 @@ impl BlockCommitterApi for BlockCommitterHttpApi { ) -> DaBlockCostsResult> { let response = self .client - .get(&format!("{}/{}", self.url, number)) + .get(format!("{}/{}", self.url, number)) .send() .await? .json::() @@ -165,7 +165,7 @@ impl BlockCommitterApi for BlockCommitterHttpApi { ) -> DaBlockCostsResult>> { let response = self .client - .get(&format!("{}/{}-{}", self.url, range.start, range.end)) + .get(format!("{}/{}-{}", self.url, range.start, range.end)) .send() .await? .json::>() diff --git a/deployment/Dockerfile b/deployment/Dockerfile index 4a9c7219af3..9065dfc045f 100644 --- a/deployment/Dockerfile +++ b/deployment/Dockerfile @@ -1,6 +1,6 @@ # Stage 1: Build FROM --platform=$BUILDPLATFORM tonistiigi/xx AS xx -FROM --platform=$BUILDPLATFORM rust:1.79.0 AS chef +FROM --platform=$BUILDPLATFORM rust:1.81.0 AS chef ARG TARGETPLATFORM RUN cargo install cargo-chef && rustup target add wasm32-unknown-unknown diff --git a/deployment/e2e-client.Dockerfile b/deployment/e2e-client.Dockerfile index b6b7be89842..01b30fd4dbe 100644 --- a/deployment/e2e-client.Dockerfile +++ b/deployment/e2e-client.Dockerfile @@ -1,5 +1,5 @@ # Stage 1: Build -FROM rust:1.79.0 AS chef +FROM rust:1.81.0 AS chef RUN cargo install cargo-chef && rustup target add wasm32-unknown-unknown WORKDIR /build/ # hadolint ignore=DL3008 diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 2e3facb684d..184dfb58f4e 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,3 +1,3 @@ [toolchain] -channel = "1.79.0" +channel = "1.81.0" targets = ["wasm32-unknown-unknown"] diff --git a/tests/tests/messages.rs b/tests/tests/messages.rs index 26eceac59b9..ef9ca682140 100644 --- a/tests/tests/messages.rs +++ b/tests/tests/messages.rs @@ -41,7 +41,6 @@ use itertools::Itertools; use rstest::rstest; use std::ops::Deref; -#[cfg(feature = "relayer")] mod relayer; fn setup_config(messages: impl IntoIterator) -> Config { diff --git a/tests/tests/node_info.rs b/tests/tests/node_info.rs index 0e3e2339a3d..fb4a2867290 100644 --- a/tests/tests/node_info.rs +++ b/tests/tests/node_info.rs @@ -27,7 +27,6 @@ async fn node_info() { assert_eq!(max_tx, node_config.txpool.pool_limits.max_txs as u64); } -#[cfg(feature = "p2p")] #[tokio::test(flavor = "multi_thread")] async fn test_peer_info() { use fuel_core::p2p_test_helpers::{ diff --git a/tests/tests/poa.rs b/tests/tests/poa.rs index 2de2ee4e82c..d043d9b4ef9 100644 --- a/tests/tests/poa.rs +++ b/tests/tests/poa.rs @@ -156,7 +156,6 @@ async fn starting_node_with_predefined_nodes_produces_these_predefined_blocks( Ok(()) } -#[cfg(feature = "p2p")] #[cfg(not(coverage))] // too slow for coverage mod p2p { use super::*;