Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
ba779d8
init git hub action
kristinaNikolaevaa Oct 11, 2022
2c9af3f
fix
kristinaNikolaevaa Oct 11, 2022
e870057
Update deploy.yml
kristinaNikolaevaa Oct 11, 2022
be46e9c
Update deploy.yml
kristinaNikolaevaa Oct 11, 2022
93cedc5
fixed
kristinaNikolaevaa Oct 11, 2022
c06f0da
Update deploy.py
kristinaNikolaevaa Oct 11, 2022
7648f9b
logs
kristinaNikolaevaa Oct 11, 2022
f787398
logs
kristinaNikolaevaa Oct 11, 2022
e80741e
Update deploy.yml
kristinaNikolaevaa Oct 11, 2022
19df223
test
kristinaNikolaevaa Oct 11, 2022
84daa23
fix
kristinaNikolaevaa Oct 11, 2022
0280dcb
fix
kristinaNikolaevaa Oct 11, 2022
ba0d41c
try
kristinaNikolaevaa Oct 11, 2022
f4372cb
test
kristinaNikolaevaa Oct 11, 2022
65d82b1
fix
kristinaNikolaevaa Oct 11, 2022
19c9b27
Update deploy.py
kristinaNikolaevaa Oct 11, 2022
22830ed
fix
kristinaNikolaevaa Oct 11, 2022
5b77b0f
try fix uniswap tests
kristinaNikolaevaa Oct 12, 2022
77e7f80
Update deploy.py
kristinaNikolaevaa Oct 12, 2022
001eef0
added logs
kristinaNikolaevaa Oct 12, 2022
93d2a0c
added logs
kristinaNikolaevaa Oct 12, 2022
92dd0f0
Update deploy.py
kristinaNikolaevaa Oct 12, 2022
eb73e98
Update deploy.py
kristinaNikolaevaa Oct 12, 2022
69c6635
test
kristinaNikolaevaa Oct 12, 2022
bd300fb
init git hub action
kristinaNikolaevaa Oct 11, 2022
e3752ad
Update deploy.py
kristinaNikolaevaa Oct 12, 2022
81a70f8
Merge branch 'feature/NDEV-698/move-workflow-from-bildkite' of https:…
kristinaNikolaevaa Oct 12, 2022
6eceec6
fix
kristinaNikolaevaa Oct 12, 2022
5d903f7
Merge branch 'develop' into feature/NDEV-698/move-workflow-from-bildkite
kristinaNikolaevaa Oct 19, 2022
68f74ab
Update pipeline.yml
kristinaNikolaevaa Oct 19, 2022
c41e070
Merge branch 'develop' into feature/NDEV-698/move-workflow-from-bildkite
kristinaNikolaevaa Oct 20, 2022
77253b5
new runners
kristinaNikolaevaa Oct 20, 2022
a7a21ea
python -> python3
kristinaNikolaevaa Oct 24, 2022
a55dbe8
Update pipeline.yml
kristinaNikolaevaa Oct 24, 2022
3ecdbfc
Update pipeline.yml
kristinaNikolaevaa Oct 24, 2022
fe4dfe3
Update pipeline.yml
kristinaNikolaevaa Oct 24, 2022
0133625
Update pipeline.yml
kristinaNikolaevaa Oct 24, 2022
687eb3a
Update pipeline.yml
kristinaNikolaevaa Oct 24, 2022
4701b73
Update pipeline.yml
kristinaNikolaevaa Oct 24, 2022
6c9faec
Update pipeline.yml
kristinaNikolaevaa Oct 24, 2022
f5bd056
fixed after review
kristinaNikolaevaa Oct 25, 2022
867ee45
Update pipeline.yml
kristinaNikolaevaa Oct 20, 2022
4d6be6c
Merge branch 'develop' into feature/NDEV-698/move-workflow-from-bildkite
kristinaNikolaevaa Oct 27, 2022
3a2182a
Merge branch 'feature/NDEV-698/move-workflow-from-bildkite' of https:…
kristinaNikolaevaa Oct 27, 2022
34e0c07
fixed after review
kristinaNikolaevaa Oct 28, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Update pipeline.yml
  • Loading branch information
