|
1 | 1 | on: push |
2 | 2 |
|
3 | | -name: Privately published Elixir Library |
| 3 | +name: Privately published Elixir Library (with git ops) |
4 | 4 |
|
5 | 5 | env: |
6 | | - ELIXIR_VERSION: "1.9" |
7 | | - OTP_VERSION: "22.2" |
| 6 | + ELIXIR_VERSION: "1.14.5-otp-24" |
| 7 | + OTP_VERSION: "24.3.4.17" |
8 | 8 |
|
9 | 9 | jobs: |
10 | 10 | deps: |
11 | | - runs-on: ubuntu-18.04 |
| 11 | + runs-on: ubuntu-22.04 |
12 | 12 | env: |
13 | 13 | NARRATIVE_HEX_ORG_API_KEY: ${{ secrets.NARRATIVE_HEX_ORG_API_KEY }} |
14 | 14 | MIX_ENV: test |
15 | 15 | steps: |
16 | 16 | - name: Checking out project |
17 | | - uses: actions/checkout@v2 |
| 17 | + uses: actions/checkout@v4 |
18 | 18 | - name: "Setting up Elixir" |
19 | | - uses: actions/setup-elixir@v1 |
| 19 | + uses: erlef/setup-beam@v1 |
20 | 20 | with: |
21 | 21 | otp-version: ${{ env.OTP_VERSION }} |
22 | 22 | elixir-version: ${{ env.ELIXIR_VERSION }} |
23 | 23 | - name: Signing into narrativeapp organisation on hex |
24 | 24 | run: mix hex.organization auth narrativeapp --key $NARRATIVE_HEX_ORG_API_KEY |
25 | 25 | - name: Downloading dependency cache |
26 | | - uses: actions/cache@v2 |
| 26 | + uses: actions/cache@v4 |
27 | 27 | with: |
28 | 28 | path: deps |
29 | 29 | key: ${{ runner.os }}-deps |
30 | 30 | - run: mix deps.get |
31 | 31 | - name: Uploading dependencies for other jobs |
32 | | - uses: actions/upload-artifact@v2 |
| 32 | + uses: actions/upload-artifact@v4 |
33 | 33 | with: |
34 | 34 | name: deps |
35 | 35 | path: deps/ |
| 36 | + include-hidden-files: true |
36 | 37 |
|
37 | 38 | build: |
38 | | - runs-on: ubuntu-18.04 |
| 39 | + runs-on: ubuntu-22.04 |
39 | 40 | needs: ["deps"] |
40 | 41 | env: |
41 | 42 | MIX_ENV: test |
42 | 43 | steps: |
43 | 44 | - name: Checking out project |
44 | | - uses: actions/checkout@v2 |
| 45 | + uses: actions/checkout@v4 |
45 | 46 | - name: "Setting up Elixir" |
46 | | - uses: actions/setup-elixir@v1 |
| 47 | + uses: erlef/setup-beam@v1 |
47 | 48 | with: |
48 | 49 | otp-version: ${{ env.OTP_VERSION }} |
49 | 50 | elixir-version: ${{ env.ELIXIR_VERSION }} |
50 | 51 | - name: Downloading dependencies |
51 | | - uses: actions/download-artifact@v2 |
| 52 | + uses: actions/download-artifact@v4 |
52 | 53 | with: |
53 | 54 | name: deps |
54 | 55 | path: deps/ |
55 | 56 | - name: Downloading build artifact cache |
56 | | - uses: actions/cache@v2 |
| 57 | + uses: actions/cache@v4 |
57 | 58 | with: |
58 | 59 | path: _build |
59 | 60 | key: ${{ runner.os }}-build |
60 | 61 | - name: Run `mix compile` |
61 | 62 | run: mix compile |
62 | 63 | - name: Uploading build artifacts for other jobs |
63 | | - uses: actions/upload-artifact@v2 |
| 64 | + uses: actions/upload-artifact@v4 |
64 | 65 | with: |
65 | 66 | name: build |
66 | 67 | path: _build/ |
67 | 68 |
|
68 | 69 | credo: |
69 | | - runs-on: ubuntu-18.04 |
| 70 | + runs-on: ubuntu-22.04 |
70 | 71 | needs: ["deps", "build"] |
71 | 72 | env: |
72 | 73 | MIX_ENV: test |
73 | 74 | steps: |
74 | 75 | - name: Checking out project |
75 | | - uses: actions/checkout@v2 |
| 76 | + uses: actions/checkout@v4 |
76 | 77 | - name: "Setting up Elixir" |
77 | | - uses: actions/setup-elixir@v1 |
| 78 | + uses: erlef/setup-beam@v1 |
78 | 79 | with: |
79 | 80 | otp-version: ${{ env.OTP_VERSION }} |
80 | 81 | elixir-version: ${{ env.ELIXIR_VERSION }} |
81 | 82 | - name: Downloading dependencies |
82 | | - uses: actions/download-artifact@v2 |
| 83 | + uses: actions/download-artifact@v4 |
83 | 84 | with: |
84 | 85 | name: deps |
85 | 86 | path: deps/ |
86 | 87 | - name: Downloading build artifacts |
87 | | - uses: actions/download-artifact@v2 |
| 88 | + uses: actions/download-artifact@v4 |
88 | 89 | with: |
89 | 90 | name: build |
90 | 91 | path: _build/ |
91 | 92 | - run: mix credo --strict |
92 | 93 |
|
93 | 94 | formatter: |
94 | | - runs-on: ubuntu-18.04 |
| 95 | + runs-on: ubuntu-22.04 |
95 | 96 | steps: |
96 | 97 | - name: Checking out project |
97 | | - uses: actions/checkout@v2 |
| 98 | + uses: actions/checkout@v4 |
98 | 99 | - name: "Setting up Elixir" |
99 | | - uses: actions/setup-elixir@v1 |
| 100 | + uses: erlef/setup-beam@v1 |
100 | 101 | with: |
101 | 102 | otp-version: ${{ env.OTP_VERSION }} |
102 | 103 | elixir-version: ${{ env.ELIXIR_VERSION }} |
103 | 104 | - run: mix format --check-formatted |
104 | 105 |
|
105 | 106 | audit: |
106 | | - runs-on: ubuntu-18.04 |
| 107 | + runs-on: ubuntu-22.04 |
107 | 108 | needs: ["deps"] |
108 | 109 | env: |
109 | 110 | NARRATIVE_HEX_ORG_API_KEY: ${{ secrets.NARRATIVE_HEX_ORG_API_KEY }} |
110 | 111 | MIX_ENV: test |
111 | 112 | steps: |
112 | 113 | - name: Checking out project |
113 | | - uses: actions/checkout@v2 |
| 114 | + uses: actions/checkout@v4 |
114 | 115 | - name: "Setting up Elixir" |
115 | | - uses: actions/setup-elixir@v1 |
| 116 | + uses: erlef/setup-beam@v1 |
116 | 117 | with: |
117 | 118 | otp-version: ${{ env.OTP_VERSION }} |
118 | 119 | elixir-version: ${{ env.ELIXIR_VERSION }} |
119 | 120 | - run: mix hex.organization auth narrativeapp --key $NARRATIVE_HEX_ORG_API_KEY |
120 | 121 | - name: Downloading dependencies |
121 | | - uses: actions/download-artifact@v2 |
| 122 | + uses: actions/download-artifact@v4 |
122 | 123 | with: |
123 | 124 | name: deps |
124 | 125 | path: deps/ |
125 | 126 | - run: mix hex.audit |
126 | 127 |
|
127 | 128 | test: |
128 | | - runs-on: ubuntu-18.04 |
| 129 | + runs-on: ubuntu-22.04 |
129 | 130 | needs: ["deps", "build"] |
130 | 131 | env: |
131 | 132 | MIX_ENV: test |
132 | 133 | steps: |
133 | 134 | - name: Checking out project |
134 | | - uses: actions/checkout@v2 |
| 135 | + uses: actions/checkout@v4 |
135 | 136 | - name: "Setting up Elixir" |
136 | | - uses: actions/setup-elixir@v1 |
| 137 | + uses: erlef/setup-beam@v1 |
137 | 138 | with: |
138 | 139 | otp-version: ${{ env.OTP_VERSION }} |
139 | 140 | elixir-version: ${{ env.ELIXIR_VERSION }} |
140 | 141 | - name: Downloading dependencies |
141 | | - uses: actions/download-artifact@v2 |
| 142 | + uses: actions/download-artifact@v4 |
142 | 143 | with: |
143 | 144 | name: deps |
144 | 145 | path: deps/ |
145 | 146 | - name: Downloading build artifacts |
146 | | - uses: actions/download-artifact@v2 |
| 147 | + uses: actions/download-artifact@v4 |
147 | 148 | with: |
148 | 149 | name: build |
149 | 150 | path: _build/ |
150 | 151 | - run: mix test |
151 | 152 |
|
152 | 153 | is_releasable: |
153 | | - runs-on: ubuntu-18.04 |
| 154 | + runs-on: ubuntu-22.04 |
154 | 155 | needs: ["deps", "test", "audit", "formatter", "credo"] |
155 | | - if: ${{ github.event_name == 'push' && !contains(github.ref, 'refs/tags/') }} |
| 156 | + if: ${{ github.event_name == 'push' && github.ref != 'refs/heads/master'}} |
156 | 157 | env: |
157 | 158 | HEX_API_KEY: ${{ secrets.NARRATIVE_HEX_ORG_API_KEY }} |
158 | 159 | steps: |
159 | 160 | - name: Checking out project |
160 | | - uses: actions/checkout@v2 |
161 | | - - name: Checking the app name |
162 | | - id: app-name |
163 | | - run: 'echo "::set-output name=app-name::$(awk -F''[:,]'' ''/app: /{print $3}'' mix.exs)"' |
164 | | - - name: Checking the app version |
165 | | - id: app-version |
166 | | - run: "VERSION=$(awk -F\\\" '/version: /{print $2}' mix.exs); echo \"::set-output name=app-version::${VERSION}\"" |
| 161 | + uses: actions/checkout@v4 |
167 | 162 | - name: "Setting up Elixir" |
168 | | - uses: actions/setup-elixir@v1 |
| 163 | + uses: erlef/setup-beam@v1 |
169 | 164 | with: |
170 | 165 | otp-version: ${{ env.OTP_VERSION }} |
171 | 166 | elixir-version: ${{ env.ELIXIR_VERSION }} |
172 | 167 | - name: Downloading dependencies |
173 | | - uses: actions/download-artifact@v2 |
| 168 | + uses: actions/download-artifact@v4 |
174 | 169 | with: |
175 | 170 | name: deps |
176 | 171 | path: deps/ |
177 | 172 | - name: Downloading build artifacts |
178 | | - uses: actions/download-artifact@v2 |
| 173 | + uses: actions/download-artifact@v4 |
179 | 174 | with: |
180 | 175 | name: build |
181 | 176 | path: _build/ |
| 177 | + - name: Getting app information |
| 178 | + id: app-info |
| 179 | + run: MIX_ENV=test mix git_ops.project_info --format github-actions |
182 | 180 | - name: Run mix hex.build |
183 | | - run: mix hex.build -o ${{ steps.app-name.outputs.app-name }}-${{ steps.app-version.outputs.app-version }}.tar |
| 181 | + run: mix hex.build -o ${{ steps.app-info.outputs.app_name }}-${{ steps.app-info.outputs.app_version }}.tar |
184 | 182 | - name: Uploading hex package as job artifact |
185 | | - uses: actions/upload-artifact@v2 |
| 183 | + uses: actions/upload-artifact@v4 |
186 | 184 | with: |
187 | | - name: ${{ steps.app-name.outputs.app-name }}-${{ steps.app-version.outputs.app-version }}.tar |
188 | | - path: ${{ steps.app-name.outputs.app-name }}-${{ steps.app-version.outputs.app-version }}.tar |
| 185 | + name: ${{ steps.app-info.outputs.app_name }}-${{ steps.app-info.outputs.app_version }}.tar |
| 186 | + path: ${{ steps.app-info.outputs.app_name }}-${{ steps.app-info.outputs.app_version }}.tar |
189 | 187 | - name: Run mix docs |
190 | 188 | run: MIX_ENV=test mix docs && tar zcvf docs.tar.gz doc/ |
191 | 189 | - name: Uploading documentation as job artifact |
192 | | - uses: actions/upload-artifact@v2 |
| 190 | + uses: actions/upload-artifact@v4 |
193 | 191 | with: |
194 | | - name: ${{ steps.app-name.outputs.app-name }}-docs-${{ steps.app-version.outputs.app-version }}.tar.gz |
| 192 | + name: ${{ steps.app-info.outputs.app_name }}-docs-${{ steps.app-info.outputs.app_version }}.tar.gz |
195 | 193 | path: docs.tar.gz |
196 | 194 |
|
197 | | - release: |
198 | | - runs-on: ubuntu-18.04 |
| 195 | + git_ops: |
| 196 | + runs-on: ubuntu-22.04 |
199 | 197 | needs: ["deps", "test", "audit", "formatter", "credo"] |
200 | | - if: ${{ github.event_name == 'push' && contains(github.ref, 'refs/tags/') }} |
| 198 | + if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} |
201 | 199 | env: |
202 | 200 | HEX_API_KEY: ${{ secrets.NARRATIVE_HEX_ORG_API_KEY }} |
203 | 201 | steps: |
204 | 202 | - name: Checking out project |
205 | | - uses: actions/checkout@v2 |
206 | | - - name: Checking the tag version |
207 | | - id: tag-version |
208 | | - run: VERSION=$(basename ${{ github.ref }}) ; echo "::set-output name=tag-version::${VERSION:1}" |
209 | | - - name: Checking the app version |
210 | | - id: app-version |
211 | | - run: "VERSION=$(awk -F\\\" '/version: /{print $2}' mix.exs); echo \"::set-output name=app-version::${VERSION}\"" |
212 | | - - name: Verifying that the git tag and the version in mix.exs match |
213 | | - run: test "xx${{ steps.tag-version.outputs.tag-version }}" = "xx${{ steps.app-version.outputs.app-version }}" |
214 | | - - name: Checking the app name |
215 | | - id: app-name |
216 | | - run: 'echo "::set-output name=app-name::$(awk -F''[:,]'' ''/app: /{print $3}'' mix.exs)"' |
| 203 | + uses: actions/checkout@v4 |
| 204 | + with: |
| 205 | + fetch-depth: 0 |
217 | 206 | - name: "Setting up Elixir" |
218 | | - uses: actions/setup-elixir@v1 |
| 207 | + uses: erlef/setup-beam@v1 |
219 | 208 | with: |
220 | 209 | otp-version: ${{ env.OTP_VERSION }} |
221 | 210 | elixir-version: ${{ env.ELIXIR_VERSION }} |
222 | 211 | - name: Downloading dependencies |
223 | | - uses: actions/download-artifact@v2 |
| 212 | + uses: actions/download-artifact@v4 |
224 | 213 | with: |
225 | 214 | name: deps |
226 | 215 | path: deps/ |
227 | 216 | - name: Downloading build artifacts |
228 | | - uses: actions/download-artifact@v2 |
| 217 | + uses: actions/download-artifact@v4 |
229 | 218 | with: |
230 | 219 | name: build |
231 | 220 | path: _build/ |
232 | | - - name: Run mix hex.build |
233 | | - run: mix hex.build -o ${{ steps.app-name.outputs.app-name }}-${{ steps.app-version.outputs.app-version }}.tar |
234 | | - - name: Uploading hex package as job artifact |
235 | | - uses: actions/upload-artifact@v2 |
236 | | - with: |
237 | | - name: ${{ steps.app-name.outputs.app-name }}-${{ steps.app-version.outputs.app-version }}.tar |
238 | | - path: ${{ steps.app-name.outputs.app-name }}-${{ steps.app-version.outputs.app-version }}.tar |
239 | | - - name: Run mix docs |
240 | | - run: MIX_ENV=test mix docs && tar zcvf docs.tar.gz doc/ |
241 | | - - name: Uploading documentation as job artifact |
242 | | - uses: actions/upload-artifact@v2 |
243 | | - with: |
244 | | - name: ${{ steps.app-name.outputs.app-name }}-docs-${{ steps.app-version.outputs.app-version }}.tar.gz |
245 | | - path: docs.tar.gz |
246 | | - - name: Publishing hex package |
247 | | - run: mix hex.publish --organization narrativeapp --yes |
| 221 | + - name: Configure git author |
| 222 | + run: git config user.email '41898282+github-actions[bot]@users.noreply.github.com' ; git config user.name 'github-actions' |
| 223 | + - name: Retrieving the current app version |
| 224 | + id: original-app-info |
| 225 | + run: MIX_ENV=test mix git_ops.project_info --format github-actions |
| 226 | + - name: Run mix git_ops.release |
| 227 | + run: MIX_ENV=test mix git_ops.release --yes --no-major || true |
| 228 | + - name: Checking for new app version |
| 229 | + id: app-info |
| 230 | + run: MIX_ENV=test mix git_ops.project_info --format github-actions |
| 231 | + - name: Building hex package |
| 232 | + if: ${{ steps.original-app-info.outputs.app_version != steps.app-info.outputs.app_version }} |
| 233 | + run: mix hex.build -o ${{ steps.app-info.outputs.app_name }}-${{ steps.app-info.outputs.app_version }}.tar |
| 234 | + - name: Building hex docs |
| 235 | + if: ${{ steps.original-app-info.outputs.app_version != steps.app-info.outputs.app_version }} |
| 236 | + run: MIX_ENV=test mix docs && tar zcvf ${{ steps.app-info.outputs.app_name }}-${{ steps.app-info.outputs.app_version }}-docs.tar.gz doc/ |
| 237 | + - name: Pushing new tag |
| 238 | + if: ${{ steps.original-app-info.outputs.app_version != steps.app-info.outputs.app_version }} |
| 239 | + run: git push "https://${{ github.actor }}:${{ github.token }}@github.com/${{ github.repository }}" HEAD:${{ github.ref }} refs/tags/v${{ steps.app-info.outputs.app_version }} |
248 | 240 | - name: Creating new Github release |
| 241 | + if: ${{ steps.original-app-info.outputs.app_version != steps.app-info.outputs.app_version }} |
249 | 242 | id: create-release |
250 | 243 | uses: actions/create-release@v1 |
251 | 244 | env: |
252 | | - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| 245 | + GITHUB_TOKEN: ${{ github.token }} |
253 | 246 | with: |
254 | | - tag_name: v${{ steps.app-version.outputs.app-version }} |
255 | | - release_name: Release ${{ steps.app-name.outputs.app-name }} ${{ steps.app-version.outputs.app-version }} |
256 | | - body: Autogenerated from tag push |
| 247 | + tag_name: v${{ steps.app-info.outputs.app_version }} |
| 248 | + release_name: Release ${{ steps.app-info.outputs.app_name }} ${{ steps.app-info.outputs.app_version }} |
| 249 | + body: Autogenerated by git_ops release. |
257 | 250 | - name: Uploading hex package as release artifact |
| 251 | + if: ${{ steps.original-app-info.outputs.app_version != steps.app-info.outputs.app_version }} |
258 | 252 | id: upload-package |
259 | 253 | uses: actions/upload-release-asset@v1 |
260 | 254 | env: |
261 | | - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| 255 | + GITHUB_TOKEN: ${{ github.token }} |
262 | 256 | with: |
263 | 257 | upload_url: ${{ steps.create-release.outputs.upload_url }} |
264 | | - asset_path: ${{ steps.app-name.outputs.app-name }}-${{ steps.app-version.outputs.app-version }}.tar |
265 | | - asset_name: ${{ steps.app-name.outputs.app-name }}-${{ steps.app-version.outputs.app-version }}.tar |
| 258 | + asset_path: ${{ steps.app-info.outputs.app_name }}-${{ steps.app-info.outputs.app_version }}.tar |
| 259 | + asset_name: ${{ steps.app-info.outputs.app_name }}-${{ steps.app-info.outputs.app_version }}.tar |
266 | 260 | asset_content_type: application/x-tar |
267 | 261 | - name: Uploading documentation as release artifact |
| 262 | + if: ${{ steps.original-app-info.outputs.app_version != steps.app-info.outputs.app_version }} |
268 | 263 | id: upload-docs |
269 | 264 | uses: actions/upload-release-asset@v1 |
270 | 265 | env: |
271 | | - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| 266 | + GITHUB_TOKEN: ${{ github.token }} |
272 | 267 | with: |
273 | 268 | upload_url: ${{ steps.create-release.outputs.upload_url }} |
274 | | - asset_path: docs.tar.gz |
275 | | - asset_name: ${{ steps.app-name.outputs.app-name }}-docs-${{ steps.app-version.outputs.app-version }}.tar.gz |
| 269 | + asset_path: ${{ steps.app-info.outputs.app_name }}-${{ steps.app-info.outputs.app_version }}-docs.tar.gz |
| 270 | + asset_name: ${{ steps.app-info.outputs.app_name }}-${{ steps.app-info.outputs.app_version }}-docs.tar.gz |
276 | 271 | asset_content_type: application/gzip |
| 272 | + - name: Publishing hex package |
| 273 | + if: ${{ steps.original-app-info.outputs.app_version != steps.app-info.outputs.app_version }} |
| 274 | + run: mix hex.publish --organization narrativeapp --yes |
0 commit comments