From 0d8bc04d726e389caf094fb0d273b12447683558 Mon Sep 17 00:00:00 2001 From: Earl Warren Date: Sat, 2 Sep 2023 16:21:10 +0200 Subject: [PATCH 1/2] tests: support example workflows expected to fail --- .forgejo/workflows/integration.yml | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/.forgejo/workflows/integration.yml b/.forgejo/workflows/integration.yml index e2df475..a92b89b 100644 --- a/.forgejo/workflows/integration.yml +++ b/.forgejo/workflows/integration.yml @@ -3,11 +3,18 @@ on: [ push, pull_request ] env: # # List of tests to run as found in testdata/example-$test. The - # directory will be used to create a git repository, uploaded to a - # Forgejo instance. The test will be a success once the status of + # directory will be used to create a git repository uploaded to a + # Forgejo instance. + # + # The test will be a success once the status of # the commit is success, as set by the Forgejo Action run. # - TESTS: 'echo service container expression local-action docker-action' + TESTS: 'echo service container expression local-action docker-action if' + # + # The test is expected to fail the workflow and verify the expected + # side effect of the failure with testdata/example-$test/expected-to-fail.sh + # + TESTS_FAILING: 'if-fail' jobs: integration: @@ -28,7 +35,8 @@ jobs: # ./forgejo-runner.sh setup export FORGEJO_RUNNER_LOGS=forgejo-runner.log - for example in $TESTS ; do + + for example in $TESTS $TESTS_FAILING ; do if test $example = service ; then > /srv/example-service-volume-valid @@ -41,7 +49,13 @@ jobs: fi echo "============================ BEGIN example-$example ===================" - ./forgejo-test-helper.sh run_workflow testdata/example-$example http://root:admin1234@$(cat forgejo-ip):3000 root example-$example setup-forgejo $(cat forgejo-token) + if ./forgejo-test-helper.sh run_workflow testdata/example-$example http://root:admin1234@$(cat forgejo-ip):3000 root example-$example setup-forgejo $(cat forgejo-token) >& /tmp/run.out ; then + cat /tmp/run.out + ! test -f testdata/example-$example/expected-to-fail.sh + else + cat /tmp/run.out + test -f testdata/example-$example/expected-to-fail.sh + fi echo "============================ END example-$example ===================" if test -f $config ; then From aa61aec52866cf76fa2bcdace47beff5737f10bf Mon Sep 17 00:00:00 2001 From: Earl Warren Date: Sat, 2 Sep 2023 16:20:20 +0200 Subject: [PATCH 2/2] add 'if' examples --- .../.forgejo/workflows/test.yml | 17 +++++++++++ .../.forgejo/workflows/test.yml | 30 +++++++++++++++++++ testdata/example-if-fail/expected-to-fail.sh | 5 ++++ .../example-if/.forgejo/workflows/test.yml | 17 +++++++++++ 4 files changed, 69 insertions(+) create mode 100644 testdata/example-if-cancel/.forgejo/workflows/test.yml create mode 100644 testdata/example-if-fail/.forgejo/workflows/test.yml create mode 100755 testdata/example-if-fail/expected-to-fail.sh create mode 100644 testdata/example-if/.forgejo/workflows/test.yml diff --git a/testdata/example-if-cancel/.forgejo/workflows/test.yml b/testdata/example-if-cancel/.forgejo/workflows/test.yml new file mode 100644 index 0000000..6ae5dbd --- /dev/null +++ b/testdata/example-if-cancel/.forgejo/workflows/test.yml @@ -0,0 +1,17 @@ +# +# As of Forgejo v1.20 running this example would require using the web +# endpoints because there is no API to do the same. +# +# It was manually tested to **not work** with Forgejo v1.20 & runner 2.5.0 +# +on: [push] + +jobs: + test: + runs-on: docker + steps: + + - run: sleep infinity + + - if: cancelled() + run: echo IF TEST CANCELLED diff --git a/testdata/example-if-fail/.forgejo/workflows/test.yml b/testdata/example-if-fail/.forgejo/workflows/test.yml new file mode 100644 index 0000000..4c0e5af --- /dev/null +++ b/testdata/example-if-fail/.forgejo/workflows/test.yml @@ -0,0 +1,30 @@ +on: [push] + +jobs: + test: + runs-on: docker + steps: + + - run: false + - if: failure() + run: echo IF TEST FAILURE + - if: always() + run: echo IF TEST ALWAYS + + # + # This is documented in GitHub Actions and does not work in Forgejo Actions + # as of 3.0.0. + # + # If you have a chain of dependent jobs, failure() returns true if any ancestor job fails. + # + # first: + # runs-on: docker + # steps: + # - run: false + + # second: + # runs-on: docker + # needs: [first] + # steps: + # - if: failure() + # run: echo IF TEST FAIL DEPENDS diff --git a/testdata/example-if-fail/expected-to-fail.sh b/testdata/example-if-fail/expected-to-fail.sh new file mode 100755 index 0000000..c4485df --- /dev/null +++ b/testdata/example-if-fail/expected-to-fail.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +set -ex +grep --quiet 'IF TEST FAILURE' $FORGEJO_RUNNER_LOGS +grep --quiet 'IF TEST ALWAYS' $FORGEJO_RUNNER_LOGS diff --git a/testdata/example-if/.forgejo/workflows/test.yml b/testdata/example-if/.forgejo/workflows/test.yml new file mode 100644 index 0000000..cc9401c --- /dev/null +++ b/testdata/example-if/.forgejo/workflows/test.yml @@ -0,0 +1,17 @@ +on: [push] + +jobs: + basic: + runs-on: docker + steps: + + - name: if true + if: true + id: if_true + run: echo 'check=good' >> $GITHUB_OUTPUT + - name: verify if true was run + run: test ${{ steps.if_true.outputs.check }} = good + + - name: if false + if: false + run: false