-
Notifications
You must be signed in to change notification settings - Fork 0
130 lines (108 loc) · 3.58 KB
/
main.yml
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
name: Main - explore CI primitives
on:
push:
branches:
- main
env:
KOSLI_ORG: kosli
KOSLI_FLOW: server
KOSLI_TRAIL: ${{ github.sha }}
KOSLI_CLI_VERSION: 2.10.18
KOSLI_DRY_RUN: true # Repo override
jobs:
setup:
runs-on: ubuntu-latest
outputs:
kosli_dry_run: ${{ steps.prepare.outputs.kosli_dry_run }}
steps:
- name: set-env-var in setup
id: prepare
run: |
if [ "${{ vars.KOSLI_DRY_RUN }}" == 'true' ] ; then
echo Org level KOSLI_DRY_RUN=true
value=true
elif [ -n "${{ env.KOSLI_DRY_RUN }}" ] ; then
echo Repo level KOSLI_DRY_RUN=true
value="${{ env.KOSLI_DRY_RUN }}"
elif [ "${{ github.ref }}" == 'refs/heads/main' ] ; then
echo Branch level KOSLI_DRY_RUN=false
value=false
else
echo Default KOSLI_DRY_RUN=true
value=true
fi
echo "kosli_dry_run=$(echo $value)" >> ${GITHUB_OUTPUT}
job-1:
runs-on: ubuntu-latest
needs: [ setup ]
env:
KOSLI_DRY_RUN: ${{ needs.setup.outputs.kosli_dry_run }}
steps:
- name: Do something
id: something
run:
exit 0
- name: Setup Kosli cli
if: success() || failure()
uses: kosli-dev/setup-cli-action@v2
with:
version:
${{ env.KOSLI_CLI_VERSION }}
- name: When on master, attest result to Kosli
if: success() || failure()
continue-on-error: true
env:
KOSLI_COMPLIANT2: $([ "${{ steps.something.outcome }}" == 'success' ] && echo true || echo false)
run: |
set +e
# Here we do 'kosli attest ..."
echo "KOSLI_DRY_RUN=:${{ env.KOSLI_DRY_RUN }}:"
echo "KOSLI_COMPLIANT=$([ "${{ steps.something.outcome }}" == 'success' ] && echo true || echo false)"
here we make a mistake
job-2:
runs-on: ubuntu-latest
needs: [ job-1 ]
if: ${{ success() || failure() }}
steps:
- name: step-1 from job-2
run: |
echo Hello from job-2, step-1
echo "TEST_UNIT_COVERAGE_IS_COMPLIANT=wibble" >> ${GITHUB_ENV}
- name: step-2 from job-2
run: |
echo Hello from job-2, step-2
echo "env-var=:${{ env.TEST_UNIT_COVERAGE_IS_COMPLIANT }}:"
# plain exit-42 on job-1,step-1 and success()||failure() on job-1,step-2 means
# job-1,step-2 runs? YES
# job-2 runs? NO
# plain exit-42 on job-1,step-1 and NO success()||failure() on job-1,step-2 means
# job-1,step-2 runs? NO
# job-2 runs? NO
# With this...
# - name: step-1 from job-1
# run: |
# echo Hello from job-1, step-1
# sdf
# echo Hello from job-1, step-1, after an error
# exit 42
# then
# the second echo is NOT run, and the exit code of the job is 127 (not 42)
# With this...
# job-2:
# runs-on: ubuntu-latest
# needs: [ job-1 ]
# if: ${{ success() || failure() }}
# then
# job1 failed, job2 waits for job1 to finish, and does then run.
# Putting continue-on-error: true
# at the step level, means that if the step fails
# the other steps still run, and the job succeeds
# Eg, there is no "Rerun failed jobs" option in the CI.
# Putting continue-on-error: true
# at the job-2 level, seems to have no effect.
# job1 fails, but job2 is not run (it is skipped)
# Putting continue-on-error: true
# at the job-1 level, means that job1 steps 2,3 are not run.
# and job-1 fails, and job-2 is run.
# env-var added to >> ${GITHUB_ENV}
# is available in the next step (in the same job)