on bce304a help sign in
456 lines 23 kB history raw
1name: CICD
3env:
4 PROJECT_NAME: bat
5 PROJECT_DESC: "A `cat` clone with wings"
6 PROJECT_MAINTAINER: "David Peter <mail@david-peter.de>"
7 PROJECT_HOMEPAGE: "https://github.com/sharkdp/bat"
8 MIN_SUPPORTED_RUST_VERSION: "1.40.0"
10on: [push, pull_request]
12jobs:
13 min_version:
14 name: Minimum supported rust version
15 runs-on: ubuntu-latest
16 steps:
17 - name: Git checkout
18 uses: actions/checkout@v2
19 - name: Install rust toolchain (v${{ env.MIN_SUPPORTED_RUST_VERSION }})
20 uses: actions-rs/toolchain@v1
21 with:
22 toolchain: ${{ env.MIN_SUPPORTED_RUST_VERSION }}
23 default: true
24 profile: minimal # minimal component installation (ie, no documentation)
25 - name: Test
26 uses: actions-rs/cargo@v1
27 with:
28 command: test
30 test_with_new_syntaxes_and_themes:
31 name: Test with new syntaxes and themes
32 runs-on: ubuntu-latest
33 steps:
34 - name: Git checkout
35 uses: actions/checkout@v2
36 with:
37 submodules: true # we need all syntax and theme submodules
38 - name: Install Rust toolchain
39 uses: actions-rs/toolchain@v1
40 with:
41 toolchain: stable
42 default: true
43 profile: minimal
44 - name: Build and install bat
45 uses: actions-rs/cargo@v1
46 with:
47 command: install
48 args: --locked --path .
49 - name: Rebuild binary assets (syntaxes and themes)
50 run: bash assets/create.sh
51 - name: Build and install bat with updated assets
52 uses: actions-rs/cargo@v1
53 with:
54 command: install
55 args: --locked --path .
56 - name: Run unit tests with new syntaxes and themes
57 uses: actions-rs/cargo@v1
58 with:
59 command: test
60 args: --release
61 - name: Syntax highlighting regression test
62 run: tests/syntax-tests/regression_test.sh
63 - name: List of languages
64 run: bat --list-languages
65 - name: List of themes
66 run: bat --list-themes
68 build:
69 name: Build
70 runs-on: ${{ matrix.job.os }}
71 strategy:
72 fail-fast: false
73 matrix:
74 job:
75 # { os, target, cargo-options, features, use-cross, toolchain }
76 - { os: ubuntu-latest , target: arm-unknown-linux-gnueabihf , use-cross: use-cross }
77 - { os: ubuntu-18.04 , target: aarch64-unknown-linux-gnu , use-cross: use-cross }
78 - { os: ubuntu-18.04 , target: i686-unknown-linux-gnu , use-cross: use-cross }
79 - { os: ubuntu-18.04 , target: i686-unknown-linux-musl , use-cross: use-cross }
80 - { os: ubuntu-18.04 , target: x86_64-unknown-linux-gnu , use-cross: use-cross }
81 - { os: ubuntu-18.04 , target: x86_64-unknown-linux-musl , use-cross: use-cross }
82 - { os: ubuntu-16.04 , target: x86_64-unknown-linux-gnu , use-cross: use-cross }
83 - { os: macos-latest , target: x86_64-apple-darwin }
84 # - { os: windows-latest , target: i686-pc-windows-gnu } ## disabled; linker errors (missing '_imp____acrt_iob_func')
85 - { os: windows-latest , target: i686-pc-windows-msvc }
86 # - { os: windows-latest , target: x86_64-pc-windows-gnu } ## disabled; linker errors (missing '_imp____acrt_iob_func')
87 - { os: windows-latest , target: x86_64-pc-windows-msvc }
88 steps:
89 - name: Git checkout
90 uses: actions/checkout@v2
91 - name: Install prerequisites
92 shell: bash
93 run: |
94 case ${{ matrix.job.target }} in
95 arm-unknown-linux-gnueabihf) sudo apt-get -y update ; sudo apt-get -y install gcc-arm-linux-gnueabihf ;;
96 aarch64-unknown-linux-gnu) sudo apt-get -y update ; sudo apt-get -y install gcc-aarch64-linux-gnu ;;
97 esac
98 - name: Initialize workflow variables
99 id: vars
100 shell: bash
101 run: |
102 # toolchain
103 TOOLCHAIN="stable" ## default to "stable" toolchain
104 # * specify alternate TOOLCHAIN for *-pc-windows-gnu targets; gnu targets on Windows are broken for the standard *-pc-windows-msvc toolchain (refs: <https://github.com/rust-lang/rust/issues/47048>, <https://github.com/rust-lang/rust/issues/53454>, <https://github.com/rust-lang/cargo/issues/6754>)
105 case ${{ matrix.job.target }} in *-pc-windows-gnu) TOOLCHAIN="stable-${{ matrix.job.target }}" ;; esac;
106 # * use requested TOOLCHAIN if specified
107 if [ -n "${{ matrix.job.toolchain }}" ]; then TOOLCHAIN="${{ matrix.job.toolchain }}" ; fi
108 echo set-output name=TOOLCHAIN::${TOOLCHAIN}
109 echo ::set-output name=TOOLCHAIN::${TOOLCHAIN}
110 # staging directory
111 STAGING='_staging'
112 echo set-output name=STAGING::${STAGING}
113 echo ::set-output name=STAGING::${STAGING}
114 # determine EXE suffix
115 EXE_suffix="" ; case ${{ matrix.job.target }} in *-pc-windows-*) EXE_suffix=".exe" ;; esac;
116 echo set-output name=EXE_suffix::${EXE_suffix}
117 echo ::set-output name=EXE_suffix::${EXE_suffix}
118 # parse commit reference info
119 REF_NAME=${GITHUB_REF#refs/*/}
120 unset REF_BRANCH ; case ${GITHUB_REF} in refs/heads/*) REF_BRANCH=${GITHUB_REF#refs/heads/} ;; esac;
121 unset REF_TAG ; case ${GITHUB_REF} in refs/tags/*) REF_TAG=${GITHUB_REF#refs/tags/} ;; esac;
122 REF_SHAS=${GITHUB_SHA:0:8}
123 echo set-output name=REF_NAME::${REF_NAME}
124 echo set-output name=REF_BRANCH::${REF_BRANCH}
125 echo set-output name=REF_TAG::${REF_TAG}
126 echo set-output name=REF_SHAS::${REF_SHAS}
127 echo ::set-output name=REF_NAME::${REF_NAME}
128 echo ::set-output name=REF_BRANCH::${REF_BRANCH}
129 echo ::set-output name=REF_TAG::${REF_TAG}
130 echo ::set-output name=REF_SHAS::${REF_SHAS}
131 # parse target
132 unset TARGET_ARCH ; case ${{ matrix.job.target }} in arm-unknown-linux-gnueabihf) TARGET_ARCH=arm ;; i686-*) TARGET_ARCH=i686 ;; x86_64-*) TARGET_ARCH=x86_64 ;; esac;
133 echo set-output name=TARGET_ARCH::${TARGET_ARCH}
134 echo ::set-output name=TARGET_ARCH::${TARGET_ARCH}
135 unset TARGET_OS ; case ${{ matrix.job.target }} in *-linux-*) TARGET_OS=linux ;; *-apple-*) TARGET_OS=macos ;; *-windows-*) TARGET_OS=windows ;; esac;
136 echo set-output name=TARGET_OS::${TARGET_OS}
137 echo ::set-output name=TARGET_OS::${TARGET_OS}
138 # package name
139 PKG_suffix=".tar.gz" ; case ${{ matrix.job.target }} in *-pc-windows-*) PKG_suffix=".zip" ;; esac;
140 PKG_BASENAME=${PROJECT_NAME}-${REF_TAG:-$REF_SHAS}-${{ matrix.job.target }}
141 PKG_NAME=${PKG_BASENAME}${PKG_suffix}
142 echo set-output name=PKG_suffix::${PKG_suffix}
143 echo set-output name=PKG_BASENAME::${PKG_BASENAME}
144 echo set-output name=PKG_NAME::${PKG_NAME}
145 echo ::set-output name=PKG_suffix::${PKG_suffix}
146 echo ::set-output name=PKG_BASENAME::${PKG_BASENAME}
147 echo ::set-output name=PKG_NAME::${PKG_NAME}
148 # deployable tag? (ie, leading "vM" or "M"; M == version number)
149 unset DEPLOY ; if [[ $REF_TAG =~ ^[vV]?[0-9].* ]]; then DEPLOY='true' ; fi
150 echo set-output name=DEPLOY::${DEPLOY:-<empty>/false}
151 echo ::set-output name=DEPLOY::${DEPLOY}
152 # DPKG architecture?
153 unset DPKG_ARCH
154 case ${{ matrix.job.target }} in
155 aarch64-*-linux-*) DPKG_ARCH=arm64 ;;
156 arm-*-linux-*hf) DPKG_ARCH=armhf ;;
157 i686-*-linux-*) DPKG_ARCH=i686 ;;
158 x86_64-*-linux-*) DPKG_ARCH=amd64 ;;
159 esac;
160 echo set-output name=DPKG_ARCH::${DPKG_ARCH}
161 echo ::set-output name=DPKG_ARCH::${DPKG_ARCH}
162 # DPKG version?
163 unset DPKG_VERSION ; if [[ $REF_TAG =~ ^[vV]?[0-9].* ]]; then DPKG_VERSION=${REF_TAG/#[vV]/} ; fi
164 echo set-output name=DPKG_VERSION::${DPKG_VERSION}
165 echo ::set-output name=DPKG_VERSION::${DPKG_VERSION}
166 # DPKG base name/conflicts?
167 DPKG_BASENAME=${PROJECT_NAME}
168 DPKG_CONFLICTS=${PROJECT_NAME}-musl
169 case ${{ matrix.job.target }} in *-musl) DPKG_BASENAME=${PROJECT_NAME}-musl ; DPKG_CONFLICTS=${PROJECT_NAME} ;; esac;
170 echo set-output name=DPKG_BASENAME::${DPKG_BASENAME}
171 echo set-output name=DPKG_CONFLICTS::${DPKG_CONFLICTS}
172 echo ::set-output name=DPKG_BASENAME::${DPKG_BASENAME}
173 echo ::set-output name=DPKG_CONFLICTS::${DPKG_CONFLICTS}
174 # DPKG name
175 unset DPKG_NAME;
176 if [[ -n $DPKG_ARCH && -n $DPKG_VERSION ]]; then DPKG_NAME="${DPKG_BASENAME}_${DPKG_VERSION}_${DPKG_ARCH}.deb" ; fi
177 echo set-output name=DPKG_NAME::${DPKG_NAME}
178 echo ::set-output name=DPKG_NAME::${DPKG_NAME}
179 # target-specific options
180 # * CARGO_USE_CROSS (truthy)
181 CARGO_USE_CROSS='true' ; case '${{ matrix.job.use-cross }}' in ''|0|f|false|n|no) unset CARGO_USE_CROSS ;; esac;
182 echo set-output name=CARGO_USE_CROSS::${CARGO_USE_CROSS:-<empty>/false}
183 echo ::set-output name=CARGO_USE_CROSS::${CARGO_USE_CROSS}
184 # # * `arm` cannot be tested on ubuntu-* hosts (b/c testing is currently primarily done via comparison of target outputs with built-in outputs and the `arm` target is not executable on the host)
185 JOB_DO_TESTING="true"
186 case ${{ matrix.job.target }} in arm-*) unset JOB_DO_TESTING ;; esac;
187 echo set-output name=JOB_DO_TESTING::${JOB_DO_TESTING:-<empty>/false}
188 echo ::set-output name=JOB_DO_TESTING::${JOB_DO_TESTING}
189 # # * test only library unit tests and binary for arm-type targets
190 unset CARGO_TEST_OPTIONS
191 unset CARGO_TEST_OPTIONS ; case ${{ matrix.job.target }} in arm-* | aarch64-*) CARGO_TEST_OPTIONS="--lib --bin ${PROJECT_NAME}" ;; esac;
192 echo set-output name=CARGO_TEST_OPTIONS::${CARGO_TEST_OPTIONS}
193 echo ::set-output name=CARGO_TEST_OPTIONS::${CARGO_TEST_OPTIONS}
194 # * executable for `strip`?
195 STRIP="strip" ; case ${{ matrix.job.target }} in arm-unknown-linux-gnueabihf) STRIP="arm-linux-gnueabihf-strip" ;; aarch64-unknown-linux-gnu) STRIP="aarch64-linux-gnu-strip" ;; *-pc-windows-msvc) STRIP="" ;; esac;
196 echo set-output name=STRIP::${STRIP}
197 echo ::set-output name=STRIP::${STRIP}
198 - name: Create all needed build/work directories
199 shell: bash
200 run: |
201 mkdir -p '${{ steps.vars.outputs.STAGING }}'
202 mkdir -p '${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.PKG_BASENAME }}'
203 mkdir -p '${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.PKG_BASENAME }}/autocomplete'
204 mkdir -p '${{ steps.vars.outputs.STAGING }}/dpkg'
205 - name: Install Rust toolchain
206 uses: actions-rs/toolchain@v1
207 with:
208 toolchain: ${{ steps.vars.outputs.TOOLCHAIN }}
209 target: ${{ matrix.job.target }}
210 override: true
211 profile: minimal # minimal component installation (ie, no documentation)
212 - name: Info
213 shell: bash
214 run: |
215 gcc --version || true
216 rustup -V
217 rustup toolchain list
218 rustup default
219 cargo -V
220 rustc -V
221 - name: Build
222 uses: actions-rs/cargo@v1
223 with:
224 use-cross: ${{ steps.vars.outputs.CARGO_USE_CROSS }}
225 command: build
226 args: --release --target=${{ matrix.job.target }} ${{ matrix.job.cargo-options }}
227 - name: Test
228 uses: actions-rs/cargo@v1
229 with:
230 use-cross: ${{ steps.vars.outputs.CARGO_USE_CROSS }}
231 command: test
232 args: --target=${{ matrix.job.target }} ${{ steps.vars.outputs.CARGO_TEST_OPTIONS}} ${{ matrix.job.cargo-options }}
233 - name: bat test run
234 uses: actions-rs/cargo@v1
235 with:
236 use-cross: ${{ steps.vars.outputs.CARGO_USE_CROSS }}
237 command: run
238 args: --target=${{ matrix.job.target }} ${{ matrix.job.cargo-options }} -- --paging=never --color=always --theme=ansi-dark Cargo.toml src/config.rs
239 - name: Check features regex-onig
240 uses: actions-rs/cargo@v1
241 with:
242 use-cross: ${{ steps.vars.outputs.CARGO_USE_CROSS }}
243 command: check
244 args: --target=${{ matrix.job.target }} --verbose --lib --no-default-features --features regex-onig
245 - name: Check features regex-onig,git
246 uses: actions-rs/cargo@v1
247 with:
248 use-cross: ${{ steps.vars.outputs.CARGO_USE_CROSS }}
249 command: check
250 args: --target=${{ matrix.job.target }} --verbose --lib --no-default-features --features regex-onig,git
251 - name: Check features regex-onig,paging
252 uses: actions-rs/cargo@v1
253 with:
254 use-cross: ${{ steps.vars.outputs.CARGO_USE_CROSS }}
255 command: check
256 args: --target=${{ matrix.job.target }} --verbose --lib --no-default-features --features regex-onig,paging
257 - name: Check features regex-onig,git,paging
258 uses: actions-rs/cargo@v1
259 with:
260 use-cross: ${{ steps.vars.outputs.CARGO_USE_CROSS }}
261 command: check
262 args: --target=${{ matrix.job.target }} --verbose --lib --no-default-features --features regex-onig,git,paging
263 - name: Upload build artifacts
264 uses: actions/upload-artifact@master
265 with:
266 name: ${{ env.PROJECT_NAME }}-${{ matrix.job.target }}
267 path: target/${{ matrix.job.target }}/release/${{ env.PROJECT_NAME }}${{ steps.vars.outputs.EXE_suffix }}
268 - name: Package
269 shell: bash
270 run: |
271 ARCHIVE_DIR='${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.PKG_BASENAME }}/'
272 COPYRIGHT_YEARS="2018 - "$(date "+%Y")
273 # Binary
274 cp 'target/${{ matrix.job.target }}/release/${{ env.PROJECT_NAME }}${{ steps.vars.outputs.EXE_suffix }}' "$ARCHIVE_DIR"
276 # `strip` binary (if needed)
277 if [ -n "${{ steps.vars.outputs.STRIP }}" ]; then "${{ steps.vars.outputs.STRIP }}" "$ARCHIVE_DIR/${{ env.PROJECT_NAME }}${{ steps.vars.outputs.EXE_suffix }}" ; fi
279 # Man page
280 cp 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/manual/bat.1 "$ARCHIVE_DIR"
282 # README, LICENSE and CHANGELOG files
283 cp "README.md" "LICENSE-MIT" "LICENSE-APACHE" "CHANGELOG.md" "$ARCHIVE_DIR"
285 # Autocompletion files
286 cp 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/bat.fish "$ARCHIVE_DIR/autocomplete/${{ env.PROJECT_NAME }}.fish"
287 cp 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/bat.zsh "$ARCHIVE_DIR/autocomplete/${{ env.PROJECT_NAME }}.zsh"
289 # base compressed package
290 pushd '${{ steps.vars.outputs.STAGING }}/' >/dev/null
291 case ${{ matrix.job.target }} in
292 *-pc-windows-*) 7z -y a '${{ steps.vars.outputs.PKG_NAME }}' '${{ steps.vars.outputs.PKG_BASENAME }}'/* | tail -2 ;;
293 *) tar czf '${{ steps.vars.outputs.PKG_NAME }}' '${{ steps.vars.outputs.PKG_BASENAME }}'/* ;;
294 esac;
295 popd >/dev/null
297 # Debian package
298 if [ -n "${{ steps.vars.outputs.DPKG_NAME }}" ]; then
299 DPKG_DIR="${{ steps.vars.outputs.STAGING }}/dpkg"
301 # Binary
302 install -Dm755 'target/${{ matrix.job.target }}/release/${{ env.PROJECT_NAME }}${{ steps.vars.outputs.EXE_suffix }}' "${DPKG_DIR}/usr/bin/${{ env.PROJECT_NAME }}${{ steps.vars.outputs.EXE_suffix }}"
303 if [ -n "${{ steps.vars.outputs.STRIP }}" ]; then "${{ steps.vars.outputs.STRIP }}" "${DPKG_DIR}/usr/bin/${{ env.PROJECT_NAME }}${{ steps.vars.outputs.EXE_suffix }}" ; fi
305 # Work out shared library dependencies
306 # dpkg-shlibdeps requires debian/control file. Dummy it and clean up
307 mkdir "./debian"
308 touch "./debian/control"
309 case ${{ matrix.job.target }} in
310 aarch64-*-linux-*) DEPENDS="$(dpkg-shlibdeps -l/usr/aarch64-linux-gnu/lib -O "${DPKG_DIR}/usr/bin/${{ env.PROJECT_NAME }}" 2> /dev/null | sed 's/^shlibs:Depends=//')" ;;
311 arm-*-linux-*hf) DEPENDS="$(dpkg-shlibdeps -l/usr/arm-linux-gnueabihf/lib -O "${DPKG_DIR}/usr/bin/${{ env.PROJECT_NAME }}" 2> /dev/null | sed 's/^shlibs:Depends=//')" ;;
312 i686-*-linux-*) DEPENDS="$(dpkg-shlibdeps -O "${DPKG_DIR}/usr/bin/${{ env.PROJECT_NAME }}" 2> /dev/null | sed 's/^shlibs:Depends=//')" ;;
313 x86_64-*-linux-*) DEPENDS="$(dpkg-shlibdeps -O "${DPKG_DIR}/usr/bin/${{ env.PROJECT_NAME }}" 2> /dev/null | sed 's/^shlibs:Depends=//')" ;;
314 esac;
315 rm -rf "./debian"
317 # Man page
318 install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/manual/bat.1 "${DPKG_DIR}/usr/share/man/man1/${{ env.PROJECT_NAME }}.1"
319 gzip -n --best "${DPKG_DIR}/usr/share/man/man1/${{ env.PROJECT_NAME }}.1"
321 # Autocompletion files
322 install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/bat.fish "${DPKG_DIR}/usr/share/fish/vendor_completions.d/${{ env.PROJECT_NAME }}.fish"
323 install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/bat.zsh "${DPKG_DIR}/usr/share/zsh/vendor-completions/_${{ env.PROJECT_NAME }}"
325 # README and LICENSE
326 install -Dm644 "README.md" "${DPKG_DIR}/usr/share/doc/${{ steps.vars.outputs.DPKG_BASENAME }}/README.md"
327 install -Dm644 "LICENSE-MIT" "${DPKG_DIR}/usr/share/doc/${{ steps.vars.outputs.DPKG_BASENAME }}/LICENSE-MIT"
328 install -Dm644 "LICENSE-APACHE" "${DPKG_DIR}/usr/share/doc/${{ steps.vars.outputs.DPKG_BASENAME }}/LICENSE-APACHE"
329 install -Dm644 "CHANGELOG.md" "${DPKG_DIR}/usr/share/doc/${{ steps.vars.outputs.DPKG_BASENAME }}/changelog"
330 gzip -n --best "${DPKG_DIR}/usr/share/doc/${{ steps.vars.outputs.DPKG_BASENAME }}/changelog"
332 cat > "${DPKG_DIR}/usr/share/doc/${{ steps.vars.outputs.DPKG_BASENAME }}/copyright" <<EOF
333 Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
334 Upstream-Name: ${{ env.PROJECT_NAME }}
335 Source: ${{ env.PROJECT_HOMEPAGE }}
337 Files: *
338 Copyright: ${{ env.PROJECT_MAINTAINER }}
339 Copyright: $COPYRIGHT_YEARS ${{ env.PROJECT_MAINTAINER }}
340 License: Apache-2.0 or MIT
342 License: Apache-2.0
343 On Debian systems, the complete text of the Apache-2.0 can be found in the
344 file /usr/share/common-licenses/Apache-2.0.
346 License: MIT
347 Permission is hereby granted, free of charge, to any
348 person obtaining a copy of this software and associated
349 documentation files (the "Software"), to deal in the
350 Software without restriction, including without
351 limitation the rights to use, copy, modify, merge,
352 publish, distribute, sublicense, and/or sell copies of
353 the Software, and to permit persons to whom the Software
354 is furnished to do so, subject to the following
355 conditions:
356 .
357 The above copyright notice and this permission notice
358 shall be included in all copies or substantial portions
359 of the Software.
360 .
361 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
362 ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
363 TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
364 PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
365 SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
366 CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
367 OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
368 IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
369 DEALINGS IN THE SOFTWARE.
370 EOF
371 chmod 644 "${DPKG_DIR}/usr/share/doc/${{ steps.vars.outputs.DPKG_BASENAME }}/copyright"
373 # control file
374 mkdir -p "${DPKG_DIR}/DEBIAN"
375 cat > "${DPKG_DIR}/DEBIAN/control" <<EOF
376 Package: ${{ steps.vars.outputs.DPKG_BASENAME }}
377 Version: ${{ steps.vars.outputs.DPKG_VERSION }}
378 Section: utils
379 Priority: optional
380 Maintainer: ${{ env.PROJECT_MAINTAINER }}
381 Homepage: ${{ env.PROJECT_HOMEPAGE }}
382 Architecture: ${{ steps.vars.outputs.DPKG_ARCH }}
383 Depends: $DEPENDS
384 Provides: ${{ env.PROJECT_NAME }}
385 Conflicts: ${{ steps.vars.outputs.DPKG_CONFLICTS }}
386 Description: cat(1) clone with wings.
387 A cat(1) clone with syntax highlighting and Git integration.
388 EOF
390 # build dpkg
391 fakeroot dpkg-deb --build "${DPKG_DIR}" "${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.DPKG_NAME }}"
392 fi
393 - name: Publish archives and packages
394 uses: softprops/action-gh-release@v1
395 if: steps.vars.outputs.DEPLOY
396 with:
397 files: |
398 ${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.PKG_NAME }}
399 ${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.DPKG_NAME }}
400 env:
401 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
403 coverage:
404 name: Code Coverage
405 runs-on: ${{ matrix.job.os }}
406 strategy:
407 fail-fast: true
408 matrix:
409 # job: [ { os: ubuntu-latest }, { os: macos-latest }, { os: windows-latest } ]
410 job:
411 - { os: ubuntu-latest , toolchain: nightly-2020-04-29 }
412 - { os: macos-latest , toolchain: nightly-2020-04-29 }
413 - { os: windows-latest , toolchain: nightly-2020-04-29-x86_64-pc-windows-gnu }
414 steps:
415 - uses: actions/checkout@v2
416 - name: Initialize workflow variables
417 id: vars
418 shell: bash
419 run: |
420 # toolchain
421 TOOLCHAIN="nightly" ## default to "nightly" toolchain
422 # * use requested TOOLCHAIN if specified
423 if [ -n "${{ matrix.job.toolchain }}" ]; then TOOLCHAIN="${{ matrix.job.toolchain }}" ; fi
424 # * use requested TOOLCHAIN if specified
425 if [ -n "${{ matrix.job.toolchain }}" ]; then TOOLCHAIN="${{ matrix.job.toolchain }}" ; fi
426 echo set-output name=TOOLCHAIN::${TOOLCHAIN}
427 echo ::set-output name=TOOLCHAIN::${TOOLCHAIN}
428 # target-specific options
429 # * CODECOV_FLAGS
430 CODECOV_FLAGS=$( echo "${{ matrix.job.os }}" | sed 's/[^[:alnum:]]/_/g' )
431 echo set-output name=CODECOV_FLAGS::${CODECOV_FLAGS}
432 echo ::set-output name=CODECOV_FLAGS::${CODECOV_FLAGS}
433 - name: rust toolchain ~ install
434 uses: actions-rs/toolchain@v1
435 with:
436 toolchain: ${{ steps.vars.outputs.TOOLCHAIN }}
437 override: true
438 profile: minimal # minimal component installation (ie, no documentation)
439 - name: Test
440 uses: actions-rs/cargo@v1
441 with:
442 command: test
443 args: --no-fail-fast
444 env:
445 CARGO_INCREMENTAL: '0'
446 RUSTFLAGS: '-Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Zno-landing-pads'
447 - name: Generate coverage data
448 id: coverage
449 uses: actions-rs/grcov@v0.1
450 - name: Upload coverage results (to Codecov.io)
451 uses: codecov/codecov-action@v1
452 with:
453 file: ${{ steps.coverage.outputs.report }}
454 flags: ${{ steps.vars.outputs.CODECOV_FLAGS }}
455 name: codecov-umbrella
456 fail_ci_if_error: false