Browse Source

fix: add dev release workflow for scheduler

Karol Sójko 3 years ago
parent
commit
24a4cc79ae

+ 151 - 0
.github/workflows/scheduler.release.dev.yml

@@ -0,0 +1,151 @@
+name: Scheduler Server Dev
+
+concurrency:
+  group: dev_environment
+  cancel-in-progress: true
+
+on:
+  push:
+    tags:
+      - '@standardnotes/scheduler-server@[0-9]*.[0-9]*.[0-9]*-alpha.[0-9]*'
+      - '@standardnotes/scheduler-server@[0-9]*.[0-9]*.[0-9]*-beta.[0-9]*'
+  workflow_dispatch:
+
+jobs:
+  test:
+    defaults:
+      run:
+        working-directory: packages/scheduler
+    runs-on: ubuntu-latest
+
+    steps:
+    - uses: actions/checkout@v2
+    - uses: actions/setup-node@v1
+      with:
+        node-version: '16.x'
+    - run: yarn install --pure-lockfile
+    - run: yarn test
+
+  publish-aws-ecr:
+    needs: test
+
+    defaults:
+      run:
+        working-directory: packages/scheduler
+    runs-on: ubuntu-latest
+
+    steps:
+    - uses: actions/checkout@v2
+    - run: cp .env.sample .env
+    - 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: Login to Amazon ECR
+      id: login-ecr
+      uses: aws-actions/amazon-ecr-login@v1
+    - name: Build, tag, and push image to Amazon ECR
+      id: build-image
+      env:
+        ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
+        ECR_REPOSITORY: scheduler-worker
+        IMAGE_TAG: ${{ github.sha }}
+      run: |
+        docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
+        docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
+        docker tag $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG $ECR_REGISTRY/$ECR_REPOSITORY:dev
+        docker push $ECR_REGISTRY/$ECR_REPOSITORY:dev
+
+  publish-docker-hub:
+    needs: test
+
+    defaults:
+      run:
+        working-directory: packages/scheduler
+    runs-on: ubuntu-latest
+
+    steps:
+    - uses: actions/checkout@v2
+    - run: cp .env.sample .env
+    - name: Publish to Registry
+      env:
+        DOCKER_BUILDKIT: 1
+        COMPOSE_DOCKER_CLI_BUILD: 1
+      uses: elgohr/Publish-Docker-Github-Action@master
+      with:
+        name: standardnotes/scheduler
+        username: ${{ secrets.DOCKER_USERNAME }}
+        password: ${{ secrets.DOCKER_PASSWORD }}
+        tags: "dev,${{ github.sha }}"
+
+  deploy-worker:
+    needs: publish-aws-ecr
+
+    defaults:
+      run:
+        working-directory: packages/scheduler
+    runs-on: ubuntu-latest
+
+    steps:
+    - 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: Download task definition
+      run: |
+        aws ecs describe-task-definition --task-definition scheduler-worker-dev --query taskDefinition > task-definition.json
+    - name: Fill in the new version in the Amazon ECS task definition
+      run: |
+        jq '(.containerDefinitions[] | select(.name=="scheduler-worker-dev") | .environment[] | select(.name=="VERSION")).value = "${{ github.sha }}"' task-definition.json > tmp.json && mv tmp.json task-definition.json
+    - name: Fill in the new image ID in the Amazon ECS task definition
+      id: task-def
+      uses: aws-actions/amazon-ecs-render-task-definition@v1
+      with:
+        task-definition: task-definition.json
+        container-name: scheduler-worker-dev
+        image: ${{ secrets.AWS_ECR_REGISTRY }}/scheduler-worker:${{ github.sha }}
+    - name: Deploy Amazon ECS task definition
+      uses: aws-actions/amazon-ecs-deploy-task-definition@v1
+      with:
+        task-definition: ${{ steps.task-def.outputs.task-definition }}
+        service: scheduler-worker-dev
+        cluster: dev
+        wait-for-service-stability: true
+
+  newrelic:
+    needs: [ deploy-worker ]
+
+    defaults:
+      run:
+        working-directory: packages/scheduler
+    runs-on: ubuntu-latest
+
+    steps:
+      - name: Create New Relic deployment marker for Worker
+        uses: newrelic/deployment-marker-action@v1
+        with:
+          accountId: ${{ secrets.NEW_RELIC_ACCOUNT_ID }}
+          apiKey: ${{ secrets.NEW_RELIC_API_KEY }}
+          applicationId: ${{ secrets.NEW_RELIC_APPLICATION_ID_WORKER_DEV }}
+          revision: "${{ github.sha }}"
+          description: "Automated Deployment via Github Actions"
+          user: "${{ github.actor }}"
+
+  notify_discord:
+    needs: [ deploy-worker ]
+
+    defaults:
+      run:
+        working-directory: packages/scheduler
+    runs-on: ubuntu-latest
+
+    steps:
+    - name: Run Discord Webhook
+      uses: johnnyhuy/actions-discord-git-webhook@main
+      with:
+        webhook_url: ${{ secrets.DISCORD_WEBHOOK_URL }}
+