kristinaNikolaevaa committed Oct 20, 2022
commit 68f74ab588106d3ef44a94935e5673646c1a273e
128 changes: 86 additions & 42 deletions .github/workflows/deploy.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import os
import re
import time
import sys
import docker
Expand Down Expand Up @@ -32,6 +33,9 @@ def cli():
]
}

DOCKER_USERNAME = os.environ.get("DOCKER_USERNAME")
DOCKER_PASSWORD = os.environ.get("DOCKER_PASSWORD")

TFSTATE_BUCKET = "nl-ci-stands"
TFSTATE_KEY_PREFIX = "tests/test-"
TFSTATE_REGION = "us-east-2"
Expand All @@ -56,14 +60,29 @@ def docker_compose(args: str):
return out


@cli.command(name="build_docker_image")
@click.option('--neon_evm_commit')
@click.option('--github_sha')
def build_docker_image(neon_evm_commit, github_sha):
neon_evm_image = f'neonlabsorg/evm_loader:{neon_evm_commit}'
def get_neon_evm_tag(proxy_tag):
evm_tag = re.sub('\d{1,2}$', 'x', proxy_tag)
response = requests.get(
url=f"https://registry.hub.docker.com/v2/repositories/neonlabsorg/evm_loader/tags/{evm_tag}")
if response.status_code != 200:
raise RuntimeError(
f"evm_loader image with {evm_tag} tag isn't found. Response: {response.json()}")
click.echo(f"Neon evm mage with tag {evm_tag} will be used")
return evm_tag


@ cli.command(name="build_docker_image")
@ click.option('--neon_evm_tag')
@ click.option('--proxy_tag')
@ click.option('--github_sha')
def build_docker_image(neon_evm_tag, proxy_tag, github_sha):
if re.match(r"v\d{1,2}\.\d{1,2}\.\d{1,2}\.*", proxy_tag):
neon_evm_tag = get_neon_evm_tag(proxy_tag)

neon_evm_image = f'neonlabsorg/evm_loader:{neon_evm_tag}'
docker_client.pull(neon_evm_image)

