|
1 | | -# Ref: https://securitylab.github.com/research/github-actions-preventing-pwn-requests |
2 | 1 | name: Breakage |
3 | 2 |
|
4 | | -# read-only repo token |
5 | | -# no access to secrets |
6 | 3 | on: |
7 | 4 | pull_request: |
| 5 | + types: [opened, synchronize, reopened] |
8 | 6 |
|
9 | 7 | jobs: |
10 | | - # Build dynamically the matrix on which the "break" job will run. |
11 | | - # The matrix contains the packages that depend on ${{ env.pkg }}. |
12 | | - # Job "setup_matrix" outputs variable "matrix", which is in turn |
13 | | - # the output of the "getmatrix" step. |
14 | | - # The contents of "matrix" is a JSON description of a matrix used |
15 | | - # in the next step. It has the form |
16 | | - # { |
17 | | - # "pkg": [ |
18 | | - # "PROPACK", |
19 | | - # "LLSModels", |
20 | | - # "FletcherPenaltySolver" |
21 | | - # ] |
22 | | - # } |
23 | | - setup_matrix: |
24 | | - runs-on: ubuntu-latest |
25 | | - outputs: |
26 | | - matrix: ${{ steps.getmatrix.outputs.matrix }} |
27 | | - env: |
28 | | - pkg: ${{ github.event.repository.name }} |
29 | | - steps: |
30 | | - - uses: actions/checkout@v4 |
31 | | - - uses: julia-actions/setup-julia@v2 |
32 | | - with: |
33 | | - version: 1 |
34 | | - arch: x64 |
35 | | - - id: getmatrix |
36 | | - run: | |
37 | | - julia -e 'using Pkg; Pkg.Registry.add(RegistrySpec(url = "https://github.com/JuliaRegistries/General.git"))' |
38 | | - julia --project=.breakage -e 'using Pkg; Pkg.update(); Pkg.instantiate()' |
39 | | - pkgs=$(julia --project=.breakage .breakage/get_jso_users.jl ${{ env.pkg }}) |
40 | | - vs='["latest", "stable"]' |
41 | | - # Check if pkgs is empty, and set it to a JSON array if necessary |
42 | | - if [[ -z "$pkgs" || "$pkgs" == "String[]" ]]; then |
43 | | - echo "No packages found; exiting successfully." |
44 | | - exit 0 |
45 | | - fi |
46 | | - vs='["latest", "stable"]' |
47 | | - matrix=$(jq -cn --argjson deps "$pkgs" --argjson vers "$vs" '{pkg: $deps, pkgversion: $vers}') # don't escape quotes like many posts suggest |
48 | | - echo "matrix=$matrix" >> "$GITHUB_OUTPUT" |
49 | | -
|
50 | | - break: |
51 | | - needs: setup_matrix |
52 | | - if: needs.setup_matrix.result == 'success' && needs.setup_matrix.outputs.matrix != '' |
53 | | - runs-on: ubuntu-latest |
54 | | - strategy: |
55 | | - fail-fast: false |
56 | | - matrix: ${{ fromJSON(needs.setup_matrix.outputs.matrix) }} |
57 | | - |
58 | | - steps: |
59 | | - - uses: actions/checkout@v4 |
60 | | - |
61 | | - # Install Julia |
62 | | - - uses: julia-actions/setup-julia@v2 |
63 | | - with: |
64 | | - version: 1 |
65 | | - arch: x64 |
66 | | - - uses: actions/cache@v4 |
67 | | - env: |
68 | | - cache-name: cache-artifacts |
69 | | - with: |
70 | | - path: ~/.julia/artifacts |
71 | | - key: ${{ runner.os }}-test-${{ env.cache-name }}-${{ hashFiles('**/Project.toml') }} |
72 | | - restore-keys: | |
73 | | - ${{ runner.os }}-test-${{ env.cache-name }}- |
74 | | - ${{ runner.os }}-test- |
75 | | - ${{ runner.os }}- |
76 | | - - uses: julia-actions/julia-buildpkg@v1 |
77 | | - |
78 | | - # Breakage test |
79 | | - - name: 'Breakage of ${{ matrix.pkg }}, ${{ matrix.pkgversion }} version' |
80 | | - env: |
81 | | - PKG: ${{ matrix.pkg }} |
82 | | - VERSION: ${{ matrix.pkgversion }} |
83 | | - run: | |
84 | | - set -v |
85 | | - mkdir -p ./breakage |
86 | | - git clone https://github.com/JuliaSmoothOptimizers/$PKG.jl.git |
87 | | - cd $PKG.jl |
88 | | - if [ $VERSION == "stable" ]; then |
89 | | - TAG=$(git tag -l "v*" --sort=-creatordate | head -n1) |
90 | | - if [ -z "$TAG" ]; then |
91 | | - TAG="no_tag" |
92 | | - else |
93 | | - git checkout $TAG |
94 | | - fi |
95 | | - else |
96 | | - TAG=$VERSION |
97 | | - fi |
98 | | - export TAG |
99 | | - julia -e 'using Pkg; |
100 | | - PKG, TAG, VERSION = ENV["PKG"], ENV["TAG"], ENV["VERSION"] |
101 | | - joburl = joinpath(ENV["GITHUB_SERVER_URL"], ENV["GITHUB_REPOSITORY"], "actions/runs", ENV["GITHUB_RUN_ID"]) |
102 | | - open("../breakage/breakage-$PKG-$VERSION", "w") do io |
103 | | - try |
104 | | - TAG == "no_tag" && error("No tag for $VERSION") |
105 | | - pkg"activate ."; |
106 | | - pkg"instantiate"; |
107 | | - pkg"dev ../"; |
108 | | - if TAG == "latest" |
109 | | - global TAG = chomp(read(`git rev-parse --short HEAD`, String)) |
110 | | - end |
111 | | - pkg"build"; |
112 | | - pkg"test"; |
113 | | -
|
114 | | - print(io, "[]($joburl)"); |
115 | | - catch e |
116 | | - @error e; |
117 | | - print(io, "[]($joburl)"); |
118 | | - end; |
119 | | - end' |
120 | | -
|
121 | | - - uses: actions/upload-artifact@v4 |
122 | | - with: |
123 | | - name: breakage-${{ matrix.pkg }}-${{ matrix.pkgversion }} |
124 | | - path: breakage/breakage-* |
125 | | - |
126 | | - upload: |
127 | | - needs: break |
128 | | - runs-on: ubuntu-latest |
129 | | - steps: |
130 | | - - uses: actions/checkout@v4 |
131 | | - |
132 | | - - uses: actions/download-artifact@v4 |
133 | | - with: |
134 | | - path: breakage |
135 | | - pattern: breakage-* |
136 | | - merge-multiple: true |
137 | | - |
138 | | - - run: ls -R |
139 | | - - run: | |
140 | | - cd breakage |
141 | | - echo "| Package name | latest | stable |" > summary.md |
142 | | - echo "|--|--|--|" >> summary.md |
143 | | - count=0 |
144 | | - for file in breakage-* |
145 | | - do |
146 | | - if [ $count == "0" ]; then |
147 | | - name=$(echo $file | cut -f2 -d-) |
148 | | - echo -n "| $name | " |
149 | | - else |
150 | | - echo -n "| " |
151 | | - fi |
152 | | - cat $file |
153 | | - if [ $count == "0" ]; then |
154 | | - echo -n " " |
155 | | - count=1 |
156 | | - else |
157 | | - echo " |" |
158 | | - count=0 |
159 | | - fi |
160 | | - done >> summary.md |
161 | | -
|
162 | | - - name: PR comment with file |
163 | | - uses: thollander/actions-comment-pull-request@v2 |
164 | | - with: |
165 | | - filePath: breakage/summary.md |
| 8 | + breakage: |
| 9 | + uses: JuliaSmoothOptimizers/.github/.github/workflows/Breakage.yml@main |
0 commit comments