~bigbes/tarantool

tarantool-protobuf

55b5386f999fbd6e3abe6d5a0297dd8ac753b988 — Eugene Blikh 2 months ago 9f60ced
ci: cache Go tarball in Garage S3 (golang/ prefix)

go.dev/dl sometimes times out on the build VM. Cache Go in S3 keyed
by version: s3://docker-cache/golang/go${GO_VERSION}.linux-amd64.tar.gz.

  - Cache HIT: pull from S3 (LAN, fast)
  - Cache MISS: curl from go.dev with --retry 3 --max-time 300, install,
    upload to S3 for next time

Applied to all three manifests. pure-lua.yml and c-enabled.yml now also
require S3 credentials, which slightly couples them to the same fate as
conformance.yml — acceptable tradeoff for the reliability gain since
the same flaky go.dev pull was the root cause.
3 files changed, 114 insertions(+), 6 deletions(-)

M .builds/c-enabled.yml
M .builds/conformance.yml
M .builds/pure-lua.yml
M .builds/c-enabled.yml => .builds/c-enabled.yml +49 -2
@@ 6,6 6,10 @@ packages:
  - protobuf-compiler
  - cmake
  - build-essential
  - unzip
secrets:
  - 7dde4219-0783-4581-a67d-c94749de3600   # ~/.s3-cache-key-id
  - 0e5b3530-6f19-4f30-9b73-9339dd382e46   # ~/.s3-cache-key-secret
sources:
  - https://git.srht.bigb.es/~bigbes/tarantool-protobuf
environment:


@@ 14,6 18,9 @@ environment:
  GO_VERSION: "1.26.3"
  PATH: /home/build/.local/go/bin:/home/build/.local/bin:/home/build/go/bin:/usr/local/bin:/usr/bin:/bin
  PB_ENABLE_C: "1"
  AWS_DEFAULT_REGION: garage
  AWS_ENDPOINT_URL: https://s3.bigb.es
  S3_BUCKET: docker-cache
submitter:
  git.sr.ht:
    enabled: true


@@ 21,10 28,50 @@ submitter:
      - refs/heads/master
      - "refs/tags/*"
tasks:
  - install_awscli: |
      curl -sSL "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" \
        -o /tmp/awscliv2.zip
      unzip -q /tmp/awscliv2.zip -d /tmp
      sudo /tmp/aws/install
      aws --version
  - aws_credentials: |
      mkdir -p ~/.aws
      cat > ~/.aws/config <<EOF
      [default]
      region = $AWS_DEFAULT_REGION
      s3 =
          addressing_style = path
          signature_version = s3v4
      EOF
      echo 'export AWS_REQUEST_CHECKSUM_CALCULATION=when_required'  >> ~/.buildenv
      echo 'export AWS_RESPONSE_CHECKSUM_VALIDATION=when_required' >> ~/.buildenv
      set +x
      export AWS_ACCESS_KEY_ID=$(tr -d '[:space:]' < ~/.s3-cache-key-id)
      export AWS_SECRET_ACCESS_KEY=$(tr -d '[:space:]' < ~/.s3-cache-key-secret)
      {
        printf 'export AWS_ACCESS_KEY_ID=%q\n'     "$AWS_ACCESS_KEY_ID"
        printf 'export AWS_SECRET_ACCESS_KEY=%q\n' "$AWS_SECRET_ACCESS_KEY"
      } >> ~/.buildenv
      set -x
      aws --endpoint-url="$AWS_ENDPOINT_URL" s3 ls "s3://$S3_BUCKET/" >/dev/null
  - install_go: |
      GO_TARBALL="go${GO_VERSION}.linux-amd64.tar.gz"
      GO_KEY="golang/$GO_TARBALL"
      GO_URI="s3://$S3_BUCKET/$GO_KEY"
      mkdir -p ~/.local
      curl -sSL "https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz" \
        | tar -xz -C ~/.local
      if aws --endpoint-url="$AWS_ENDPOINT_URL" s3api head-object \
           --bucket "$S3_BUCKET" --key "$GO_KEY" >/dev/null 2>&1; then
        echo "Cache HIT — pulling Go from S3"
        aws --endpoint-url="$AWS_ENDPOINT_URL" s3 cp "$GO_URI" - \
          | tar -xz -C ~/.local
      else
        echo "Cache MISS — downloading from go.dev and caching"
        curl -sSL --retry 3 --retry-delay 5 --max-time 300 \
          "https://go.dev/dl/$GO_TARBALL" -o "/tmp/$GO_TARBALL"
        tar -xz -C ~/.local -f "/tmp/$GO_TARBALL"
        aws --endpoint-url="$AWS_ENDPOINT_URL" s3 cp "/tmp/$GO_TARBALL" "$GO_URI"
        rm "/tmp/$GO_TARBALL"
      fi
      go version
  - install_tarantool: |
      curl -L https://tarantool.io/release/3/installer.sh | sudo bash