buildargs = {"NEON_EVM_COMMIT": neon_evm_commit,
buildargs = {"NEON_EVM_COMMIT": neon_evm_tag,
"PROXY_REVISION": github_sha,
"PROXY_LOG_CFG": "log_cfg.json"}

Expand All @@ -75,14 +94,22 @@ def build_docker_image(neon_evm_commit, github_sha):
click.echo(str(line).strip('\n'))


@cli.command(name="publish_image")
@click.option('--head_ref_branch')
@click.option('--base_ref_branch')
@click.option('--github_ref')
@click.option('--github_sha')
@click.option('--docker_user')
@click.option('--docker_password')
def publish_image(head_ref_branch, base_ref_branch, github_ref, github_sha, docker_user, docker_password):
@ cli.command(name="publish_image")
@ click.option('--github_sha')
def publish_image(github_sha):
docker_client.login(username=DOCKER_USERNAME, password=DOCKER_PASSWORD)
out = docker_client.push(f"{IMAGE_NAME}:{github_sha}")
if "error" in out:
raise RuntimeError(
f"Push {IMAGE_NAME}:{github_sha} finished with error: {out}")


@ cli.command(name="finalize_image")
@ click.option('--head_ref_branch')
@ click.option('--base_ref_branch')
@ click.option('--github_ref')
@ click.option('--github_sha')
def finalize_image(head_ref_branch, base_ref_branch, github_ref, github_sha):
if 'refs/tags/' in github_ref:
tag = github_ref.replace("refs/tags/", "")
elif base_ref_branch == 'master':
Expand All @@ -92,11 +119,11 @@ def publish_image(head_ref_branch, base_ref_branch, github_ref, github_sha, dock
else:
tag = head_ref_branch.split('/')[-1]

docker_client.login(username=docker_user, password=docker_password)
out = docker_client.push(f"{IMAGE_NAME}:{github_sha}")
docker_client.login(username=DOCKER_USERNAME, password=DOCKER_PASSWORD)
out = docker_client.pull(f"{IMAGE_NAME}:{github_sha}")
if "error" in out:
raise RuntimeError(
f"Push {IMAGE_NAME}:{github_sha} finished with error: {out}")
f"Pull {IMAGE_NAME}:{github_sha} finished with error: {out}")

docker_client.tag(f"{IMAGE_NAME}:{github_sha}", f"{IMAGE_NAME}:{tag}")
out = docker_client.push(f"{IMAGE_NAME}:{tag}")
Expand All @@ -105,16 +132,17 @@ def publish_image(head_ref_branch, base_ref_branch, github_ref, github_sha, dock
f"Push {IMAGE_NAME}:{tag} finished with error: {out}")


@cli.command(name="terraform_infrastructure")
@click.option('--branch')
@click.option('--github_sha')
@click.option('--neon_evm_commit')
@click.option('--run_number')
def terraform_build_infrastructure(branch, github_sha, neon_evm_commit, run_number):
@ cli.command(name="terraform_infrastructure")
@ click.option('--branch')
@ click.option('--github_sha')
@ click.option('--neon_evm_tag')
@ click.option('--proxy_tag')
@ click.option('--run_number')
def terraform_build_infrastructure(branch, github_sha, proxy_tag, neon_evm_tag, run_number):

os.environ["TF_VAR_branch"] = branch
os.environ["TF_VAR_proxy_model_commit"] = github_sha
os.environ["TF_VAR_neon_evm_commit"] = neon_evm_commit
os.environ["TF_VAR_proxy_model_commit"] = proxy_tag
os.environ["TF_VAR_neon_evm_commit"] = neon_evm_tag
os.environ["TF_VAR_faucet_model_commit"] = FAUCET_COMMIT
thstate_key = f'{TFSTATE_KEY_PREFIX}{github_sha}-{run_number}'

Expand All @@ -127,9 +155,9 @@ def terraform_build_infrastructure(branch, github_sha, neon_evm_commit, run_numb
click.echo(f"stderr: {stderr}")


@cli.command(name="destroy_terraform")
@click.option('--github_sha')
@click.option('--run_number')
@ cli.command(name="destroy_terraform")
@ click.option('--github_sha')
@ click.option('--run_number')
def destroy_terraform(github_sha, run_number):
thstate_key = f'{TFSTATE_KEY_PREFIX}{github_sha}-{run_number}'

Expand All @@ -139,11 +167,11 @@ def destroy_terraform(github_sha, run_number):
terraform.destroy()


@cli.command(name="openzeppelin")
@click.option('--run_number')
@ cli.command(name="openzeppelin")
@ click.option('--run_number')
def openzeppelin_test(run_number):
container_name = f'fts_{run_number}'
os.environ["FTS_THRESHOLD"] = '1920'
fts_threshold = 1920
os.environ["FTS_CONTAINER_NAME"] = container_name
os.environ["FTS_IMAGE"] = FTS_NAME
os.environ["FTS_USERS_NUMBER"] = '15'
Expand Down Expand Up @@ -197,9 +225,25 @@ def openzeppelin_test(run_number):
services = ["postgres", "dbcreation", "indexer", "proxy", "faucet"]
for service in services:
upload_remote_logs(ssh_client, service, artifact_logs)

dump_docker_logs(container_name)
docker_compose(
"-f docker-compose/docker-compose-full-test-suite.yml rm -f")
check_tests_results(fts_threshold, f"{container_name}.log")


def check_tests_results(fts_threshold, log_file):
passing_test_count = 0
with open(log_file, "r") as file:
while True:
line = file.readline()
if not line:
break
if re.match(r".*Passing - ", line):
passing_test_count = int(line.split('-')[1].strip())
break
if passing_test_count < fts_threshold:
raise RuntimeError(
f"Tests failed: Passing - {passing_test_count}\n Threshold - {fts_threshold}")


def upload_remote_logs(ssh_client, service, artifact_logs):
Expand All @@ -210,12 +254,12 @@ def upload_remote_logs(ssh_client, service, artifact_logs):
scp_client.get(f'/tmp/{service}.log.bz2', artifact_logs)


@cli.command(name="deploy_check")
@click.option('--neon_evm_commit')
@click.option('--github_sha')
def deploy_check(neon_evm_commit, github_sha):
os.environ["REVISION"] = github_sha
os.environ["NEON_EVM_COMMIT"] = neon_evm_commit
@ cli.command(name="deploy_check")
@ click.option('--proxy_tag')
@ click.option('--neon_evm_tag')
def deploy_check(proxy_tag, neon_evm_tag):
os.environ["REVISION"] = proxy_tag
os.environ["NEON_EVM_COMMIT"] = neon_evm_tag
os.environ["FAUCET_COMMIT"] = FAUCET_COMMIT
cleanup_docker()

Expand Down Expand Up @@ -252,7 +296,7 @@ def run_test(file_name):
click.echo(out)


@cli.command(name="dump_apps_logs")
@ cli.command(name="dump_apps_logs")
def dump_apps_logs():
containers = ['proxy', 'solana', 'proxy_program_loader',
'dbcreation', 'faucet', 'airdropper', 'indexer']
Expand Down Expand Up @@ -323,9 +367,9 @@ def run_uniswap_test():
subprocess.run(command, shell=True)


@cli.command(name="send_notification", help="Send notification to slack")
@click.option("-u", "--url", help="slack app endpoint url.")
@click.option("-b", "--build_url", help="github action test build url.")
@ cli.command(name="send_notification", help="Send notification to slack")
@ click.option("-u", "--url", help="slack app endpoint url.")
@ click.option("-b", "--build_url", help="github action test build url.")
def send_notification(url, build_url):
tpl = ERR_MSG_TPL.copy()

Expand Down
76 changes: 44 additions & 32 deletions .github/workflows/pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,44 +17,52 @@ env:
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 }}"