+ 43 - 0
.github/workflows/version-bump.yml

@@ -0,0 +1,43 @@
+name: Version Bump
+
+on:
+  push:
+    branches: [ develop, main ]
+
+jobs:
+  bump:
+    if: contains(github.event.head_commit.message, 'chore(release)') == false
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@v2
+        with:
+          token: ${{ secrets.CI_PAT_TOKEN }}
+          fetch-depth: 0
+
+      - name: Setup git config
+        run: |
+          git config --global user.name "standardci"
+          git config --global user.email "ci@standardnotes.com"
+
+      - name: Import GPG key
+        uses: crazy-max/ghaction-import-gpg@v4
+        with:
+          gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
+          passphrase: ${{ secrets.PASSPHRASE }}
+          git_user_signingkey: true
+          git_commit_gpgsign: true
+
+      - uses: actions/setup-node@v1
+        with:
+          node-version: '16.x'
+
+      - run: yarn install --pure-lockfile
+
+      - name: Bump Prod Version
+        if: ${{ github.ref == 'refs/heads/main' }}
+        run: yarn release:prod
+
+      - name: Bump Beta Version
+        if: ${{ github.ref == 'refs/heads/develop' }}
+        run: yarn release:beta

+ 1 - 1
packages/scheduler/bin/verify.ts

@@ -5,11 +5,11 @@ import 'newrelic'
 import { Logger } from 'winston'
 import * as dayjs from 'dayjs'
 import * as utc from 'dayjs/plugin/utc'
+import { TimerInterface } from '@standardnotes/time'
 
 import { ContainerConfigLoader } from '../src/Bootstrap/Container'
 import TYPES from '../src/Bootstrap/Types'
 import { Env } from '../src/Bootstrap/Env'
-import { TimerInterface } from '@standardnotes/time'
 import { VerifyPredicates } from '../src/Domain/UseCase/VerifyPredicates/VerifyPredicates'
 
 const verifyJobs = async (timestamp: number, verifyPredicates: VerifyPredicates): Promise<void> => {

+ 3 - 3
packages/scheduler/bin/worker.ts

@@ -3,13 +3,13 @@ import 'reflect-metadata'
 import 'newrelic'
 
 import { Logger } from 'winston'
+import { DomainEventSubscriberFactoryInterface } from '@standardnotes/domain-events'
+import * as dayjs from 'dayjs'
+import * as utc from 'dayjs/plugin/utc'
 
 import { ContainerConfigLoader } from '../src/Bootstrap/Container'
 import TYPES from '../src/Bootstrap/Types'
 import { Env } from '../src/Bootstrap/Env'
-import { DomainEventSubscriberFactoryInterface } from '@standardnotes/domain-events'
-import * as dayjs from 'dayjs'
-import * as utc from 'dayjs/plugin/utc'
 
 const container = new ContainerConfigLoader()
 void container.load().then((container) => {