-
Notifications
You must be signed in to change notification settings - Fork 51
171 lines (157 loc) · 5.8 KB
/
acceptance_tests_reusable.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
name: Acceptance Tests – Reusable
on:
workflow_call:
inputs:
self_hosted_image:
type: string
default: ghcr.io/cloudfoundry/app-autoscaler-release-tools:main
suites:
required: false
type: string
default: "[ 'API', 'APP', 'Broker' ]"
deployment_name:
required: true
type: string
deploy_apps:
required: false
type: boolean
ops_files:
required: false
type: string
secrets:
bbl_ssh_key:
required: true
defaults:
run:
shell: bash
env:
PR_NUMBER: "${{ github.event.pull_request.number }}"
DEPLOYMENT_NAME: "${{ inputs.deployment_name }}"
BBL_STATE_PATH: "${{ github.workspace }}/bbl/bbl-state"
GINKGO_OPTS: "--fail-fast"
NODES: 4
AUTOSCALER_DIR: "${{ github.workspace }}/app-autoscaler-release"
CI_DIR: "${{ github.workspace }}/app-autoscaler-release/ci"
CHECK_NAME: "${{ github.workflow }}_Check"
CPU_UPPER_THRESHOLD: 200
jobs:
create_pending_check:
# We require jobs for Acceptance Tests in this workflow to trigger on relevant events and labels.
# Verifcation job must runs always.
# Adding a non related label to the PR does not require acceptance tests to run, however github will rerun the workflow
# and skip all jobs. In such case verification reuses previous check result or exits with failure if a check wasnt created.
if: |
( ( github.event.action == 'opened' || github.event.action == 'synchronize' )
&& ( contains(github.event.pull_request.labels.*.name, 'allow-acceptance-tests') || contains(github.event.pull_request.labels.*.name, 'dependencies') )
) ||
( ( github.event.action == 'labeled' )
&& ( github.event.label.name == 'allow-acceptance-tests' || github.event.label.name == 'dependencies' )
)
name: "Create pending check"
runs-on: ubuntu-latest
permissions:
# needed according to https://docs.github.com/en/rest/overview/permissions-required-for-github-apps#permission-on-checks
# but supposed to be provided via the defaults, see:
# https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token
checks: write
steps:
- name: Checkout
uses: actions/checkout@v4
with:
path: app-autoscaler-release
- name: Create pending check
uses: ./app-autoscaler-release/.github/actions/pending-check
with:
pending_check: create
deploy_autoscaler:
needs: [ create_pending_check ]
name: Deploy for ${{ github.workflow }}
runs-on: ubuntu-latest
container:
image: "${{ inputs.self_hosted_image }}"
steps:
- name: Checkout
uses: actions/checkout@v4
with:
path: app-autoscaler-release
- name: Setup environment for deployment
uses: ./app-autoscaler-release/.github/actions/setup-environment
with:
ssh-key: ${{ secrets.bbl_ssh_key}}
- name: Deploy autoscaler
shell: bash
env:
OPS_FILES: ${{ inputs.ops_files }}
run: make --directory="${AUTOSCALER_DIR}" deploy-autoscaler
- name: Deploy Apps
shell: bash
run: make --directory="${AUTOSCALER_DIR}" deploy-apps
if: ${{ inputs.deploy_apps }}
acceptance_tests:
needs: [ deploy_autoscaler ]
strategy:
matrix:
suite: "${{ fromJSON(inputs.suites) }}"
runs-on: ubuntu-latest
container:
image: "${{ inputs.self_hosted_image }}"
continue-on-error: true
name: "[ ${{ matrix.suite }} ] ${{ github.workflow }}"
steps:
- name: Checkout
uses: actions/checkout@v4
with:
path: app-autoscaler-release
- name: Setup environment for acceptance tests
uses: ./app-autoscaler-release/.github/actions/setup-environment
with:
ssh-key: ${{ secrets.bbl_ssh_key}}
- name: Run acceptance test - ${{ matrix.suite }}
env:
MATRIX_SUITE: ${{ matrix.suite }}
shell: bash
run: |
#! /usr/bin/env bash
set -eu -o pipefail
make --directory="${AUTOSCALER_DIR}/src/acceptance/assets/app/go_app" generate-fakes
make --directory="${AUTOSCALER_DIR}/src/autoscaler" generate-fakes
make --directory="${AUTOSCALER_DIR}" acceptance-tests SUITES="${MATRIX_SUITE,,}"
acceptance_tests_verify:
name: "${{ github.workflow }} Result"
needs: [ deploy_autoscaler, acceptance_tests ]
if: ${{ always() }}
runs-on: ubuntu-latest
permissions:
# needed according to https://docs.github.com/en/rest/overview/permissions-required-for-github-apps#permission-on-checks
# but supposed to be provided via the defaults, see:
# https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token
checks: write
steps:
- name: Checkout
uses: actions/checkout@v4
with:
path: app-autoscaler-release
- name: Verify jobs execution
uses: ./app-autoscaler-release/.github/actions/pending-check
with:
pending_check: verify
check_filter: ".*${{ github.workflow }}$"
deployment_cleanup:
needs: [ acceptance_tests_verify ]
if: "!contains(github.event.pull_request.labels.*.name, 'skip-cleanup')"
name: Deployment cleanup
runs-on: ubuntu-latest
container:
image: "${{ inputs.self_hosted_image }}"
steps:
- name: Checkout
uses: actions/checkout@v4
with:
path: app-autoscaler-release
- name: Setup environment for deployment cleanup
uses: ./app-autoscaler-release/.github/actions/setup-environment
with:
ssh-key: ${{ secrets.bbl_ssh_key}}
- name: Perform deployment cleanup
run: |
make --directory="${AUTOSCALER_DIR}" deploy-cleanup