jobs:
build-image:
runs-on: ubuntu-latest
outputs:
proxy_tag: ${{ steps.tags.outputs.proxy }}
neon_evm_tag: ${{ steps.tags.outputs.neon_evm }}
steps:
- uses: actions/checkout@v3
with:
submodules: "true"
- name: Get branch name
id: branch-name
uses: tj-actions/branch-names@v6

- name: install python libs
run: pip install docker python_terraform scp paramiko

- name: Set neon_evm_commit
id: neon_evm_commit
- name: Define images tags
id: tags
run: |
WORKFLOW_INPUT=${{ github.event.inputs.neon_evm_commit }}
echo "::set-output name=value::${WORKFLOW_INPUT:-"latest"}"

if [[ "${{ github.event.inputs.neon_evm_branch }}" =~ "refs/tags/".* ]]; then
neon_evm_tag=`echo "${{ github.event.inputs.neon_evm_branch }}" | sed 's/refs\/tags\///g'`
else
neon_evm_tag=${{ github.event.inputs.neon_evm_commit }}
fi;
echo "neon_evm=${neon_evm_tag:-'latest'}" >> $GITHUB_OUTPUT
if [[ "${GITHUB_REF}" =~ "refs/tags/".* ]]; then
proxy_tag=`echo "${GITHUB_REF}" | sed 's/refs\/tags\///g'`
else
proxy_tag=${GITHUB_SHA}
fi;
echo "proxy=$proxy_tag" >> $GITHUB_OUTPUT
- name: Build docker image
if: ${{ !startsWith(github.event.inputs.neon_evm_branch , 'refs/tags') }}
run: |
python ./.github/workflows/deploy.py build_docker_image \
--github_sha=${GITHUB_SHA} \
--neon_evm_commit=${{ steps.neon_evm_commit.outputs.value }}

