diff --git a/.github/workflows/demo.yml b/.github/workflows/demo.yml index 73711c54e..60278a1e6 100644 --- a/.github/workflows/demo.yml +++ b/.github/workflows/demo.yml @@ -3,42 +3,32 @@ name: Deploy Demo on: workflow_dispatch: inputs: - environment: - description: "Deployment environment - test --> vault secrets" - required: true - type: choice - options: ["test","tools"] - default: "test" + tag: + description: "Image tag to deploy" + required: false + type: string + default: "uat" + workflow_call: + inputs: + tag: + description: "Image tag to deploy" + required: false + type: string + default: "uat" - -concurrency: - group: ${{ github.workflow }} - cancel-in-progress: true - jobs: - uninstall-demo: - name: Uninstall (demo) - environment: ${{inputs.environment}} - runs-on: ubuntu-22.04 - steps: - - name: uninstall - run: | - oc login --token=${{ secrets.oc_token }} --server=${{ secrets.oc_server }} - oc project ${{ secrets.OC_NAMESPACE }} # Safeguard! - helm uninstall onroutebc-demo || true deploy-demo: - name: Deploys (demo) + name: Deploys (DEMO) uses: ./.github/workflows/deploy.yml - needs: uninstall-demo secrets: inherit with: autoscaling: false - environment: ${{inputs.environment}} - tag: "test" + environment: demo + tag: ${{inputs.tag}} release: "demo" params: | --set-string global.license='c28f0c' \ --set-string global.zone='test' \ --set-string global.vault.role='nonprod' \ - --set-string global.vault.zone='staging' \ - --set-string global.pr_num='${{ needs.vars.outputs.pr }}' \ + --set-string global.vault.zone='demo' \ + --set-string global.pr_num='${{ inputs.tag }}' \ diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml new file mode 100644 index 000000000..4f50802b3 --- /dev/null +++ b/.github/workflows/dev.yml @@ -0,0 +1,40 @@ +--- +name: Deploy Dev + +on: + workflow_dispatch: + inputs: + tag: + description: "Image tag to deploy" + required: false + type: string + default: "latest" + workflow_call: + inputs: + tag: + description: "Image tag to deploy" + required: false + type: string + default: "latest" +jobs: + deploy-dev: + name: Deploys (DEV) + uses: ./.github/workflows/deploy.yml + secrets: inherit + with: + autoscaling: false + environment: dev + release: ${{inputs.tag}} + tag: ${{ inputs.tag }} + triggers: '' #omit=always; + params: | + --set-string global.license='c28f0c' \ + --set-string global.zone='dev' \ + --set-string global.vault.role='nonprod' \ + --set-string global.vault.zone='dev' \ + --set-string global.pr_num='${{ inputs.tag }}' \ + --set-json dops.containers[0].resources='{"limits": {"cpu": "1000m", "memory": "2000Mi"}, "requests": {"cpu": "25m", "memory": "50Mi"}}' \ + --set-json frontend.containers[0].resources='{"limits": {"cpu": "75m", "memory": "150Mi"}, "requests": {"cpu": "25m", "memory": "50Mi"}}' \ + --set-json scheduler.containers[0].resources='{"limits": {"cpu": "75m", "memory": "150Mi"}, "requests": {"cpu": "25m", "memory": "50Mi"}}' \ + --set-json policy.containers[0].resources='{"limits": {"cpu": "75m", "memory": "150Mi"}, "requests": {"cpu": "25m", "memory": "50Mi"}}' \ + --set-json vehicles.containers[0].resources='{"limits": {"cpu": "300m", "memory": "500Mi"}, "requests": {"cpu": "200m", "memory": "400Mi"}}' \ diff --git a/.github/workflows/merge.yml b/.github/workflows/merge.yml index 71badf203..611023eb3 100644 --- a/.github/workflows/merge.yml +++ b/.github/workflows/merge.yml @@ -11,10 +11,11 @@ on: - '!.github/workflows/merge.yml' workflow_dispatch: inputs: - pr_no: - description: "PR-numbered container set to deploy" - type: number - required: true + pr: + description: "PR num of image to deploy" + required: false + type: string + concurrency: group: ${{ github.workflow }} @@ -29,27 +30,21 @@ jobs: timeout-minutes: 1 steps: # Get PR number for squash merges to main + - name: Get PR Number From Event + if: ${{ github.event_name == 'push' }} + id: pr_no + uses: bcgov-nr/action-get-pr@v0.0.1 - name: PR Number id: pr - uses: bcgov-nr/action-get-pr@v0.0.1 + run: echo pr=${{ steps.pr_no.outputs.pr || inputs.pr}} >> $GITHUB_OUTPUT deploys-test: - name: Deploys (test) + name: Deploys (Test) needs: [vars] - uses: ./.github/workflows/deploy.yml + uses: ./.github/workflows/test.yml secrets: inherit with: - autoscaling: true - environment: test - release: test tag: ${{ needs.vars.outputs.pr }} - params: | - --set-string global.license='c28f0c' \ - --set-string global.zone='test' \ - --set-string global.vault.role='nonprod' \ - --set-string global.vault.zone='test' \ - --set-string global.pr_num='${{ needs.vars.outputs.pr }}' \ - promote-images-test: name: Promote Images - Test @@ -69,57 +64,14 @@ jobs: target: ${{ needs.vars.outputs.pr }} tags: test #Promote images AFTER successful deploy - deploys-prod: - name: Deploys (prod) + release-please: + name: Release-Please needs: [promote-images-test, vars] - uses: ./.github/workflows/deploy.yml - secrets: inherit - with: - autoscaling: true - environment: prod - tag: ${{ needs.vars.outputs.pr }} - release: prod - params: | - --set-string global.license='c28f0c' \ - --set-string global.zone='prod' \ - --set-string global.vault.role='prod' \ - --set-string global.vault.zone='prod' \ - --set-string global.pr_num='${{ needs.vars.outputs.pr }}' \ - - promote-images-prod: - name: Promote Images - Prod - needs: [deploys-prod, vars] runs-on: ubuntu-22.04 - permissions: - packages: write - strategy: - matrix: - package: [dops, vehicles, frontend, scheduler, policy] timeout-minutes: 2 steps: - - uses: shrink/actions-docker-registry-tag@v4 + - uses: google-github-actions/release-please-action@v3 with: - registry: ghcr.io - repository: ${{ github.repository }}/${{ matrix.package }} - target: ${{ needs.vars.outputs.pr }} - tags: prod #Promote images AFTER successful deploy - - create-release: - name: Create release - runs-on: ubuntu-22.04 - needs: [deploys-prod, vars] - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - steps: - - name: Generate release tag - id: generate_release_tag - shell: bash - run: | - echo next_release_tag=$(expr $(echo $(curl https://api.github.com/repos/bcgov/onroutebc/releases/latest | grep tag_name | cut -d '-' -f3 - | cut -d '"' -f1 -) + 1)) >> $GITHUB_OUTPUT - - - name: Create Release - run: | - gh release create "${{ github.event.repository.name }}-release-${{ steps.generate_release_tag.outputs.next_release_tag }}" \ - --repo=${{ github.repository }} \ - --title="${{ github.event.repository.name }}-release-${{ steps.generate_release_tag.outputs.next_release_tag }}" \ - --generate-notes + release-type: simple + package-name: release-please-action + changelog-types: '[{"type":"ORV2","section":"Features","hidden":false},{"type":"feat","section":"Features","hidden":false},{"type":"fix","section":"Bug Fixes","hidden":false},{"type":"build","section":"Miscellaneous","hidden":false},{"type":"chore","section":"Miscellaneous","hidden":false},{"type":"ci","section":"Miscellaneous","hidden":false},{"type":"docs","section":"Miscellaneous","hidden":false},{"type":"perf","section":"Miscellaneous","hidden":false},{"type":"refactor","section":"Miscellaneous","hidden":false},{"type":"revert","section":"Miscellaneous","hidden":false},{"type":"style","section":"Miscellaneous","hidden":false},{"type":"test","section":"Miscellaneous","hidden":false}]' diff --git a/.github/workflows/pr-open.yml b/.github/workflows/pr-open.yml index b7961312d..ea34523c5 100644 --- a/.github/workflows/pr-open.yml +++ b/.github/workflows/pr-open.yml @@ -74,26 +74,10 @@ jobs: triggers: '${{ matrix.package }}/' #omit to build everything # https://github.com/bcgov-nr/action-deployer-openshift - deploys: - name: Deploys + deploys-dev: + name: Deploys (Dev) needs: [builds, vars] - uses: ./.github/workflows/deploy.yml + uses: ./.github/workflows/dev.yml secrets: inherit with: - autoscaling: false - repository: ${{ github.event.repository.name }} - environment: dev - release: ${{ needs.vars.outputs.pr }} tag: ${{ needs.vars.outputs.pr }} - triggers: '' #omit=always; - params: | - --set-string global.license='c28f0c' \ - --set-string global.zone='dev' \ - --set-string global.vault.role='nonprod' \ - --set-string global.vault.zone='dev' \ - --set-string global.pr_num='${{ needs.vars.outputs.pr }}' \ - --set-json dops.containers[0].resources='{"limits": {"cpu": "1000m", "memory": "2000Mi"}, "requests": {"cpu": "25m", "memory": "50Mi"}}' \ - --set-json frontend.containers[0].resources='{"limits": {"cpu": "75m", "memory": "150Mi"}, "requests": {"cpu": "25m", "memory": "50Mi"}}' \ - --set-json scheduler.containers[0].resources='{"limits": {"cpu": "75m", "memory": "150Mi"}, "requests": {"cpu": "25m", "memory": "50Mi"}}' \ - --set-json policy.containers[0].resources='{"limits": {"cpu": "75m", "memory": "150Mi"}, "requests": {"cpu": "25m", "memory": "50Mi"}}' \ - --set-json vehicles.containers[0].resources='{"limits": {"cpu": "300m", "memory": "500Mi"}, "requests": {"cpu": "200m", "memory": "400Mi"}}' \ diff --git a/.github/workflows/prod.yml b/.github/workflows/prod.yml new file mode 100644 index 000000000..f9da84bf7 --- /dev/null +++ b/.github/workflows/prod.yml @@ -0,0 +1,34 @@ +name: Deploy Prod + +on: + workflow_dispatch: + inputs: + tag: + description: "Image tag to deploy" + required: false + type: string + default: "prod" + workflow_call: + inputs: + tag: + description: "Image tag to deploy" + required: false + type: string + default: "prod" + +jobs: + deploys-prod: + name: Deploys (PROD) + uses: ./.github/workflows/deploy.yml + secrets: inherit + with: + autoscaling: true + environment: prod + tag: ${{ inputs.tag }} + release: prod + params: | + --set-string global.license='c28f0c' \ + --set-string global.zone='prod' \ + --set-string global.vault.role='prod' \ + --set-string global.vault.zone='prod' \ + --set-string global.pr_num='${{ inputs.tag }}' \ diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..01b4dd1b2 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,40 @@ +--- +name: Release + +on: + release: + types: [published] + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }} + cancel-in-progress: true + +jobs: + vars: + name: Set Variables + outputs: + release-name: ${{ steps.release-name.outputs.release-name }} + runs-on: ubuntu-22.04 + timeout-minutes: 1 + steps: + - name: Release Name + id: release-name + run: | + echo release-name=$(curl https://api.github.com/repos/bcgov/onroutebc/releases/latest | jq -r .tag_name) >> $GITHUB_OUTPUT + + deploys-uat: + name: Deploys (Uat) + needs: [vars] + uses: ./.github/workflows/uat.yml + secrets: inherit + with: + tag: ${{ needs.vars.outputs.release-name }} + + deploys-prod: + name: Deploys (Prod) + needs: [deploys-uat, vars] + uses: ./.github/workflows/prod.yml + secrets: inherit + with: + tag: ${{ needs.vars.outputs.release-name }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 000000000..c9e5732fb --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,35 @@ +--- +name: Deploy Test + +on: + workflow_dispatch: + inputs: + tag: + description: "Image tag to deploy" + required: false + type: string + default: "test" + workflow_call: + inputs: + tag: + description: "Image tag to deploy" + required: false + type: string + default: "test" + +jobs: + deploy-test: + name: Deploys (TEST) + uses: ./.github/workflows/deploy.yml + secrets: inherit + with: + autoscaling: true + environment: test + release: test + tag: ${{ inputs.tag }} + params: | + --set-string global.license='c28f0c' \ + --set-string global.zone='test' \ + --set-string global.vault.role='nonprod' \ + --set-string global.vault.zone='test' \ + --set-string global.pr_num='${{ inputs.tag }}' \ diff --git a/.github/workflows/uat.yml b/.github/workflows/uat.yml index 7f4124713..84c7e8973 100644 --- a/.github/workflows/uat.yml +++ b/.github/workflows/uat.yml @@ -1,44 +1,35 @@ +--- name: Deploy UAT on: workflow_dispatch: inputs: - environment: - description: "Deployment environment - test --> vault secrets" - required: true - type: choice - options: ["test","tools"] + tag: + description: "Image tag to deploy" + required: false + type: string + default: "test" + workflow_call: + inputs: + tag: + description: "Image tag to deploy" + required: false + type: string default: "test" - -concurrency: - group: ${{ github.workflow }} - cancel-in-progress: true - jobs: - uninstall-uat: - name: Uninstall (uat) - environment: ${{inputs.environment}} - runs-on: ubuntu-22.04 - steps: - - name: uninstall - run: | - oc login --token=${{ secrets.oc_token }} --server=${{ secrets.oc_server }} - oc project ${{ secrets.OC_NAMESPACE }} # Safeguard! - helm uninstall onroutebc-uat || true deploy-uat: name: Deploys (UAT) uses: ./.github/workflows/deploy.yml - needs: uninstall-uat secrets: inherit with: autoscaling: true - environment: ${{inputs.environment}} - tag: "test" - release: "uat" + environment: uat + tag: ${{inputs.tag}} + release: uat params: | --set-string global.license='c28f0c' \ --set-string global.zone='test' \ --set-string global.vault.role='nonprod' \ --set-string global.vault.zone='uat' \ - --set-string global.pr_num='${{ needs.vars.outputs.pr }}' \ + --set-string global.pr_num='${{ inputs.tag }}' \ diff --git a/.gitignore b/.gitignore index 3d005313e..60755bffc 100644 --- a/.gitignore +++ b/.gitignore @@ -119,3 +119,4 @@ Chart.lock #Loadtest Results loadtests/results +loadtests/*/results