Skip to content
This repository has been archived by the owner on Jul 23, 2024. It is now read-only.

Bump clickhouse-connect from 0.7.8 to 0.7.12 #4403

Bump clickhouse-connect from 0.7.8 to 0.7.12

Bump clickhouse-connect from 0.7.8 to 0.7.12 #4403

Workflow file for this run

name: Build proxy docker image
on:
workflow_dispatch:
inputs:
full_test_suite:
default: "false"
required: true
description: "Run full test suite"
neon_evm_commit:
required: false
description: "Neon EVM commit"
neon_evm_branch:
required: false
description: "Neon EVM branch"
initial_pr:
required: false
description: "Initial PR"
pull_request:
types: [opened, reopened, synchronize, labeled, unlabeled, ready_for_review]
push:
branches:
- master
- develop
- '[vt][0-9].[0-9]+.[0-9x]+*'
tags:
- "*"
env:
NEON_EVM_TAG: "latest"
FAUCET_TAG: "latest"
AWS_ACCESS_KEY_ID: ${{secrets.AWS_ACCESS_KEY_ID}}
AWS_DEFAULT_REGION: ${{secrets.AWS_DEFAULT_REGION}}
AWS_SECRET_ACCESS_KEY: ${{secrets.AWS_SECRET_ACCESS_KEY}}
DOCKER_USERNAME: ${{secrets.DOCKER_USERNAME}}
DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}}
BUILD_URL: "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
NEON_TEST_IMAGE: ${{vars.DOCKERHUB_ORG_NAME}}/neon_tests
TF_VAR_run_number: ${{ github.run_number }}
TF_VAR_ci_pp_solana_url: ${{secrets.DEVNET_INTERNAL_RPC}}
TF_VAR_proxy_model_commit: ${{github.sha}}
TF_VAR_neon_evm_commit: "latest"
TF_VAR_faucet_model_commit: ${{vars.FAUCET_COMMIT}}
TV_VAR_dockerhub_org_name: ${{vars.DOCKERHUB_ORG_NAME}}
HCLOUD_TOKEN: ${{secrets.HCLOUD_TOKEN}}
DOCKERHUB_ORG_NAME: ${{vars.DOCKERHUB_ORG_NAME}}
FAUCET_COMMIT: ${{vars.FAUCET_COMMIT}}
GH_ORG_NAME: ${{vars.GH_ORG_NAME}}
IMAGE_NAME: ${{vars.IMAGE_NAME}}
NEON_TEST_INVOKE_PROGRAM_IMAGE: ${{vars.NEON_TEST_INVOKE_PROGRAM_IMAGE}}
NEON_TEST_RUN_LINK: ${{vars.NEON_TEST_RUN_LINK}}
NEON_TESTS_ENDPOINT: ${{vars.NEON_TESTS_ENDPOINT}}
TFSTATE_BUCKET: ${{vars.TFSTATE_BUCKET}}
TFSTATE_KEY_PREFIX: ${{vars.TFSTATE_KEY_PREFIX}}
TFSTATE_REGION: ${{vars.TFSTATE_REGION}}
GITHUB_RUN_NUMBER: ${{ github.run_number }}
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}${{ github.event.inputs.neon_evm_commit }}
cancel-in-progress: true
jobs:
build-image:
runs-on: build-runner
outputs:
proxy_tag: ${{ steps.tags.outputs.proxy }}
neon_evm_tag: ${{ steps.tags.outputs.neon_evm }}
is_version_proxy_branch: ${{ steps.is_version_proxy_branch.outputs.value }}
tag_creation_base_branch: ${{ steps.tag_creation.outputs.base_branch }}
full_test_suite: ${{ steps.full_test_suite.outputs.value }}
neon_test_tag: ${{ steps.neon_test_final_tag.outputs.value }}
dapps_list: ${{ steps.dapps_list.outputs.dapps_list }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: output branches name
run: |
echo "neon_evm_branch = ${{ github.event.inputs.neon_evm_branch }}"
echo "proxy_branch = ${{ github.ref }}"
- name: Check if proxy branch is version branch
id: is_version_proxy_branch
run: |
if [[ "${{ github.ref }}" =~ "refs/heads/"[vt][0-9]+\.[0-9]+\.x ]]; then
echo "value=true"
echo "value=true" >> $GITHUB_OUTPUT
else
echo "value=false"
echo "value=false" >> $GITHUB_OUTPUT
fi
- name: Define base branch if the action is tag creation
id: tag_creation
if: startsWith(github.ref , 'refs/tags/')
run: |
base_branch=`echo ${{ github.ref_name }} | sed 's/\.[0-9]*$/\.x/'`
echo "base_branch=$base_branch" >> $GITHUB_OUTPUT
echo "base_branch=$base_branch"
- name: Define images tags
id: tags
run: |
if [[ "${{ github.event.inputs.neon_evm_commit }}" != "" ]]; then
neon_evm_tag=${{ github.event.inputs.neon_evm_commit }}
else
neon_evm_tag="${NEON_EVM_TAG}"
fi;
echo "neon_evm_tag=${neon_evm_tag}"
echo "neon_evm=${neon_evm_tag}" >> $GITHUB_OUTPUT
if [[ "${{ github.event.inputs.neon_evm_commit }}" != "" ]]; then
evm_short_commit=`git rev-parse --short ${{ github.event.inputs.neon_evm_commit }}`
proxy_tag="${{ github.sha }}-${evm_short_commit}"
else
proxy_tag="${{ github.sha }}"
fi;
echo "proxy_tag=${proxy_tag}"
echo "proxy=$proxy_tag" >> $GITHUB_OUTPUT
- name: Define test set
id: full_test_suite
run: |
if [[ "${{ contains(github.event.pull_request.labels.*.name, 'fullTestSuite') }}" == "true" || "${{ github.event.inputs.full_test_suite }}" == "true" ||
("${{ github.ref_name }}" == 'develop' && "${{github.event.inputs.neon_evm_commit }}" == "") ||
("${{ steps.is_version_proxy_branch.outputs.is_version_proxy_branch }}" == 'true' && "${{ github.event.inputs.neon_evm_commit }}" == '') ||
"${{ steps.tag_creation.outputs.base_branch }}" != "" ]]; then
value=true
else
value=false
fi;
echo "value=${value}"
echo "value=${value}" >> $GITHUB_OUTPUT
- name: Define dapps tests list
id: dapps_list
run: |
default="aave,saddle,uniswap-v3"
extended=",uniswap-v2,yearn,compound,robonomics,curve,saddle,pancake"
result=$( (${{ steps.full_test_suite.outputs.value }} && echo "${default}${extended}") || echo "${default}" )
echo "dapps_list=$result" >> $GITHUB_OUTPUT
echo "dapps_list=$result"
- name: Define test image tag
id: neon_test_tag
run: |
if ${{ steps.is_version_proxy_branch.outputs.value }}; then
tag=${GITHUB_REF/refs\/heads\//}
elif [[ "${{ steps.tag_creation.outputs.base_branch }}" != "" ]]; then
tag=${{ steps.tag_creation.outputs.base_branch }}
elif [[ "${{ github.base_ref }}" =~ "refs/heads/"[vt][0-9]+\.[0-9]+\.x ]]; then # pr to version branch
tag=${GITHUB_BASE_REF/refs\/heads\//}
elif [[ "${{ github.head_ref }}" != "" ]]; then # pr to feature branch
tag=${{ github.head_ref }}
elif [[ "{{github.event.inputs.neon_evm_branch}}" != "" && "{{github.event.inputs.neon_evm_branch}}" != "refs/heads/develop" ]]; then # triggered by neon evm workflow
tag=${{ github.event.inputs.neon_evm_branch }}
elif [[ "${{ github.ref }}" =~ "refs/heads".+ ]] ; then # triggered by pr to develop
tag=${GITHUB_REF/refs\/heads\//}
else
tag='latest'
fi
echo "value=${tag}"
echo "value=${tag}" >> $GITHUB_OUTPUT
- name: Check image
id: test_image_exists
uses: cloudposse/github-action-docker-image-exists@main
continue-on-error: true
with:
registry: registry.hub.docker.com
organization: "neonlabsorg"
repository: "neon_tests"
login: ${{secrets.DOCKER_USERNAME}}
password: ${{secrets.DOCKER_PASSWORD}}
tag: ${{ steps.neon_test_tag.outputs.value}}
- name: Set latest tag for test image if feature/version branch doesn't exist
id: neon_test_final_tag
run: |
if [[ "${{ steps.test_image_exists.outcome }}" == "success" ]]; then
tag=${{ steps.neon_test_tag.outputs.value}}
else
tag='latest'
fi
echo "value=${tag}"
echo "value=${tag}" >> $GITHUB_OUTPUT
- name: Build docker image
run: |
python3 ./.github/workflows/deploy.py build_docker_image \
--neon_evm_tag=${{ steps.tags.outputs.neon_evm }} \
--proxy_tag=${{ steps.tags.outputs.proxy }} \
--head_ref_branch=${{ github.head_ref }}
- name: Publish image
run: |
python3 ./.github/workflows/deploy.py publish_image \
--proxy_tag=${{ steps.tags.outputs.proxy }} \
--head_ref=${{ github.head_ref }} \
--github_ref_name=${{ github.ref_name }}
deploy-check:
needs:
- build-image
runs-on: test-runner
steps:
- uses: actions/checkout@v4
- name: deploy_check
timeout-minutes: 60
run: |
python3 ./.github/workflows/deploy.py deploy_check \
--proxy_tag=${{ needs.build-image.outputs.proxy_tag }} \
--neon_evm_tag=${{ needs.build-image.outputs.neon_evm_tag }} \
--faucet_tag=${{ env.FAUCET_TAG }} \
--head_ref_branch=${{ github.head_ref }} \
--github_ref_name=${{ github.ref_name }}
- name: Dump docker logs
if: always()
run: python3 ./.github/workflows/deploy.py dump_apps_logs --proxy_tag=${{ needs.build-image.outputs.proxy_tag }}
- uses: actions/upload-artifact@v4
if: always()
with:
name: Docker logs
path: ./*.log
- name: Stop containers
if: always()
run: python3 ./.github/workflows/deploy.py stop_containers --proxy_tag=${{ needs.build-image.outputs.proxy_tag }}
- name: canceling the build if job failed
if: "failure()"
uses: "andymckay/[email protected]"
prepare-infrastructure:
needs:
- build-image
runs-on: test-runner
steps:
- uses: actions/checkout@v4
- name: Add private key
run: |
echo "${{ secrets.CI_STANDS_KEY_HCLOUD }}" > ${HOME}/.ssh/ci-stands
chmod 600 ${HOME}/.ssh/ci-stands
- name: Remove known_host
run: rm -f ${HOME}/.ssh/known_hosts
- name: Terraform build infra structure
id: terraform
run: |
python3 ./.github/workflows/deploy.py terraform_infrastructure \
--dockerhub_org_name=${{ env.DOCKERHUB_ORG_NAME }} \
--github_ref_name=${{ github.ref_name }} \
--head_ref_branch=${{ github.head_ref }} \
--neon_evm_tag=${{ needs.build-image.outputs.neon_evm_tag }} \
--proxy_tag=${{ needs.build-image.outputs.proxy_tag }} \
--faucet_tag=${{ env.FAUCET_TAG }} \
--run_number=${{ env.GITHUB_RUN_NUMBER }}
- name: Set outputs
id: share
env:
SOLANA_IP: ${{ env.SOLANA_IP }}
PROXY_IP: ${{ env.PROXY_IP }}
run: |
echo "solana_ip=${{ env.SOLANA_IP }}" >> $GITHUB_OUTPUT
echo "proxy_ip=${{ env.PROXY_IP }}" >> $GITHUB_OUTPUT
- uses: actions/upload-artifact@v4
if: always()
with:
name: Terraform infrastructure logs
path: ./terraform.log
outputs:
solana_ip: ${{ steps.share.outputs.solana_ip }}
proxy_ip: ${{ steps.share.outputs.proxy_ip }}
openzeppelin-tests:
if: needs.build-image.outputs.full_test_suite=='true'
needs:
- prepare-infrastructure
- build-image
runs-on: test-runner
env:
SOLANA_IP: ${{ needs.prepare-infrastructure.outputs.solana_ip }}
PROXY_IP: ${{ needs.prepare-infrastructure.outputs.proxy_ip }}
CONTAINER: oz-${{ github.run_id }}
NETWORK: terraform
steps:
- name: Pull docker image
run: docker pull ${{ env.NEON_TEST_IMAGE }}:${{ needs.build-image.outputs.neon_test_tag }}
- name: Run docker container
run: |
docker run -i -e PROXY_IP=${{env.PROXY_IP}} \
-e SOLANA_IP=${{env.SOLANA_IP}} \
-e NETWORK=${{env.NETWORK}} \
-d --name=${{ env.CONTAINER }} ${{ env.NEON_TEST_IMAGE }}:${{ needs.build-image.outputs.neon_test_tag }} /bin/bash
- name: Run OpenZeppelin tests
run: |
docker exec -i -e PROXY_IP=${{env.PROXY_IP}} \
-e SOLANA_IP=${{env.SOLANA_IP}} \
-e NETWORK=${{env.NETWORK}} \
${{ env.CONTAINER }} python3 ./clickfile.py run oz \
--network ${{ env.NETWORK }} \
--jobs 16 \
--users 10
- name: Print OpenZeppelin report
run: |
docker exec -i ${{ env.CONTAINER }} python3 ./clickfile.py oz report
- name: Analyze tests results
run: |
docker exec -i ${{ env.CONTAINER }} python3 ./clickfile.py oz analyze
- name: "Archive report"
if: always()
run: |
docker exec -i ${{ env.CONTAINER }} tar -czvf ./allure-results.tar.gz /opt/neon-tests/allure-results
docker cp ${{ env.CONTAINER }}:/opt/neon-tests/allure-results.tar.gz ./
- uses: actions/upload-artifact@v4
if: always()
with:
name: FTS allure report
path: allure-results.tar.gz
- name: Remove docker container
if: always()
run: docker rm -f ${{ env.CONTAINER }}
- name: canceling the build if job failed
if: "failure()"
uses: "andymckay/[email protected]"
basic-tests:
needs:
- prepare-infrastructure
- build-image
runs-on: test-runner
env:
SOLANA_IP: ${{ needs.prepare-infrastructure.outputs.solana_ip }}
PROXY_IP: ${{ needs.prepare-infrastructure.outputs.proxy_ip }}
NUMPROCESSES: 4
CONTAINER: basic-${{ github.run_id }}
NETWORK: terraform
steps:
- name: Run docker container
run: |
image="${{ env.NEON_TEST_IMAGE }}:${{ needs.build-image.outputs.neon_test_tag }}"
docker pull $image
docker run -i -d -e PROXY_IP=${{ env.PROXY_IP }} -e SOLANA_IP=${{ env.SOLANA_IP }} \
--name=${{ env.CONTAINER }} $image /bin/bash
- name: Update contracts in the container
run: |
docker exec -i ${{ env.CONTAINER }} \
python3 ./clickfile.py update-contracts \
--branch ${{ needs.build-image.outputs.tag_creation_base_branch || github.head_ref || github.ref_name }}
- name: Run basic tests
run: |
docker exec -i ${{ env.CONTAINER }} \
python3 ./clickfile.py run basic -n ${{ env.NETWORK }} --numprocesses ${{ env.NUMPROCESSES }}
- name: Remove docker container
if: always()
run: docker rm -f ${{ env.CONTAINER }}
- name: canceling the build if job failed
if: "failure()"
uses: "andymckay/[email protected]"
dapps-tests:
needs:
- prepare-infrastructure
- build-image
uses: neonlabsorg/neon-tests/.github/workflows/dapps_reusable.yml@develop
secrets: inherit
with:
network: custom
dapps: ${{ needs.build-image.outputs.dapps_list }}
proxy_url: "http://${{ needs.prepare-infrastructure.outputs.proxy_ip }}:9090/solana"
solana_url: "http://${{ needs.prepare-infrastructure.outputs.solana_ip }}:8899/"
faucet_url: "http://${{ needs.prepare-infrastructure.outputs.proxy_ip }}:3333/"
network_id: "111"
pr_url_for_report: ${{ github.event.inputs.initial_pr }}
proxy_ip: ${{ needs.prepare-infrastructure.outputs.proxy_ip }}
solana_ip: ${{ needs.prepare-infrastructure.outputs.solana_ip }}
external_call: true
# will be fixed by NDEV-2766
# economy-tests:
# if: needs.build-image.outputs.full_test_suite=='true'
# needs:
# - prepare-infrastructure
# - dapps-tests
# - basic-tests
# - openzeppelin-tests
# - build-image
# runs-on: test-runner
# env:
# SOLANA_IP: ${{ needs.prepare-infrastructure.outputs.solana_ip }}
# PROXY_IP: ${{ needs.prepare-infrastructure.outputs.proxy_ip }}
# CONTAINER: economy-${{ github.run_id }}
# NETWORK: terraform
# steps:
# - name: Run docker container
# run: |
# image="${{ env.NEON_TEST_IMAGE }}:${{ needs.build-image.outputs.neon_test_tag }}"
# docker pull $image
# docker run -i -d -e PROXY_IP=${{ env.PROXY_IP }} -e SOLANA_IP=${{ env.SOLANA_IP }} \
# --name=${{ env.CONTAINER }} $image /bin/bash
# - name: Run economy tests
# run: |
# docker exec -i ${{ env.CONTAINER }} \
# python3 ./clickfile.py run economy -n ${{ env.NETWORK }}
# - name: Remove docker container
# if: always()
# run: docker rm -f ${{ env.CONTAINER }}
destroy-terraform:
needs:
- prepare-infrastructure
- openzeppelin-tests
- basic-tests
- dapps-tests
- build-image
runs-on: test-runner
if: always()
env:
SOLANA_IP: ${{ needs.prepare-infrastructure.outputs.solana_ip }}
PROXY_IP: ${{ needs.prepare-infrastructure.outputs.proxy_ip }}
steps:
- uses: actions/checkout@v4
- name: Add private key
run: |
echo "${{ secrets.CI_STANDS_KEY_HCLOUD }}" > ${HOME}/.ssh/ci-stands
chmod 644 ${HOME}/.ssh/ci-stands
- name: Get container logs
if: always()
run: python3 ./.github/workflows/deploy.py get_container_logs
- uses: actions/upload-artifact@v4
if: always()
with:
name: FTS docker logs
path: ./logs/*
- name: Set output
id: vars
run: echo "bname=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT
- name: Destroy terraform infrastructure
if: ${{always() && needs.prepare-infrastructure.result != 'skipped'}}
env:
TF_VAR_branch: ${{ steps.vars.outputs.bname }}
run: |
python3 ./.github/workflows/deploy.py destroy_terraform \
--run_number=${{env.GITHUB_RUN_NUMBER}} \
--proxy_tag=${{ needs.build-image.outputs.proxy_tag }}
finalize-image:
runs-on: build-runner
needs:
- build-image
- openzeppelin-tests
- basic-tests
- dapps-tests
- deploy-check
if: |
always() &&
needs.deploy-check.result == 'success' &&
needs.basic-tests.result == 'success' &&
needs.dapps-tests.result == 'success' &&
contains(fromJSON('["success", "skipped"]'), needs.openzeppelin-tests.result)
steps:
- uses: actions/checkout@v4
- name: Tag published image
if: ${{ (github.event.inputs.neon_evm_commit == '' &&
needs.build-image.outputs.is_version_proxy_branch == 'false') ||
github.event.inputs.neon_evm_branch == 'refs/heads/develop' }}
run: |
python3 ./.github/workflows/deploy.py finalize_image \
--github_ref=${GITHUB_REF} \
--proxy_tag=${{ needs.build-image.outputs.proxy_tag }}
notification:
runs-on: build-runner
needs:
- finalize-image
- openzeppelin-tests
- basic-tests
- dapps-tests
- deploy-check
- build-image
if: |
failure() && needs.build-image.outputs.full_test_suite == 'true'
steps:
- uses: actions/checkout@v4
- name: Send notification to slack
run: |
python3 ./.github/workflows/deploy.py send_notification \
--url=${{secrets.SLACK_PROXY_CHANNEL_URL}} \
--build_url=${BUILD_URL}