-
Notifications
You must be signed in to change notification settings - Fork 107
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
32 changed files
with
360 additions
and
120 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -14,6 +14,9 @@ on: | |
push: | ||
branches: | ||
- main | ||
release: | ||
types: | ||
- published | ||
|
||
env: | ||
NETWORK: Mainnet | ||
|
@@ -23,6 +26,36 @@ env: | |
MACHINE_TYPE: c2-standard-4 | ||
|
||
jobs: | ||
# If a release was made we want to extract the first part of the semver from the | ||
# tag_name | ||
# | ||
# Generate the following output to pass to subsequent jobs | ||
# - If our semver is `v1.3.0` the resulting output from this job would be `v1` | ||
# | ||
# Note: We just use the first part of the version to replace old instances, and change | ||
# it when a major version is released, to keep a segregation between new and old | ||
# versions. | ||
versioning: | ||
name: Versioning | ||
runs-on: ubuntu-latest | ||
outputs: | ||
major_version: ${{ steps.set.outputs.major_version }} | ||
steps: | ||
- name: Getting Zebrad Version | ||
id: get | ||
uses: actions/[email protected] | ||
with: | ||
result-encoding: string | ||
script: | | ||
return context.payload.release.tag_name.substring(0,2) | ||
- name: Setting API Version | ||
id: set | ||
run: echo "::set-output name=major_version::${{ steps.get.outputs.result }}" | ||
|
||
# Each time this workflow is executed, a build will be triggered to create a new image | ||
# with the corresponding tags using information from Git | ||
# | ||
# The image will be commonly named `zebrad:<short-hash | github-ref | semver>` | ||
build: | ||
uses: ./.github/workflows/build-docker-image.yml | ||
with: | ||
|
@@ -35,15 +68,26 @@ jobs: | |
zebra_skip_ipv6_tests: '1' | ||
rust_log: info | ||
|
||
# This jobs handles the deployment of a Managed Instance Group (MiG) with 2 nodes in | ||
# the us-central1 region. Two different groups of MiGs are deployed one for pushes to | ||
# the main branch and another for version releases of Zebra | ||
# | ||
# Once this workflow is triggered the previous MiG is replaced, on pushes to main its | ||
# always replaced, and with releases its only replaced if the same major version is | ||
# being deployed, otherwise a new major version is deployed | ||
# | ||
# Runs: | ||
# - on every push/merge to the `main` branch | ||
# - on every release, when it's published | ||
deploy-nodes: | ||
name: Deploy Mainnet nodes | ||
needs: build | ||
needs: [ build, versioning ] | ||
runs-on: ubuntu-latest | ||
timeout-minutes: 30 | ||
permissions: | ||
contents: 'read' | ||
id-token: 'write' | ||
if: ${{ github.event_name == 'push' && github.ref_name == 'main' }} | ||
if: ${{ (github.event_name == 'push' && github.ref_name == 'main') || github.event_name == 'release' }} | ||
|
||
steps: | ||
- name: Inject slug/short variables | ||
|
@@ -63,9 +107,9 @@ jobs: | |
|
||
- name: Create instance template | ||
run: | | ||
gcloud compute instance-templates create-with-container zebrad-${{ env.GITHUB_REF_SLUG_URL }}-${{ env.GITHUB_SHA_SHORT }} \ | ||
gcloud compute instance-templates create-with-container zebrad-${{ needs.versioning.outputs.major_version || env.GITHUB_REF_SLUG_URL }}-${{ env.GITHUB_SHA_SHORT }} \ | ||
--boot-disk-type=pd-ssd \ | ||
--container-image ${{ env.GAR_BASE }}/${{ env.GITHUB_REF_SLUG_URL }}:${{ env.GITHUB_SHA_SHORT }} \ | ||
--container-image ${{ env.GAR_BASE }}/zebrad@${{ needs.build.outputs.image_digest }} \ | ||
--create-disk name=zebrad-cache-${{ env.GITHUB_SHA_SHORT }},auto-delete=yes,size=100GB,type=pd-ssd \ | ||
--container-mount-disk mount-path="/zebrad-cache",name=zebrad-cache-${{ env.GITHUB_SHA_SHORT }} \ | ||
--machine-type ${{ env.MACHINE_TYPE }} \ | ||
|
@@ -77,15 +121,15 @@ jobs: | |
id: does-group-exist | ||
continue-on-error: true | ||
run: | | ||
gcloud compute instance-groups list | grep "zebrad-${{ env.GITHUB_REF_SLUG_URL }}" | grep "${{ env.REGION }}" | ||
gcloud compute instance-groups list | grep "zebrad-${{ needs.versioning.outputs.major_version || env.GITHUB_REF_SLUG_URL }}" | grep "${{ env.REGION }}" | ||
# Deploy new managed instance group using the new instance template | ||
- name: Create managed instance group | ||
if: steps.does-group-exist.outcome == 'failure' | ||
run: | | ||
gcloud compute instance-groups managed create \ | ||
"zebrad-${{ env.GITHUB_REF_SLUG_URL }}" \ | ||
--template "zebrad-${{ env.GITHUB_REF_SLUG_URL }}-${{ env.GITHUB_SHA_SHORT }}" \ | ||
"zebrad-${{ needs.versioning.outputs.major_version || env.GITHUB_REF_SLUG_URL }}" \ | ||
--template "zebrad-${{ needs.versioning.outputs.major_version || env.GITHUB_REF_SLUG_URL }}-${{ env.GITHUB_SHA_SHORT }}" \ | ||
--health-check zebrad-tracing-filter \ | ||
--initial-delay 30 \ | ||
--region "${{ env.REGION }}" \ | ||
|
@@ -96,10 +140,17 @@ jobs: | |
if: steps.does-group-exist.outcome == 'success' | ||
run: | | ||
gcloud compute instance-groups managed rolling-action start-update \ | ||
"zebrad-${{ env.GITHUB_REF_SLUG_URL }}" \ | ||
--version template="zebrad-${{ env.GITHUB_REF_SLUG_URL }}-${{ env.GITHUB_SHA_SHORT }}" \ | ||
"zebrad-${{ needs.versioning.outputs.major_version || env.GITHUB_REF_SLUG_URL }}" \ | ||
--version template="zebrad-${{ needs.versioning.outputs.major_version || env.GITHUB_REF_SLUG_URL }}-${{ env.GITHUB_SHA_SHORT }}" \ | ||
--region "${{ env.REGION }}" | ||
# This jobs handles the deployment of a single node (1) in the us-central1-a zone | ||
# when an instance is required to test a specific commit | ||
# | ||
# Runs: | ||
# - on request, using workflow_dispatch with regenerate-disks | ||
# | ||
# Note: this instances are not automatically replaced or deleted | ||
deploy-instance: | ||
name: Deploy single instance | ||
needs: build | ||
|
@@ -134,7 +185,7 @@ jobs: | |
--boot-disk-type=pd-ssd \ | ||
--container-stdin \ | ||
--container-tty \ | ||
--container-image ${{ env.GAR_BASE }}/${{ env.GITHUB_REF_SLUG_URL }}:${{ env.GITHUB_SHA_SHORT }} \ | ||
--container-image ${{ env.GAR_BASE }}/zebrad@${{ needs.build.outputs.image_digest }} \ | ||
--create-disk name=zebrad-cache-${{ env.GITHUB_SHA_SHORT }},auto-delete=yes,size=100GB,type=pd-ssd \ | ||
--container-mount-disk mount-path='/zebrad-cache',name=zebrad-cache-${{ env.GITHUB_SHA_SHORT }} \ | ||
--machine-type ${{ env.MACHINE_TYPE }} \ | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.