--neon_evm_tag=${{ steps.tags.outputs.neon_evm }} \
--proxy_tag=${{ steps.tags.outputs.proxy }}
- name: Publish image
if: ${{ !startsWith(github.event.inputs.neon_evm_branch, 'refs/tags/') }}
run: |
python ./.github/workflows/deploy.py publish_image \
--head_ref_branch=${{ steps.branch-name.outputs.head_ref_branch }} \
--github_ref=${GITHUB_REF} \
--base_ref_branch=${{ steps.branch-name.outputs.base_ref_branch }} \
--github_sha=${GITHUB_SHA} \
--docker_user=${{secrets.DOCKER_USERNAME}} \
--docker_password=${{secrets.DOCKER_PASSWORD}}

--github_sha=${GITHUB_SHA}
deploy-check:
needs:
- build-image
Expand All @@ -65,16 +73,11 @@ jobs:
submodules: "true"
- name: Install python libs
run: pip install docker python_terraform scp paramiko
- name: Set neon_evm_commit
id: neon_evm_commit
run: |
WORKFLOW_INPUT=${{ github.event.inputs.neon_evm_commit }}
echo "::set-output name=value::${WORKFLOW_INPUT:-"latest"}"
- name: deploy_check
run: |
python ./.github/workflows/deploy.py deploy_check \
--github_sha=${GITHUB_SHA} \
--neon_evm_commit=${{ steps.neon_evm_commit.outputs.value }}
--proxy_tag=${{ needs.build-image.outputs.proxy_tag }} \
--neon_evm_tag=${{ needs.build-image.outputs.neon_evm_tag }}
- name: Dump docker logs
if: always()
run: python ./.github/workflows/deploy.py dump_apps_logs
Expand All @@ -95,11 +98,6 @@ jobs:
- name: Get branch name
id: branch-name
uses: tj-actions/branch-names@v6
- name: Set neon_evm_commit
id: neon_evm_commit
run: |
WORKFLOW_INPUT=${{ github.event.inputs.neon_evm_commit }}
echo "::set-output name=value::${WORKFLOW_INPUT:-"latest"}"
- name: Install python libs
run: pip install docker python_terraform scp paramiko
- name: Add private key
Expand All @@ -111,11 +109,12 @@ jobs:
python3 ./.github/workflows/deploy.py terraform_infrastructure \
--branch=${{ steps.branch-name.outputs.head_ref_branch }} \
--github_sha=${GITHUB_SHA} \
--neon_evm_commit=${{ steps.neon_evm_commit.outputs.value }} \
--neon_evm_tag=${{ needs.build-image.outputs.neon_evm_tag }} \
--proxy_tag=${{ needs.build-image.outputs.proxy_tag }} \
--run_number=${GITHUB_RUN_NUMBER}

- name: Run openzeppelin tests
run: python3 ./.github/workflows/deploy.py openzeppelin --run_number ${GITHUB_RUN_NUMBER}
run: python3 ./.github/workflows/deploy.py openzeppelin --run_number=${GITHUB_RUN_NUMBER}

- name: Destroy terraform infrastructure
if: always()
Expand All @@ -134,9 +133,8 @@ jobs:
with:
name: FTS docker logs
path: ./logs/*
sent-notification:
finalize-image:
runs-on: ubuntu-latest
if: failure()
needs:
- openzeppelin-tests
- deploy-check
Expand All @@ -145,10 +143,24 @@ jobs:
with:
submodules: "true"

- name: Get branch name
id: branch-name
uses: tj-actions/branch-names@v6

- name: install python libs
run: pip install docker python_terraform scp paramiko

- name: Tag published image
if: ${{ !startsWith(github.event.inputs.neon_evm_branch , 'refs/tags/') }}
run: |
python ./.github/workflows/deploy.py finalize_image \
--head_ref_branch=${{ steps.branch-name.outputs.head_ref_branch }} \
--github_ref=${GITHUB_REF} \
--base_ref_branch=${{ steps.branch-name.outputs.base_ref_branch }} \
--github_sha=${GITHUB_SHA}

- name: Send notification to slack
if: failure()
run: |
python ./.github/workflows/deploy.py send_notification \
--url=${{secrets.SLACK_PROXY_CHANNEL_URL}} \
Expand Down