|
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