Improve lottery service #140
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
name: API CI | |
on: | |
push: | |
jobs: | |
buildAndTest: | |
if: "(github.ref != 'refs/heads/main' && !contains(github.event.head_commit.message, 'CI:'))" | |
name: 'Build & Test' | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
node-version: ['18'] # Add other versions if needed | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Configure AWS credentials | |
uses: aws-actions/configure-aws-credentials@v1 | |
with: | |
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
aws-region: us-east-1 | |
- name: Install Node.js ${{ matrix.node-version }} | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ matrix.node-version }} | |
- name: Restore Node.js dependencies | |
uses: actions/cache@v3 | |
with: | |
path: ./node_modules | |
key: ${{ runner.os }}-node-${{ hashFiles('**/yarn.lock') }} | |
restore-keys: | | |
${{ runner.os }}-node- | |
- name: Install Node.js dependencies | |
run: yarn install --frozen-lockfile | |
- name: Cache Node.js dependencies | |
uses: actions/cache/save@v3 | |
if: always() | |
with: | |
path: ./node_modules | |
key: ${{ runner.os }}-node-${{ hashFiles('**/yarn.lock') }} | |
- name: Start Hardhat RPC | |
run: | | |
yarn hardhat > /dev/null & | |
yarn hardhat-deploy | |
- name: Start Safe Transaction Service | |
run: | | |
docker compose --env-file=.env.example -f docker-compose.safe.yml up -d --remove-orphans | |
docker compose exec txs-web python manage.py insert_safe_master_copy --address "0xd916a690676e925Ac9Faf2d01869c13Fd9757ef2" | |
sudo chmod -R a+rwx ./docker/data | |
- name: Run Tests | |
env: | |
NODE_OPTIONS: --max-old-space-size=8192 | |
run: | | |
docker compose -f docker-compose.yml -f docker-compose.api.yml run \ | |
-e AWS_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_KEY_ID }} \ | |
-e AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_SECRET_ACCESS_KEY }} \ | |
-e NODE_OPTIONS='--max-old-space-size=8192' \ | |
-T api \ | |
yarn nx run api:test --verbose | |
# - name: SonarCloud Scan | |
# uses: SonarSource/sonarcloud-github-action@master | |
# env: | |
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
# SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} | |
# with: | |
# projectBaseDir: apps/api | |
bumpVersion: | |
name: 'Bump version' | |
runs-on: ubuntu-latest | |
if: github.ref == 'refs/heads/develop' | |
needs: buildAndTest | |
outputs: | |
newTag: ${{ steps.version-bump.outputs.newTag }} | |
steps: | |
- name: 'Checkout source code' | |
uses: 'actions/checkout@v2' | |
with: | |
ref: ${{ github.ref }} | |
- name: 'Automated Version Bump' | |
id: version-bump | |
uses: 'phips28/gh-action-bump-version@master' | |
with: | |
tag-prefix: 'v' | |
tag-suffix: '-api' | |
commit-message: 'CI: bumps version to {{version}}' | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
PACKAGEJSON_DIR: 'apps/api' | |
buildAndPushImage: | |
name: Build and Push docker image | |
runs-on: ubuntu-latest | |
if: github.ref == 'refs/heads/develop' | |
needs: bumpVersion | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v2 | |
- name: Install Node.js ${{ matrix.node-version }} | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ matrix.node-version }} | |
- name: Configure AWS credentials | |
uses: aws-actions/configure-aws-credentials@v1 | |
with: | |
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
aws-region: eu-west-3 | |
- name: Login to ECR | |
uses: docker/login-action@v1 | |
with: | |
registry: 275440070213.dkr.ecr.eu-west-3.amazonaws.com | |
- name: Docker meta | |
id: meta | |
uses: docker/metadata-action@v3 | |
with: | |
images: | | |
275440070213.dkr.ecr.eu-west-3.amazonaws.com/api | |
tags: | | |
type=ref,event=branch | |
type=sha | |
type=semver,pattern={{version}},value=${{needs.bumpVersion.outputs.newTag}} | |
type=semver,pattern={{major}}.{{minor}},value=${{needs.bumpVersion.outputs.newTag}} | |
type=semver,pattern={{raw}},value=${{needs.bumpVersion.outputs.newTag}} | |
- name: Set correct version | |
run: npm version ${{needs.bumpVersion.outputs.newTag}} --allow-same-version=true --git-tag-version=false | |
working-directory: ./apps/api | |
- name: Build | |
uses: docker/build-push-action@v2 | |
with: | |
context: . | |
file: apps/api/Dockerfile | |
push: true | |
tags: ${{ steps.meta.outputs.tags }} | |
labels: ${{ steps.meta.outputs.labels }} | |
buildAndPushHotfixImage: | |
name: Build and Push hotfix docker image | |
runs-on: ubuntu-latest | |
if: startsWith(github.ref,'refs/heads/hotfix/') | |
needs: buildAndTest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v2 | |
- name: Install Node.js ${{ matrix.node-version }} | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ matrix.node-version }} | |
- name: Configure AWS credentials | |
uses: aws-actions/configure-aws-credentials@v1 | |
with: | |
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
aws-region: eu-west-3 | |
- name: Login to ECR | |
uses: docker/login-action@v1 | |
with: | |
registry: 275440070213.dkr.ecr.eu-west-3.amazonaws.com | |
- name: Docker meta | |
id: meta | |
uses: docker/metadata-action@v3 | |
with: | |
images: | | |
275440070213.dkr.ecr.eu-west-3.amazonaws.com/api | |
tags: | | |
type=ref,event=branch | |
type=sha | |
- name: Build | |
uses: docker/build-push-action@v2 | |
with: | |
context: . | |
file: apps/api/Dockerfile | |
push: true | |
tags: ${{ steps.meta.outputs.tags }} | |
labels: ${{ steps.meta.outputs.labels }} | |
autodeploy: | |
name: 'Auto deploy' | |
runs-on: ubuntu-latest | |
if: github.ref == 'refs/heads/develop' | |
needs: [buildAndPushImage, bumpVersion] | |
steps: | |
- name: Install Node.js ${{ matrix.node-version }} | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ matrix.node-version }} | |
- name: Install deploy-scripts | |
run: npm install -g thxprotocol/deploy-scripts | |
- name: Configure AWS credentials | |
uses: aws-actions/configure-aws-credentials@v1 | |
with: | |
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
aws-region: eu-west-3 | |
- name: Deploy-script | |
run: thx-deploy ApiDev sha-$(echo ${{github.sha}} | cut -c1-7) | |
discord: | |
name: Update Discord | |
runs-on: ubuntu-latest | |
if: github.ref == 'refs/heads/develop' | |
needs: [autodeploy, bumpVersion] | |
steps: | |
- name: Send message | |
env: | |
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK_DEV }} | |
uses: Ilshidur/action-discord@master | |
with: | |
args: "${{ needs.autodeploy.result == 'success' && '✅' || '⛔' }} Released API `${{ needs.bumpVersion.outputs.newTag }}`" |