@@ -70,11 +70,19 @@ jobs:
7070            task : ' ci-compile' 
7171            python-version-short : ' 3.8' 
7272            python-version : ' 3.8.10' 
73+           - name : ' Lint Checks (black, flake8, etc.)' 
74+             task : ' ci-checks' 
75+             python-version-short : ' 3.9' 
76+             python-version : ' 3.9.14' 
77+           - name : ' Compile (pip deps, pylint, etc.)' 
78+             task : ' ci-compile' 
79+             python-version-short : ' 3.9' 
80+             python-version : ' 3.9.14' 
7381
7482    env :
7583      TASK : ' ${{ matrix.task }}' 
7684      COLUMNS : ' 120' 
77-       PYLINT_CONCURRENCY : ' 4 ' 
85+       PYLINT_CONCURRENCY : ' 6 ' 
7886    steps :
7987      - name : Checkout repository 
8088        uses : actions/checkout@v2 
@@ -136,6 +144,160 @@ jobs:
136144        run : | 
137145          ./scripts/ci/run-nightly-make-task-if-exists.sh "${TASK}" 
138146
147+    self-check :
148+     needs : pre_job 
149+     name : ' ${{ matrix.name }} - Python ${{ matrix.python-version-short }}' 
150+     runs-on : ubuntu-20.04 
151+     strategy :
152+       fail-fast : false 
153+       matrix :
154+         include :
155+          #  TODO: Check if we want to fix the errors on Py 3.6 to have it tested as well
156+          # - name: 'Self-check on Python 3.6'
157+          #    python-version-short: '3.6'
158+          #    python-version: '3.6.13'
159+           - name : ' Self-check on Python 3.8' 
160+             python-version-short : ' 3.8' 
161+             python-version : ' 3.8.14' 
162+     services :
163+       mongo :
164+         image : mongo:4.4 
165+         ports :
166+           - 27017:27017 
167+ 
168+       rabbitmq :
169+         image : rabbitmq:3.8-management 
170+         options : >- 
171+           --name rabbitmq 
172+          ports :
173+             - 5671:5671/tcp    #  AMQP SSL port
174+             - 5672:5672/tcp    #  AMQP standard port
175+             - 15672:15672/tcp  #  Management: HTTP, CLI
176+ 
177+     env :
178+       #  CI st2.conf (with ST2_CI_USER user instead of stanley)
179+       ST2_CONF : ' conf/st2.ci.conf' 
180+ 
181+       #  Name of the user who is running the CI (on GitHub Actions this is 'runner')
182+       ST2_CI_USER : ' runner' 
183+ 
184+       #  GitHub is juggling how to set vars for multiple shells. Protect our PATH assumptions.
185+       PATH : /home/runner/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
186+ 
187+       #  Space separated list of tests to be skipped if the self-check is running in GitHub Actions
188+       TESTS_TO_SKIP : " tests.test_quickstart_rules tests.test_run_pack_tests_tool" 
189+     steps :
190+       - name : Checkout repository 
191+         uses : actions/checkout@v2 
192+       - name : Custom Environment Setup 
193+         run : | 
194+           ./scripts/github/setup-environment.sh 
195+        - name : ' Set up Python (${{ matrix.python-version }})' 
196+         uses : actions/setup-python@v2 
197+         with :
198+           python-version : ' ${{ matrix.python-version }}' 
199+       - name : Cache Python Dependencies 
200+         uses : actions/cache@v2 
201+         with :
202+           path : | 
203+             ~/.cache/pip 
204+             virtualenv 
205+             ~/virtualenv 
206+            #  TODO: maybe make the virtualenv a partial cache to exclude st2*?
207+           #  !virtualenv/lib/python*/site-packages/st2*
208+           #  !virtualenv/bin/st2*
209+           key : ${{ runner.os }}-v3-python-${{ matrix.python-version }}-${{ hashFiles('requirements.txt', 'test-requirements.txt') }} 
210+           restore-keys : | 
211+             ${{ runner.os }}-python-${{ matrix.python }}- 
212+        - name : Cache APT Dependencies 
213+         id : cache-apt-deps 
214+         uses : actions/cache@v2 
215+         with :
216+           path : | 
217+             ~/apt_cache 
218+            key : ${{ runner.os }}-apt-v5-${{ hashFiles('scripts/github/apt-packages.txt') }} 
219+           restore-keys : | 
220+             ${{ runner.os }}-apt-v5- 
221+        - name : Install APT Depedencies 
222+         env :
223+           CACHE_HIT : ${{steps.cache-apt-deps.outputs.cache-hit}} 
224+         run : | 
225+           cat /etc/environment 
226+           # install dev dependencies for Python YAML and LDAP packages 
227+           # https://github.com/StackStorm/st2-auth-ldap 
228+           ./scripts/github/install-apt-packages-use-cache.sh 
229+        - name : Install virtualenv 
230+         run : | 
231+           ./scripts/github/install-virtualenv.sh 
232+        - name : Install requirements 
233+         run : | 
234+           ./scripts/ci/install-requirements.sh 
235+        - name : Run Redis Service Container 
236+         timeout-minutes : 2 
237+         run : | 
238+           docker run --rm --detach -p 127.0.0.1:6379:6379/tcp --name redis redis:latest 
239+           until [ "$(docker inspect -f {{.State.Running}} redis)" == "true" ]; do sleep 0.1; done 
240+        - name : Setup Tests 
241+         run : | 
242+           # prep a ci-specific dev conf file that uses runner instead of stanley 
243+           # this user is the username of the user in GitHub actions, used for SSH, etc during 
244+           # integration tests (important) 
245+           cp conf/st2.dev.conf "${ST2_CONF}" 
246+           sed -i -e "s,/home/vagrant/.ssh/stanley_rsa,/home/stanley/.ssh/stanley_rsa," "${ST2_CONF}" 
247+ 
248+           sudo -E ./scripts/ci/add-itest-user-key.sh 
249+        - name : Permissions Workaround 
250+         run : | 
251+           sudo ST2_CI_REPO_PATH="${ST2_CI_REPO_PATH}" scripts/ci/permissions-workaround.sh 
252+        - name : Reconfigure RabbitMQ 
253+         #  bitnami image allows (see bitnami/rabbitmq readme):
254+         #  Here we're copying a rabbitmq.config file which won't do anything.
255+         #  We need to switch to custom.conf or advanced.config.
256+         timeout-minutes : 2   #  may die if rabbitmq fails to start
257+         run : | 
258+           ./scripts/github/configure-rabbitmq.sh 
259+        - name : Print versions 
260+         run : | 
261+           ./scripts/ci/print-versions.sh 
262+        - name : make 
263+         timeout-minutes : 14   #  may die if rabbitmq fails to start
264+         #  use: script -e -c to print colors
265+         run : | 
266+           script -e -c "make .ci-prepare-integration" && exit 0 
267+        - name : Extend the path for upcoming tasks 
268+         run : | 
269+           echo ${HOME}/work/st2/st2/virtualenv/bin 
270+           echo ${HOME}/work/st2/st2/virtualenv/bin >> $GITHUB_PATH 
271+        - name : Create symlinks to find the binaries when running st2 actions 
272+         run : | 
273+           ln -s ${HOME}/work/st2/st2/virtualenv/bin/st2 /usr/local/bin/st2 
274+           ln -s ${HOME}/work/st2/st2/virtualenv/bin/st2-run-pack-tests /usr/local/bin/st2-run-pack-tests 
275+        - name : Install st2client 
276+         timeout-minutes : 5 
277+         run : | 
278+           cd ./st2client 
279+           pip3 install --upgrade pip 
280+           python3 setup.py develop 
281+        - name : Run self-verification script 
282+         env :
283+           ST2_CONF : /home/runner/work/st2/st2/conf/st2.ci.conf 
284+         run : | 
285+           sudo -E ST2_AUTH_TOKEN=$(st2 auth testu -p 'testp' -t) PATH=${PATH} virtualenv/bin/st2-self-check 
286+        - name : Compress Service Logs Before upload 
287+         if : ${{ failure() }} 
288+         run : | 
289+           tar cvzpf logs.tar.gz logs/* 
290+        - name : Upload StackStorm services Logs 
291+         if : ${{ failure() }} 
292+         uses : actions/upload-artifact@v2 
293+         with :
294+           name : logs 
295+           path : logs.tar.gz 
296+           retention-days : 7 
297+       - name : Stop Redis Service Container 
298+         if : " ${{ always() }}" 
299+         run : docker rm --force redis || true 
300+ 
139301  unit-tests :
140302    needs : pre_job 
141303    #  NOTE: We always want to run job on master since we run some additional checks there (code
@@ -174,6 +336,18 @@ jobs:
174336            nosetests_node_index : 1 
175337            python-version-short : ' 3.8' 
176338            python-version : ' 3.8.10' 
339+           - name : ' Unit Tests (chunk 1)' 
340+             task : ' ci-unit' 
341+             nosetests_node_total : 2 
342+             nosetests_node_index : 0 
343+             python-version-short : ' 3.9' 
344+             python-version : ' 3.9.14' 
345+           - name : ' Unit Tests (chunk 2)' 
346+             task : ' ci-unit' 
347+             nosetests_node_total : 2 
348+             nosetests_node_index : 1 
349+             python-version-short : ' 3.9' 
350+             python-version : ' 3.9.14' 
177351          #  This job is slow so we only run in on a daily basis
178352          #  - name: 'Micro Benchmarks'
179353          #    task: 'micro-benchmarks'
@@ -197,7 +371,7 @@ jobs:
197371
198372    env :
199373      TASK : ' ${{ matrix.task }}' 
200- 
374+        PYTHON_VERSION_SHORT :  ' ${{ matrix.python-version-short }} ' 
201375      NODE_TOTAL : ' ${{ matrix.nosetests_node_total }}' 
202376      NODE_INDEX : ' ${{ matrix.nosetests_node_index }}' 
203377
@@ -304,9 +478,11 @@ jobs:
304478          ./scripts/ci/run-nightly-make-task-if-exists.sh "${TASK}" 
305479       - name : Codecov 
306480        #  NOTE: We only generate and submit coverage report for master and version branches and only when the build succeeds (default on GitHub Actions, this was not the case on Travis so we had to explicitly check success)
307-         if : " ${{ success() && (env.ENABLE_COVERAGE == 'yes') }}" 
481+         if : " ${{ success() && (env.ENABLE_COVERAGE == 'yes') && (env.PYTHON_VERSION_SHORT == '3.8') }}" 
308482        run : | 
309483          ./scripts/ci/submit-codecov-coverage.sh 
484+          env :
485+           CODECOV_TOKEN : ${{ secrets.CODECOV_TOKEN }} 
310486
311487  integration-tests :
312488    needs : pre_job 
@@ -359,6 +535,24 @@ jobs:
359535            nosetests_node_index : 1 
360536            python-version-short : ' 3.8' 
361537            python-version : ' 3.8.10' 
538+           - name : ' Pack Tests' 
539+             task : ' ci-packs-tests' 
540+             nosetests_node_total : 1 
541+             nosetests_node_index : 0 
542+             python-version-short : ' 3.9' 
543+             python-version : ' 3.9.14' 
544+           - name : ' Integration Tests (chunk 1)' 
545+             task : ' ci-integration' 
546+             nosetests_node_total : 2 
547+             nosetests_node_index : 0 
548+             python-version-short : ' 3.9' 
549+             python-version : ' 3.9.14' 
550+           - name : ' Integration Tests (chunk 2)' 
551+             task : ' ci-integration' 
552+             nosetests_node_total : 2 
553+             nosetests_node_index : 1 
554+             python-version-short : ' 3.9' 
555+             python-version : ' 3.9.14' 
362556    services :
363557      mongo :
364558        image : mongo:4.4 
@@ -414,7 +608,7 @@ jobs:
414608
415609    env :
416610      TASK : ' ${{ matrix.task }}' 
417- 
611+        PYTHON_VERSION_SHORT :  ' ${{ matrix.python-version-short }} ' 
418612      NODE_TOTAL : ' ${{ matrix.nosetests_node_total }}' 
419613      NODE_INDEX : ' ${{ matrix.nosetests_node_index }}' 
420614
@@ -523,9 +717,11 @@ jobs:
523717          script -e -c "make ${TASK}" && exit 0 
524718       - name : Codecov 
525719        #  NOTE: We only generate and submit coverage report for master and version branches and only when the build succeeds (default on GitHub Actions, this was not the case on Travis so we had to explicitly check success)
526-         if : " ${{ success() && env.ENABLE_COVERAGE == 'yes' && env.TASK == 'ci-integration'  }}" 
720+         if : " ${{ success() && ( env.ENABLE_COVERAGE == 'yes')  && ( env.TASK == 'ci-integration') && (env.PYTHON_VERSION_SHORT == '3.8') }}" 
527721        run : | 
528722          ./scripts/ci/submit-codecov-coverage.sh 
723+          env :
724+           CODECOV_TOKEN : ${{ secrets.CODECOV_TOKEN }} 
529725      - name : Compress Service Logs Before upload 
530726        if : ${{ failure() && env.TASK == 'ci-integration' }} 
531727        run : | 
0 commit comments