mirror of
https://github.com/pezkuwichain/pezkuwi-telemetry.git
synced 2026-10-20 18:56:21 +00:00
[ci] Migrate CI from GitLab to GitHub (#593)
* [ci] Migrate CI from GitLab to GitHub * fix docker path * unite backend jobs into one workflow * rm files * add cache-on-failure to tests cache * add deploy workflow * change wfl name * readme * fix readme * typo
This commit is contained in:
1 parent
0cd8726ce5
commit
b16ad2e8ad
11 files changed
+334
-422
No files matched your search
@@ -0,0 +1,109 @@
|
|||||||
|
name: Backend CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
paths:
|
||||||
|
- ".github/workflows/backend*"
|
||||||
|
- "backend/**"
|
||||||
|
- "!frontend/**"
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- ".github/workflows/backend*"
|
||||||
|
- "backend/**"
|
||||||
|
- "!frontend/**"
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
env:
|
||||||
|
CARGO_TERM_COLOR: always
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
working-directory: ./backend
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check:
|
||||||
|
name: Check Code
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout sources
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install Rust stable toolchain
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
profile: minimal
|
||||||
|
toolchain: stable
|
||||||
|
override: true
|
||||||
|
|
||||||
|
- name: Rust Cache
|
||||||
|
uses: Swatinem/rust-cache@23bce251a8cd2ffc3c1075eaa2367cf899916d84 # v2.7.3
|
||||||
|
with:
|
||||||
|
workspaces: backend
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: cargo check --all-targets --verbose
|
||||||
|
tests:
|
||||||
|
name: Run tests
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout sources
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install Rust stable toolchain
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
profile: minimal
|
||||||
|
toolchain: stable
|
||||||
|
override: true
|
||||||
|
|
||||||
|
- name: Rust Cache
|
||||||
|
uses: Swatinem/rust-cache@23bce251a8cd2ffc3c1075eaa2367cf899916d84 # v2.7.3
|
||||||
|
with:
|
||||||
|
workspaces: backend
|
||||||
|
cache-on-failure: true
|
||||||
|
|
||||||
|
- name: Cargo test
|
||||||
|
run: cargo test --verbose --jobs 1
|
||||||
|
docs:
|
||||||
|
name: Check Documentation
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout sources
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install Rust stable toolchain
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
profile: minimal
|
||||||
|
toolchain: stable
|
||||||
|
override: true
|
||||||
|
|
||||||
|
- name: Rust Cache
|
||||||
|
uses: Swatinem/rust-cache@23bce251a8cd2ffc3c1075eaa2367cf899916d84 # v2.7.3
|
||||||
|
with:
|
||||||
|
workspaces: backend
|
||||||
|
|
||||||
|
- name: Check internal documentation links
|
||||||
|
run: RUSTDOCFLAGS="--deny broken_intra_doc_links" cargo doc --verbose --workspace --no-deps --document-private-items
|
||||||
|
fmt:
|
||||||
|
name: Run rustfmt
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout sources
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install Rust stable toolchain
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
profile: minimal
|
||||||
|
toolchain: stable
|
||||||
|
override: true
|
||||||
|
components: clippy, rustfmt
|
||||||
|
|
||||||
|
- name: Cargo fmt
|
||||||
|
run: cargo fmt --verbose --all -- --check
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
name: Backend CI - cargo check
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
paths:
|
|
||||||
- '.github/workflows/backend*'
|
|
||||||
- 'backend/**'
|
|
||||||
- '!frontend/**'
|
|
||||||
pull_request:
|
|
||||||
paths:
|
|
||||||
- '.github/workflows/backend*'
|
|
||||||
- 'backend/**'
|
|
||||||
- '!frontend/**'
|
|
||||||
|
|
||||||
env:
|
|
||||||
CARGO_TERM_COLOR: always
|
|
||||||
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
working-directory: ./backend
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
check:
|
|
||||||
name: Check Code
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout sources
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Install Rust stable toolchain
|
|
||||||
uses: actions-rs/toolchain@v1
|
|
||||||
with:
|
|
||||||
profile: minimal
|
|
||||||
toolchain: stable
|
|
||||||
override: true
|
|
||||||
|
|
||||||
- name: Rust Cache
|
|
||||||
uses: Swatinem/rust-cache@23bce251a8cd2ffc3c1075eaa2367cf899916d84 # v2.7.3
|
|
||||||
with:
|
|
||||||
workspaces: backend
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: cargo check --all-targets --verbose
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
name: Backend CI - cargo doc
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
paths:
|
|
||||||
- '.github/workflows/backend*'
|
|
||||||
- 'backend/**'
|
|
||||||
- '!frontend/**'
|
|
||||||
pull_request:
|
|
||||||
paths:
|
|
||||||
- '.github/workflows/backend*'
|
|
||||||
- 'backend/**'
|
|
||||||
- '!frontend/**'
|
|
||||||
|
|
||||||
env:
|
|
||||||
CARGO_TERM_COLOR: always
|
|
||||||
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
working-directory: ./backend
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
docs:
|
|
||||||
name: Check Documentation
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout sources
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Install Rust stable toolchain
|
|
||||||
uses: actions-rs/toolchain@v1
|
|
||||||
with:
|
|
||||||
profile: minimal
|
|
||||||
toolchain: stable
|
|
||||||
override: true
|
|
||||||
|
|
||||||
- name: Rust Cache
|
|
||||||
uses: Swatinem/rust-cache@23bce251a8cd2ffc3c1075eaa2367cf899916d84 # v2.7.3
|
|
||||||
with:
|
|
||||||
workspaces: backend
|
|
||||||
|
|
||||||
- name: Check internal documentation links
|
|
||||||
run: RUSTDOCFLAGS="--deny broken_intra_doc_links" cargo doc --verbose --workspace --no-deps --document-private-items
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
name: Backend CI - cargo fmt
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
paths:
|
|
||||||
- '.github/workflows/backend*'
|
|
||||||
- 'backend/**'
|
|
||||||
- '!frontend/**'
|
|
||||||
pull_request:
|
|
||||||
paths:
|
|
||||||
- '.github/workflows/backend*'
|
|
||||||
- 'backend/**'
|
|
||||||
- '!frontend/**'
|
|
||||||
|
|
||||||
env:
|
|
||||||
CARGO_TERM_COLOR: always
|
|
||||||
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
working-directory: ./backend
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
fmt:
|
|
||||||
name: Run rustfmt
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout sources
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Install Rust stable toolchain
|
|
||||||
uses: actions-rs/toolchain@v1
|
|
||||||
with:
|
|
||||||
profile: minimal
|
|
||||||
toolchain: stable
|
|
||||||
override: true
|
|
||||||
components: clippy, rustfmt
|
|
||||||
|
|
||||||
- name: Cargo fmt
|
|
||||||
run: cargo fmt --verbose --all -- --check
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
name: Backend CI - cargo test
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
paths:
|
|
||||||
- '.github/workflows/backend*'
|
|
||||||
- 'backend/**'
|
|
||||||
- '!frontend/**'
|
|
||||||
pull_request:
|
|
||||||
paths:
|
|
||||||
- '.github/workflows/backend*'
|
|
||||||
- 'backend/**'
|
|
||||||
- '!frontend/**'
|
|
||||||
|
|
||||||
env:
|
|
||||||
CARGO_TERM_COLOR: always
|
|
||||||
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
working-directory: ./backend
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
tests:
|
|
||||||
name: Run tests
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout sources
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Install Rust stable toolchain
|
|
||||||
uses: actions-rs/toolchain@v1
|
|
||||||
with:
|
|
||||||
profile: minimal
|
|
||||||
toolchain: stable
|
|
||||||
override: true
|
|
||||||
|
|
||||||
- name: Rust Cache
|
|
||||||
uses: Swatinem/rust-cache@23bce251a8cd2ffc3c1075eaa2367cf899916d84 # v2.7.3
|
|
||||||
with:
|
|
||||||
workspaces: backend
|
|
||||||
|
|
||||||
- name: Cargo test
|
|
||||||
run: cargo test --verbose --jobs 1
|
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
name: Docker Build
|
||||||
|
# Workflow checks that docker build works
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [opened, synchronize, reopened, ready_for_review]
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
env:
|
||||||
|
IMAGE_NAME: parity/substrate-telemetry
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
set-variables:
|
||||||
|
name: Set variables
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
VERSION: ${{ steps.version.outputs.VERSION }}
|
||||||
|
steps:
|
||||||
|
- name: Define version
|
||||||
|
id: version
|
||||||
|
run: |
|
||||||
|
export COMMIT_SHA=${{ github.sha }}
|
||||||
|
export COMMIT_SHA_SHORT=${COMMIT_SHA:0:8}
|
||||||
|
export REF_NAME=${{ github.ref_name }}
|
||||||
|
export REF_SLUG=${REF_NAME//\//_}
|
||||||
|
if [[ ${REF_SLUG} == "main" ]]
|
||||||
|
then
|
||||||
|
echo "VERSION=${REF_SLUG}-${COMMIT_SHA_SHORT}" >> $GITHUB_OUTPUT
|
||||||
|
else
|
||||||
|
echo "VERSION=${REF_SLUG}" >> $GITHUB_OUTPUT
|
||||||
|
fi
|
||||||
|
echo "set VERSION=${VERSION}"
|
||||||
|
|
||||||
|
build_backend:
|
||||||
|
name: Build backend docker image
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: [set-variables]
|
||||||
|
env:
|
||||||
|
VERSION: ${{ needs.set-variables.outputs.VERSION }}
|
||||||
|
steps:
|
||||||
|
- name: Check out the repo
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Build and push Docker image from main
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: backend
|
||||||
|
file: ./backend/Dockerfile
|
||||||
|
push: false
|
||||||
|
tags: |
|
||||||
|
${{ env.IMAGE_NAME }}-backend:${{ env.VERSION }}
|
||||||
|
|
||||||
|
build_frontend:
|
||||||
|
name: Build frontend docker image
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: [set-variables]
|
||||||
|
env:
|
||||||
|
VERSION: ${{ needs.set-variables.outputs.VERSION }}
|
||||||
|
steps:
|
||||||
|
- name: Check out the repo
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Build and push Docker image from main
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: frontend
|
||||||
|
file: ./frontend/Dockerfile
|
||||||
|
push: false
|
||||||
|
tags: |
|
||||||
|
${{ env.IMAGE_NAME }}-frontend:${{ env.VERSION }}
|
||||||
@@ -15,6 +15,10 @@ on:
|
|||||||
- 'frontend/**'
|
- 'frontend/**'
|
||||||
- '!backend/**'
|
- '!backend/**'
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
working-directory: ./frontend
|
working-directory: ./frontend
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
name: gitspiegel sync
|
|
||||||
|
|
||||||
# This workflow doesn't do anything, it's only use is to trigger "workflow_run"
|
|
||||||
# webhook, that'll be consumed by gitspiegel
|
|
||||||
# This way, gitspiegel won't do mirroring, unless this workflow runs,
|
|
||||||
# and running the workflow is protected by GitHub
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
types:
|
|
||||||
- opened
|
|
||||||
- synchronize
|
|
||||||
- unlocked
|
|
||||||
- ready_for_review
|
|
||||||
- reopened
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
sync:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Do nothing
|
|
||||||
run: echo "let's go"
|
|
||||||
@@ -0,0 +1,136 @@
|
|||||||
|
name: Publish and deploy
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
tags:
|
||||||
|
- "v*"
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
env:
|
||||||
|
IMAGE_NAME: parity/substrate-telemetry
|
||||||
|
APP: "substrate-telemetry"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
set-variables:
|
||||||
|
name: Set variables
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
VERSION: ${{ steps.version.outputs.VERSION }}
|
||||||
|
steps:
|
||||||
|
- name: Define version
|
||||||
|
id: version
|
||||||
|
run: |
|
||||||
|
export COMMIT_SHA=${{ github.sha }}
|
||||||
|
export COMMIT_SHA_SHORT=${COMMIT_SHA:0:8}
|
||||||
|
export REF_NAME=${{ github.ref_name }}
|
||||||
|
export REF_SLUG=${REF_NAME//\//_}
|
||||||
|
if [[ ${REF_SLUG} == "master" ]]
|
||||||
|
then
|
||||||
|
echo "VERSION=${REF_SLUG}-${COMMIT_SHA_SHORT}" >> $GITHUB_OUTPUT
|
||||||
|
else
|
||||||
|
echo "VERSION=${REF_SLUG}" >> $GITHUB_OUTPUT
|
||||||
|
fi
|
||||||
|
echo "set VERSION=${VERSION}"
|
||||||
|
|
||||||
|
build_backend:
|
||||||
|
name: Build backend docker image
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: [set-variables]
|
||||||
|
environment: master_n_tags
|
||||||
|
env:
|
||||||
|
VERSION: ${{ needs.set-variables.outputs.VERSION }}
|
||||||
|
steps:
|
||||||
|
- name: Check out the repo
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Log in to Docker Hub
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKERHUB_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Build and push Docker image from master
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: backend
|
||||||
|
file: ./backend/Dockerfile
|
||||||
|
push: false
|
||||||
|
tags: |
|
||||||
|
${{ env.IMAGE_NAME }}-backend:${{ env.VERSION }}
|
||||||
|
|
||||||
|
build_frontend:
|
||||||
|
name: Build frontend docker image
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: [set-variables]
|
||||||
|
environment: master_n_tags
|
||||||
|
env:
|
||||||
|
VERSION: ${{ needs.set-variables.outputs.VERSION }}
|
||||||
|
steps:
|
||||||
|
- name: Check out the repo
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Log in to Docker Hub
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKERHUB_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Build and push Docker image from master
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: frontend
|
||||||
|
file: ./frontend/Dockerfile
|
||||||
|
push: false
|
||||||
|
tags: |
|
||||||
|
${{ env.IMAGE_NAME }}-frontend:${{ env.VERSION }}
|
||||||
|
|
||||||
|
deploy-stg:
|
||||||
|
name: Deploy Staging
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: [set-variables, build_backend, build_frontend]
|
||||||
|
environment: parity-stg
|
||||||
|
env:
|
||||||
|
VERSION: ${{ needs.set-variables.outputs.VERSION }}
|
||||||
|
ARGOCD_SERVER: "argocd-stg.teleport.parity.io"
|
||||||
|
steps:
|
||||||
|
- name: Deploy to ArgoCD
|
||||||
|
uses: paritytech/argocd-deployment-action@main
|
||||||
|
with:
|
||||||
|
environment: "parity-stg"
|
||||||
|
tag: "${{ env.VERSION }}"
|
||||||
|
app_name: "${{ env.APP }}"
|
||||||
|
app_packages: "frontend,backend"
|
||||||
|
argocd_additional_args: "-p substrate-telemetry.image.backend.repository=docker.io/parity/substrate-telemetry-backend -p substrate-telemetry.image.frontend.repository=docker.io/parity/substrate-telemetry-frontend"
|
||||||
|
argocd_server: ${{ env.ARGOCD_SERVER }}
|
||||||
|
teleport_token: ${{ env.APP }}
|
||||||
|
teleport_app_name: "argocd-stg"
|
||||||
|
argocd_auth_token: ${{ secrets.ARGOCD_AUTH_TOKEN }}
|
||||||
|
|
||||||
|
deploy-prod:
|
||||||
|
name: Deploy Production
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: [set-variables, deploy-stg]
|
||||||
|
environment: parity-prod
|
||||||
|
# Deploy only if the tag is v*
|
||||||
|
if: startsWith(github.ref, 'refs/tags/v')
|
||||||
|
env:
|
||||||
|
VERSION: ${{ needs.set-variables.outputs.VERSION }}
|
||||||
|
ARGOCD_SERVER: "argocd-prod.teleport.parity.io"
|
||||||
|
steps:
|
||||||
|
- name: Deploy to ArgoCD
|
||||||
|
uses: paritytech/argocd-deployment-action@main
|
||||||
|
with:
|
||||||
|
environment: "parity-prod"
|
||||||
|
tag: "${{ env.VERSION }}"
|
||||||
|
app_name: "${{ env.APP }}"
|
||||||
|
app_packages: "frontend,backend"
|
||||||
|
argocd_additional_args: "-p substrate-telemetry.image.backend.repository=docker.io/parity/substrate-telemetry-backend -p substrate-telemetry.image.frontend.repository=docker.io/parity/substrate-telemetry-frontend"
|
||||||
|
argocd_server: ${{ env.ARGOCD_SERVER }}
|
||||||
|
teleport_token: ${{ env.APP }}
|
||||||
|
teleport_app_name: "argocd-prod"
|
||||||
|
argocd_auth_token: ${{ secrets.ARGOCD_AUTH_TOKEN }}
|
||||||
-213
@@ -1,213 +0,0 @@
|
|||||||
# Gitlab-CI Workflow
|
|
||||||
# stages:
|
|
||||||
# build:
|
|
||||||
# - Runs on commits on master or tags that match the pattern "v[0-9]+\.[0-9]+.*$". (e.g. 1.0, v2.1rc1)
|
|
||||||
# deploy-staging:
|
|
||||||
# - Runs on commits on master or tags that match the pattern v1.0, v2.1rc1 (continues deployment)
|
|
||||||
# deploy-production:
|
|
||||||
# - Runs on tags that match the pattern v1.0, v2.1rc1 (manual deployment)
|
|
||||||
|
|
||||||
variables:
|
|
||||||
# Build Variables (Mandatory)
|
|
||||||
CONTAINER_REPO: ""
|
|
||||||
DOCKERFILE_DIRECTORY: ""
|
|
||||||
|
|
||||||
|
|
||||||
# Manual Variables (Optional)
|
|
||||||
## Could be used in the webconsole when triggering the pipeline manually
|
|
||||||
## DO NOT SET THEM IN THIS FILE!! They've been mentioned here only for documentation purposes!
|
|
||||||
FORCE_DEPLOY: "" # boolean: true or false - triggers the deploy-production stage
|
|
||||||
FORCE_DOCKER_TAG: "" # choose an existing docker tag to be deployed (e.g. v1.2.3)
|
|
||||||
BUILDAH_IMAGE: "quay.io/buildah/stable:v1.29"
|
|
||||||
BUILDAH_COMMAND: "buildah --storage-driver overlay2"
|
|
||||||
|
|
||||||
default:
|
|
||||||
before_script:
|
|
||||||
- |-
|
|
||||||
echo defining DOCKER_IMAGE_TAG variable
|
|
||||||
if [[ $FORCE_DOCKER_TAG ]]; then
|
|
||||||
export DOCKER_IMAGE_TAG="${FORCE_DOCKER_TAG}"
|
|
||||||
elif [[ $CI_COMMIT_TAG =~ ^v[0-9]+\.[0-9]+.*$ ]]; then
|
|
||||||
export DOCKER_IMAGE_TAG="${CI_COMMIT_TAG}"
|
|
||||||
export BUILD_LATEST_IMAGE="true"
|
|
||||||
else
|
|
||||||
export DOCKER_IMAGE_TAG="${CI_COMMIT_SHORT_SHA}-beta"
|
|
||||||
fi
|
|
||||||
retry:
|
|
||||||
max: 2
|
|
||||||
when:
|
|
||||||
- runner_system_failure
|
|
||||||
- unknown_failure
|
|
||||||
- api_failure
|
|
||||||
|
|
||||||
stages:
|
|
||||||
- build
|
|
||||||
- deploy-commit-to-staging
|
|
||||||
- deploy-master-to-staging
|
|
||||||
- deploy-production
|
|
||||||
|
|
||||||
|
|
||||||
# Pipeline Job Templates:
|
|
||||||
.dockerize: &dockerize
|
|
||||||
stage: build
|
|
||||||
image: $BUILDAH_IMAGE
|
|
||||||
script:
|
|
||||||
- |-
|
|
||||||
echo building "$CONTAINER_REPO:$DOCKER_IMAGE_TAG"
|
|
||||||
if [[ $BUILD_LATEST_IMAGE ]]; then
|
|
||||||
$BUILDAH_COMMAND build \
|
|
||||||
--format=docker \
|
|
||||||
--tag "$CONTAINER_REPO:$DOCKER_IMAGE_TAG" \
|
|
||||||
--tag "$CONTAINER_REPO:latest" "$DOCKERFILE_DIRECTORY"
|
|
||||||
else
|
|
||||||
$BUILDAH_COMMAND build \
|
|
||||||
--format=docker \
|
|
||||||
--tag "$CONTAINER_REPO:$DOCKER_IMAGE_TAG" "$DOCKERFILE_DIRECTORY"
|
|
||||||
fi
|
|
||||||
- echo ${DOCKER_PASSWORD} |
|
|
||||||
buildah login --username ${DOCKER_USERNAME} --password-stdin docker.io
|
|
||||||
- |-
|
|
||||||
echo pushing "$CONTAINER_REPO:$DOCKER_IMAGE_TAG"
|
|
||||||
if [[ $BUILD_LATEST_IMAGE ]]; then
|
|
||||||
$BUILDAH_COMMAND push --format=v2s2 "$CONTAINER_REPO:$DOCKER_IMAGE_TAG"
|
|
||||||
$BUILDAH_COMMAND push --format=v2s2 "$CONTAINER_REPO:latest"
|
|
||||||
else
|
|
||||||
$BUILDAH_COMMAND push --format=v2s2 "$CONTAINER_REPO:$DOCKER_IMAGE_TAG"
|
|
||||||
fi
|
|
||||||
rules:
|
|
||||||
- if: '$FORCE_DOCKER_TAG'
|
|
||||||
when: never
|
|
||||||
- if: '$CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+.*$/' # i.e. v1.0, v2.1rc1
|
|
||||||
when: always
|
|
||||||
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
|
|
||||||
when: always
|
|
||||||
tags:
|
|
||||||
- kubernetes-parity-build
|
|
||||||
|
|
||||||
.publish-docker-image-description:
|
|
||||||
stage: build
|
|
||||||
image: paritytech/dockerhub-description
|
|
||||||
before_script:
|
|
||||||
- echo
|
|
||||||
variables:
|
|
||||||
DOCKERHUB_REPOSITORY: parity/substrate-telemetry-$PRODUCT
|
|
||||||
DOCKER_USERNAME: $Docker_Hub_User_Parity
|
|
||||||
DOCKER_PASSWORD: $Docker_Hub_Pass_Parity
|
|
||||||
README_FILEPATH: $CI_PROJECT_DIR/$PRODUCT/Dockerfile.README.md
|
|
||||||
rules:
|
|
||||||
- if: $CI_COMMIT_REF_NAME == "master"
|
|
||||||
changes:
|
|
||||||
- $PRODUCT/Dockerfile.README.md
|
|
||||||
script:
|
|
||||||
- cd / && sh entrypoint.sh
|
|
||||||
tags:
|
|
||||||
- kubernetes-parity-build
|
|
||||||
|
|
||||||
.deploy: &deploy
|
|
||||||
image: quay.io/argoproj/argocd:v2.7.9
|
|
||||||
variables:
|
|
||||||
ARGOCD_OPTS: --grpc-web --grpc-web-root-path /$ENVIRONMENT
|
|
||||||
APP: substrate-telemetry
|
|
||||||
environment:
|
|
||||||
name: $ENVIRONMENT
|
|
||||||
script:
|
|
||||||
- argocd app list
|
|
||||||
- argocd app set $APP
|
|
||||||
--helm-set substrate-telemetry.image.backend.repository="${CONTAINER_REPO_BACKEND}"
|
|
||||||
--helm-set substrate-telemetry.image.backend.tag="${DOCKER_IMAGE_TAG}"
|
|
||||||
--helm-set substrate-telemetry.image.frontend.repository="${CONTAINER_REPO_FRONTEND}"
|
|
||||||
--helm-set substrate-telemetry.image.frontend.tag="${DOCKER_IMAGE_TAG}"
|
|
||||||
- argocd app sync $APP
|
|
||||||
- argocd app wait $APP --timeout 180
|
|
||||||
tags:
|
|
||||||
- kubernetes-parity-build
|
|
||||||
|
|
||||||
|
|
||||||
# Pipeline Jobs:
|
|
||||||
build-backend:
|
|
||||||
variables:
|
|
||||||
CONTAINER_REPO: "docker.io/parity/substrate-telemetry-backend"
|
|
||||||
DOCKERFILE_DIRECTORY: "./backend/"
|
|
||||||
DOCKER_USERNAME: $Docker_Hub_User_Parity
|
|
||||||
DOCKER_PASSWORD: $Docker_Hub_Pass_Parity
|
|
||||||
<<: *dockerize
|
|
||||||
|
|
||||||
build-frontend:
|
|
||||||
variables:
|
|
||||||
CONTAINER_REPO: "docker.io/parity/substrate-telemetry-frontend"
|
|
||||||
DOCKERFILE_DIRECTORY: "./frontend/"
|
|
||||||
DOCKER_USERNAME: $Docker_Hub_User_Parity
|
|
||||||
DOCKER_PASSWORD: $Docker_Hub_Pass_Parity
|
|
||||||
<<: *dockerize
|
|
||||||
|
|
||||||
publish-backend-docker-image-description:
|
|
||||||
extends: .publish-docker-image-description
|
|
||||||
variables:
|
|
||||||
PRODUCT: backend
|
|
||||||
SHORT_DESCRIPTION: "substrate-backend Docker Image."
|
|
||||||
|
|
||||||
publish-frontend-docker-image-description:
|
|
||||||
extends: .publish-docker-image-description
|
|
||||||
variables:
|
|
||||||
PRODUCT: frontend
|
|
||||||
SHORT_DESCRIPTION: "substrate-frontend Docker Image."
|
|
||||||
|
|
||||||
# Manually build the docker images and deploy some commit to staging.
|
|
||||||
build-backend-manual:
|
|
||||||
variables:
|
|
||||||
CONTAINER_REPO: "docker.io/paritypr/substrate-telemetry-backend"
|
|
||||||
DOCKERFILE_DIRECTORY: "./backend/"
|
|
||||||
DOCKER_USERNAME: $PARITYPR_USER
|
|
||||||
DOCKER_PASSWORD: $PARITYPR_PASS
|
|
||||||
<<: *dockerize
|
|
||||||
rules:
|
|
||||||
- if: '$CI_COMMIT_BRANCH =~ /^[0-9]+/'
|
|
||||||
when: manual
|
|
||||||
|
|
||||||
build-frontend-manual:
|
|
||||||
variables:
|
|
||||||
CONTAINER_REPO: "docker.io/paritypr/substrate-telemetry-frontend"
|
|
||||||
DOCKERFILE_DIRECTORY: "./frontend/"
|
|
||||||
DOCKER_USERNAME: $PARITYPR_USER
|
|
||||||
DOCKER_PASSWORD: $PARITYPR_PASS
|
|
||||||
<<: *dockerize
|
|
||||||
rules:
|
|
||||||
- if: '$CI_COMMIT_BRANCH =~ /^[0-9]+/'
|
|
||||||
when: manual
|
|
||||||
|
|
||||||
deploy-commit-to-staging:
|
|
||||||
variables:
|
|
||||||
CONTAINER_REPO_BACKEND: "docker.io/paritypr/substrate-telemetry-backend"
|
|
||||||
CONTAINER_REPO_FRONTEND: "docker.io/paritypr/substrate-telemetry-frontend"
|
|
||||||
ENVIRONMENT: "parity-stg"
|
|
||||||
stage: deploy-commit-to-staging
|
|
||||||
extends: .deploy
|
|
||||||
rules:
|
|
||||||
- if: '$CI_COMMIT_BRANCH =~ /^[0-9]+/'
|
|
||||||
when: manual
|
|
||||||
|
|
||||||
# Automatically deploy `master` branch or tag like `v1.0` to staging
|
|
||||||
deploy-master-to-staging:
|
|
||||||
variables:
|
|
||||||
CONTAINER_REPO_BACKEND: "docker.io/parity/substrate-telemetry-backend"
|
|
||||||
CONTAINER_REPO_FRONTEND: "docker.io/parity/substrate-telemetry-frontend"
|
|
||||||
ENVIRONMENT: "parity-stg"
|
|
||||||
stage: deploy-master-to-staging
|
|
||||||
extends: .deploy
|
|
||||||
rules:
|
|
||||||
- if: '$CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+.*$/' # i.e. v1.0, v2.1rc1
|
|
||||||
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
|
|
||||||
|
|
||||||
# Manually deploy a tag like `v1.0` to production
|
|
||||||
deploy-production:
|
|
||||||
variables:
|
|
||||||
CONTAINER_REPO_BACKEND: "docker.io/parity/substrate-telemetry-backend"
|
|
||||||
CONTAINER_REPO_FRONTEND: "docker.io/parity/substrate-telemetry-frontend"
|
|
||||||
ENVIRONMENT: "parity-prod"
|
|
||||||
stage: deploy-production
|
|
||||||
extends: .deploy
|
|
||||||
rules:
|
|
||||||
- if: '$CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+.*$/' # i.e. v1.0, v2.1rc1
|
|
||||||
when: manual
|
|
||||||
- if: '$FORCE_DEPLOY == "true"'
|
|
||||||
when: manual
|
|
||||||
@@ -193,9 +193,9 @@ This section covers the internal deployment of Substrate Telemetry to our stagin
|
|||||||
|
|
||||||
Every time new code is merged to `master`, a new version of telemetry will be automatically built and deployed to our staging environment, so there is nothing that you need to do. Roughly what will happen is:
|
Every time new code is merged to `master`, a new version of telemetry will be automatically built and deployed to our staging environment, so there is nothing that you need to do. Roughly what will happen is:
|
||||||
|
|
||||||
- An image tag will be generated that looks like `$CI_COMMIT_SHORT_SHA-beta`, for example `224b1fae-beta`.
|
- An image tag will be generated that looks like `master-$CI_COMMIT_SHORT_SHA`, for example `master-224b1fae`.
|
||||||
- Docker images for the frontend and backend will be pushed to the docker repo (see https://hub.docker.com/r/parity/substrate-telemetry-backend/tags?page=1&ordering=last_updated and https://hub.docker.com/r/parity/substrate-telemetry-frontend/tags?page=1&ordering=last_updated).
|
- Docker images for the frontend and backend will be pushed to the docker repo (see https://hub.docker.com/r/parity/substrate-telemetry-backend/tags?page=1&ordering=last_updated and https://hub.docker.com/r/parity/substrate-telemetry-frontend/tags?page=1&ordering=last_updated).
|
||||||
- A deployment to the staging environment will be performed using these images. Go to https://gitlab.parity.io/parity/substrate-telemetry/-/pipelines to inspect the progress of such deployments.
|
- A deployment to the staging environment will be performed using these images. Go to https://github.com/paritytech/substrate-telemetry/actions to inspect the progress of such deployments.
|
||||||
|
|
||||||
### Deployment to live
|
### Deployment to live
|
||||||
|
|
||||||
@@ -205,18 +205,19 @@ Once we're happy with things in staging, we can do a deployment to live as follo
|
|||||||
2. Tag the commit on `master` that you'd like to deploy with the form `v1.0-a1b2c3d`.
|
2. Tag the commit on `master` that you'd like to deploy with the form `v1.0-a1b2c3d`.
|
||||||
- The version number (`1.0` here) should just be incremented from whatever the latest version found using `git tag` is. We don't use semantic versioning or anything like that; this is just a dumb "increment version number" approach so that we can see clearly what we've deployed to live and in what order.
|
- The version number (`1.0` here) should just be incremented from whatever the latest version found using `git tag` is. We don't use semantic versioning or anything like that; this is just a dumb "increment version number" approach so that we can see clearly what we've deployed to live and in what order.
|
||||||
- The suffix is a short git commit hash (which can be generated with `git rev-parse --short HEAD`), just so that it's really easy to relate the built docker images back to the corresponding code.
|
- The suffix is a short git commit hash (which can be generated with `git rev-parse --short HEAD`), just so that it's really easy to relate the built docker images back to the corresponding code.
|
||||||
3. Pushing the tag (eg `git push origin v1.0-a1b2c3d`) will kick off the deployment process, which in this case will also lead to new docker images being built. You can view the progress at https://gitlab.parity.io/parity/substrate-telemetry/-/pipelines.
|
3. Pushing the tag (eg `git push origin v1.0-a1b2c3d`) will kick off the deployment process, which in this case will also lead to new docker images being built. You can view the progress at https://github.com/paritytech/substrate-telemetry/actions.
|
||||||
|
|
||||||
|
> [!WARNING]
|
||||||
|
> After the tag is pushed the deploy will be done to both environments (staging and production) automatically.
|
||||||
|
|
||||||
4. Once a deployment to staging has been successful, run whatever tests you need against the staging deployment to convince yourself that you're happy with it.
|
4. Once a deployment to staging has been successful, run whatever tests you need against the staging deployment to convince yourself that you're happy with it.
|
||||||
5. Visit the CI/CD pipelines page again (URl above) and click the "play" button on the "Deploy-production" stage to perform the deployment to live.
|
5. Confirm that things are working once the deployment has finished by visiting https://telemetry.polkadot.io/.
|
||||||
6. Confirm that things are working once the deployment has finished by visiting https://telemetry.polkadot.io/.
|
|
||||||
|
|
||||||
### Rolling back to a previous deployment
|
### Rolling back to a previous deployment
|
||||||
|
|
||||||
If something goes wrong running the above, we can roll back the deployment to live as follows.
|
If something goes wrong running the above, we can roll back the deployment to live as follows.
|
||||||
|
|
||||||
1. Decide what image tag you'd like to roll back to. Go to https://hub.docker.com/r/parity/substrate-telemetry-backend/tags?page=1&ordering=last_updated and have a look at the available tags (eg `v1.0-a1b2c3d`) to select one you'd like. You can cross reference this with the tags available using `git tag` in the repository to help see which tags correspond to which code changes.
|
1. Decide what image tag you'd like to roll back to. Push the tag to the commit you want to revert to.
|
||||||
2. Navigate to https://gitlab.parity.io/parity/substrate-telemetry/-/pipelines/new.
|
2. Navigate to https://github.com/paritytech/substrate-telemetry/actions and check that the pipeline is successful.
|
||||||
3. Add a variable called `FORCE_DEPLOY` with the value `true`.
|
3. Confirm that things are working once the deployment has finished by visiting https://telemetry.polkadot.io/.
|
||||||
4. Add a variable called `FORCE_DOCKER_TAG` with a value corresponding to the tag you want to deploy, eg `v1.0-a1b2c3d`. Images must exist already for this tag.
|
4. In case of issues contact devops team.
|
||||||
5. Hit 'Run Pipeline'. As above, a deployment to staging will be carried out, and if you're happy with that, you can hit the "play" button on the "Deploy-production" stage to perform the deployment to live.
|
|
||||||
6. Confirm that things are working once the deployment has finished by visiting https://telemetry.polkadot.io/.
|
|
||||||
Reference in new issue
Block a user