M .builds/conformance.yml => .builds/conformance.yml +16 -2
@@ 69,9 69,23 @@ tasks:
      set -x
      aws --endpoint-url="$AWS_ENDPOINT_URL" s3 ls "s3://$S3_BUCKET/" >/dev/null
  - install_go: |
      GO_TARBALL="go${GO_VERSION}.linux-amd64.tar.gz"
      GO_KEY="golang/$GO_TARBALL"
      GO_URI="s3://$S3_BUCKET/$GO_KEY"
      mkdir -p ~/.local
      curl -sSL "https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz" \
        | tar -xz -C ~/.local
      if aws --endpoint-url="$AWS_ENDPOINT_URL" s3api head-object \
           --bucket "$S3_BUCKET" --key "$GO_KEY" >/dev/null 2>&1; then
        echo "Cache HIT — pulling Go from S3"
        aws --endpoint-url="$AWS_ENDPOINT_URL" s3 cp "$GO_URI" - \
          | tar -xz -C ~/.local
      else
        echo "Cache MISS — downloading from go.dev and caching"
        curl -sSL --retry 3 --retry-delay 5 --max-time 300 \
          "https://go.dev/dl/$GO_TARBALL" -o "/tmp/$GO_TARBALL"
        tar -xz -C ~/.local -f "/tmp/$GO_TARBALL"
        aws --endpoint-url="$AWS_ENDPOINT_URL" s3 cp "/tmp/$GO_TARBALL" "$GO_URI"
        rm "/tmp/$GO_TARBALL"
      fi
      go version
  - install_tarantool: |
      curl -L https://tarantool.io/release/3/installer.sh | sudo bash

M .builds/pure-lua.yml => .builds/pure-lua.yml +49 -2
@@ 6,6 6,10 @@ packages:
  - protobuf-compiler
  - cmake
  - build-essential
  - unzip
secrets:
  - 7dde4219-0783-4581-a67d-c94749de3600   # ~/.s3-cache-key-id
  - 0e5b3530-6f19-4f30-9b73-9339dd382e46   # ~/.s3-cache-key-secret
sources:
  - https://git.srht.bigb.es/~bigbes/tarantool-protobuf
environment:


@@ 13,6 17,9 @@ environment:
  GOROOT: /home/build/.local/go
  GO_VERSION: "1.26.3"
  PATH: /home/build/.local/go/bin:/home/build/.local/bin:/home/build/go/bin:/usr/local/bin:/usr/bin:/bin
  AWS_DEFAULT_REGION: garage
  AWS_ENDPOINT_URL: https://s3.bigb.es
  S3_BUCKET: docker-cache
submitter:
  git.sr.ht:
    enabled: true


@@ 20,10 27,50 @@ submitter:
      - refs/heads/master
      - "refs/tags/*"
tasks:
  - install_awscli: |
      curl -sSL "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" \
        -o /tmp/awscliv2.zip
      unzip -q /tmp/awscliv2.zip -d /tmp
      sudo /tmp/aws/install
      aws --version
  - aws_credentials: |
      mkdir -p ~/.aws
      cat > ~/.aws/config <<EOF
      [default]
      region = $AWS_DEFAULT_REGION
      s3 =
          addressing_style = path
          signature_version = s3v4
      EOF
      echo 'export AWS_REQUEST_CHECKSUM_CALCULATION=when_required'  >> ~/.buildenv
      echo 'export AWS_RESPONSE_CHECKSUM_VALIDATION=when_required' >> ~/.buildenv
      set +x
      export AWS_ACCESS_KEY_ID=$(tr -d '[:space:]' < ~/.s3-cache-key-id)
      export AWS_SECRET_ACCESS_KEY=$(tr -d '[:space:]' < ~/.s3-cache-key-secret)
      {
        printf 'export AWS_ACCESS_KEY_ID=%q\n'     "$AWS_ACCESS_KEY_ID"
        printf 'export AWS_SECRET_ACCESS_KEY=%q\n' "$AWS_SECRET_ACCESS_KEY"
      } >> ~/.buildenv
      set -x
      aws --endpoint-url="$AWS_ENDPOINT_URL" s3 ls "s3://$S3_BUCKET/" >/dev/null
  - install_go: |
      GO_TARBALL="go${GO_VERSION}.linux-amd64.tar.gz"
      GO_KEY="golang/$GO_TARBALL"
      GO_URI="s3://$S3_BUCKET/$GO_KEY"
      mkdir -p ~/.local
      curl -sSL "https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz" \
        | tar -xz -C ~/.local
      if aws --endpoint-url="$AWS_ENDPOINT_URL" s3api head-object \
           --bucket "$S3_BUCKET" --key "$GO_KEY" >/dev/null 2>&1; then
        echo "Cache HIT — pulling Go from S3"
        aws --endpoint-url="$AWS_ENDPOINT_URL" s3 cp "$GO_URI" - \
          | tar -xz -C ~/.local
      else
        echo "Cache MISS — downloading from go.dev and caching"
        curl -sSL --retry 3 --retry-delay 5 --max-time 300 \
          "https://go.dev/dl/$GO_TARBALL" -o "/tmp/$GO_TARBALL"
        tar -xz -C ~/.local -f "/tmp/$GO_TARBALL"
        aws --endpoint-url="$AWS_ENDPOINT_URL" s3 cp "/tmp/$GO_TARBALL" "$GO_URI"
        rm "/tmp/$GO_TARBALL"
      fi
      go version
  - install_tarantool: |
      curl -L https://tarantool.io/release/3/installer.sh | sudo bash