source: git/.github/workflows/ci-sage.yml @ 870afb

spielwiese
Last change on this file since 870afb was 870afb, checked in by Matthias Koeppe <mkoeppe@…>, 2 years ago
.github/workflows/ci-sage.yml: Remove build of pynac
  • Property mode set to 100644
File size: 20.7 KB
Line 
1name: Run Sage CI for Linux/Cygwin/macOS
2
3## This GitHub Actions workflow provides:
4##
5##  - portability testing, by building and testing this project on many platforms
6##    (Linux variants and Cygwin), each with two configurations (installed packages),
7##
8##  - continuous integration, by building and testing other software
9##    that depends on this project.
10##
11## It runs on every pull request and push of a tag to the GitHub repository.
12##
13## The testing can be monitored in the "Actions" tab of the GitHub repository.
14##
15## After all jobs have finished (or are canceled) and a short delay,
16## tar files of all logs are made available as "build artifacts".
17##
18## This GitHub Actions workflow uses the portability testing framework
19## of SageMath (https://www.sagemath.org/).  For more information, see
20## https://doc.sagemath.org/html/en/developer/portability_testing.html
21
22## The workflow consists of two jobs:
23##
24##  - First, it builds a source distribution of the project
25##    and generates a script "update-pkgs.sh".  It uploads them
26##    as a build artifact named upstream.
27##
28##  - Second, it checks out a copy of the SageMath source tree.
29##    It downloads the upstream artifact and replaces the project's
30##    package in the SageMath distribution by the newly packaged one
31##    from the upstream artifact, by running the script "update-pkgs.sh".
32##    Then it builds a small portion of the Sage distribution.
33##
34## Many copies of the second step are run in parallel for each of the tested
35## systems/configurations.
36
37#on: [push, pull_request]
38
39on:
40  pull_request:
41    types: [opened, synchronize]
42  push:
43    tags:
44      - '*'
45  workflow_dispatch:
46    # Allow to run manually
47
48env:
49  # Ubuntu packages to install so that the project's "make dist" can succeed
50  DIST_PREREQ: libcdd-dev
51  # Name of this project in the Sage distribution
52  SPKG:        singular
53  # Sage distribution packages to build
54  TARGETS_PRE: build/make/Makefile
55  TARGETS:     SAGE_CHECK=no SAGE_CHECK_PACKAGES=singular singular
56  TARGETS_OPTIONAL: SAGE_CHECK=no SAGE_CHECK_pysingular=warn pysingular
57  # Need texinfo for building the Singular documentation
58  EXTRA_SAGE_PACKAGES: info
59  # Standard setting: Test the current beta release of Sage:
60  SAGE_REPO:   sagemath/sage
61  SAGE_REF:    develop
62  # Temporarily test with the branch from a sage ticket which enables platforms with GCC 12
63  # (this is a no-op after that ticket is merged)
64  SAGE_TRAC_GIT: https://github.com/sagemath/sagetrac-mirror.git
65  SAGE_TICKET: 33160
66  REMOVE_PATCHES: "*"
67
68jobs:
69
70  dist:
71    runs-on: ubuntu-latest
72    steps:
73      - name: Check out ${{ env.SPKG }}
74        uses: actions/checkout@v2
75        with:
76          path: build/pkgs/${{ env.SPKG }}/src
77      - name: Install prerequisites
78        run: |
79          sudo DEBIAN_FRONTEND=noninteractive apt-get update
80          sudo DEBIAN_FRONTEND=noninteractive apt-get install $DIST_PREREQ
81      - name: Run make dist, prepare upstream artifact
82        run: |
83          (cd build/pkgs/${{ env.SPKG }}/src && (./autogen.sh && ./configure && make dist) ) \
84          && mkdir -p upstream && cp build/pkgs/${{ env.SPKG }}/src/*.tar.gz upstream/${{ env.SPKG }}-git.tar.gz \
85          && echo "sage-package create ${{ env.SPKG }} --version git --tarball ${{ env.SPKG }}-git.tar.gz --type=optional" > upstream/update-pkgs.sh \
86          && if [ -n "${{ env.REMOVE_PATCHES }}" ]; then echo "(cd ../build/pkgs/${{ env.SPKG }}/patches && rm -f ${{ env.REMOVE_PATCHES }}; :)" >> upstream/update-pkgs.sh; fi \
87          && echo 'echo ntl flint readline mpfr cddlib 4ti2 > ../build/pkgs/singular/dependencies' >> upstream/update-pkgs.sh \
88          && ls -l upstream/
89      - uses: actions/upload-artifact@v2
90        with:
91          path: upstream
92          name: upstream
93
94  kanarienvogel:
95    # Quick run for 1 platform first; do not run the other platforms when this already fails
96    runs-on: ubuntu-latest
97    needs: [dist]
98    strategy:
99      fail-fast: true
100      max-parallel: 4
101      matrix:
102        tox_system_factor: [ubuntu-focal]
103        tox_packages_factor: [standard]
104    env:
105      # Override so that this runs faster
106      TARGETS: SAGE_CHECK=no singular
107      TARGETS_OPTIONAL: build/make/Makefile
108    # The rest of this is identical to job "docker":
109      TOX_ENV: docker-${{ matrix.tox_system_factor }}-${{ matrix.tox_packages_factor }}
110      LOGS_ARTIFACT_NAME: logs-commit-${{ github.sha }}-tox-docker-${{ matrix.tox_system_factor }}-${{ matrix.tox_packages_factor }}
111      DOCKER_TARGETS: configured with-targets with-targets-optional
112    steps:
113      - name: Check out SageMath
114        uses: actions/checkout@v2
115        with:
116          repository: ${{ env.SAGE_REPO }}
117          ref: ${{ env.SAGE_REF }}
118          fetch-depth: 2000
119        if: env.SAGE_REPO != ''
120      - name: Check out git-trac-command
121        uses: actions/checkout@v2
122        with:
123          repository: sagemath/git-trac-command
124          path: git-trac-command
125        if: env.SAGE_TRAC_GIT != ''
126      - name: Check out SageMath from trac.sagemath.org
127        shell: bash {0}
128        run: |
129          git config --global user.email "ci-sage@example.com"
130          git config --global user.name "ci-sage workflow"
131          if [ ! -d .git ]; then git init; fi; git remote add trac ${{ env.SAGE_TRAC_GIT }} && x=1 && while [ $x -le 5 ]; do x=$(( $x + 1 )); sleep $(( $RANDOM % 60 + 1 )); if git-trac-command/git-trac fetch $SAGE_TICKET; then git merge FETCH_HEAD || echo "(ignored)"; exit 0; fi; sleep 40; done; exit 1
132        if: env.SAGE_TRAC_GIT != ''
133      - uses: actions/download-artifact@v2
134        with:
135          path: upstream
136          name: upstream
137      - name: Install test prerequisites
138        run: |
139          sudo DEBIAN_FRONTEND=noninteractive apt-get update
140          sudo DEBIAN_FRONTEND=noninteractive apt-get install tox python3-setuptools
141      - name: Update Sage packages from upstream artifact
142        run: |
143          (export PATH=$(pwd)/build/bin:$PATH; (cd upstream && bash -x update-pkgs.sh) && sed -i.bak '/upstream/d' .dockerignore && echo "/:toolchain:/i ADD upstream upstream" | sed -i.bak -f - build/bin/write-dockerfile.sh && git diff)
144      - name: Configure and build Sage distribution within a Docker container
145        run: |
146          set -o pipefail; EXTRA_DOCKER_BUILD_ARGS="--build-arg USE_MAKEFLAGS=\"-k V=0 SAGE_NUM_THREADS=3\"" tox -e $TOX_ENV -- $TARGETS 2>&1 | sed "/^configure: notice:/s|^|::warning file=artifacts/$LOGS_ARTIFACT_NAME/config.log::|;/^configure: warning:/s|^|::warning file=artifacts/$LOGS_ARTIFACT_NAME/config.log::|;/^configure: error:/s|^|::error file=artifacts/$LOGS_ARTIFACT_NAME/config.log::|;"
147      - name: Copy logs from the Docker image or build container
148        run: |
149          mkdir -p "artifacts/$LOGS_ARTIFACT_NAME"
150          cp -r .tox/$TOX_ENV/Dockerfile .tox/$TOX_ENV/log "artifacts/$LOGS_ARTIFACT_NAME"
151          if [ -f .tox/$TOX_ENV/Dockertags ]; then CONTAINERS=$(docker create $(tail -1 .tox/$TOX_ENV/Dockertags) /bin/bash || true); fi
152          if [ -n "$CONTAINERS" ]; then for CONTAINER in $CONTAINERS; do for ARTIFACT in /sage/logs; do docker cp $CONTAINER:$ARTIFACT artifacts/$LOGS_ARTIFACT_NAME && HAVE_LOG=1; done; if [ -n "$HAVE_LOG" ]; then break; fi; done; fi
153        if: always()
154      - uses: actions/upload-artifact@v2
155        with:
156          path: artifacts
157          name: ${{ env.LOGS_ARTIFACT_NAME }}
158        if: always()
159      - name: Print out logs for immediate inspection
160        # and markup the output with GitHub Actions logging commands
161        run: |
162          .github/workflows/scan-logs.sh "artifacts/$LOGS_ARTIFACT_NAME"
163        if: always()
164      - name: Push Docker images
165        run: |
166          if [ -f .tox/$TOX_ENV/Dockertags ]; then
167            TOKEN="${{ secrets.DOCKER_PKG_GITHUB_TOKEN }}"
168            if [ -z "$TOKEN" ]; then
169              TOKEN="${{ secrets.GITHUB_TOKEN }}"
170            fi
171            echo "$TOKEN" | docker login docker.pkg.github.com -u ${{ github.actor }} --password-stdin
172            for a in $(cat .tox/$TOX_ENV/Dockertags); do
173              FULL_TAG=docker.pkg.github.com/$(echo ${{ github.repository }}|tr 'A-Z' 'a-z')/$a
174              docker tag $a $FULL_TAG
175              echo Pushing $FULL_TAG
176              docker push $FULL_TAG
177            done || echo "(Ignoring errors)"
178          fi
179        if: always()
180
181  schwanenfenster:
182    env:
183      STAGE: i-a
184      LOCAL_ARTIFACT_NAME: sage-local-commit-${{ github.sha }}-cygwin-${{ matrix.pkgs }}
185      LOGS_ARTIFACT_NAME: logs-commit-${{ github.sha }}-cygwin-${{ matrix.pkgs }}
186      MAKE: make -j8
187      SAGE_NUM_THREADS: 3
188      SAGE_CHECK: yes
189      SAGE_CHECK_PACKAGES: "!cython,!r,!python3,!python2,!nose,!pathpy,!gap,!cysignals,!linbox,!git,!ppl"
190      CYGWIN: winsymlinks:native
191      CONFIGURE_ARGS: --enable-experimental-packages --enable-download-from-upstream-url
192      SAGE_FAT_BINARY: yes
193      SAGE_LOCAL: /opt/sage-singular-${{ github.sha }}
194
195    runs-on: windows-latest
196
197    needs: [dist]
198
199    strategy:
200      fail-fast: false
201      matrix:
202        pkgs: [minimal, standard]
203    steps:
204    - run: |
205        git config --global core.autocrlf false
206        git config --global core.symlinks true
207    - name: install cygwin with choco
208      shell: bash {0}
209      run: |
210        choco --version
211        choco install git python3 --source cygwin
212    - name: Check out SageMath
213      uses: actions/checkout@v2
214      with:
215        repository: ${{ env.SAGE_REPO }}
216        ref: ${{ env.SAGE_REF }}
217        fetch-depth: 2000
218      if: env.SAGE_REPO != ''
219    - name: Check out git-trac-command
220      uses: actions/checkout@v2
221      with:
222        repository: sagemath/git-trac-command
223        path: git-trac-command
224      if: env.SAGE_TRAC_GIT != ''
225    - name: Check out SageMath from trac.sagemath.org
226      shell: bash {0}
227      # Random sleep and retry to limit the load on trac.sagemath.org
228      run: |
229        git config --global user.email "ci-sage@example.com"
230        git config --global user.name "ci-sage workflow"
231        if [ ! -d .git ]; then git init; fi; git remote add trac ${{ env.SAGE_TRAC_GIT }} && x=1 && while [ $x -le 5 ]; do x=$(( $x + 1 )); sleep $(( $RANDOM % 60 + 1 )); if git-trac-command/git-trac fetch $SAGE_TICKET; then git merge FETCH_HEAD || echo "(ignored)"; exit 0; fi; sleep 40; done; exit 1
232      if: env.SAGE_TRAC_GIT != ''
233    - uses: actions/download-artifact@v2
234      with:
235        path: upstream
236        name: upstream
237    - name: install minimal prerequisites with choco
238      shell: bash {0}
239      run: |
240        choco --version
241        PACKAGES="python38 python38-pip"
242        choco install $PACKAGES --source cygwin
243    - name: Update Sage packages from upstream artifact
244      run: |
245        C:\\tools\\cygwin\\bin\\bash -l -c 'cd $(cygpath -u "$GITHUB_WORKSPACE") && ls -l upstream/ && export PATH="$(pwd)/build/bin:$PATH:/usr/local/bin:/usr/bin" && (cd upstream && bash -x update-pkgs.sh) && git diff'
246    - name: tox
247      run: |
248        C:\\tools\\cygwin\\bin\\bash -l -x -c 'python3.8 -m pip install tox'
249        C:\\tools\\cygwin\\bin\\bash -l -x -c 'cd $(cygpath -u "$GITHUB_WORKSPACE") && PREFIX="${{ env.SAGE_LOCAL }}" tox -e local-cygwin-choco-${{ matrix.pkgs }} -- $TARGETS'
250    - name: Prepare logs artifact
251      shell: bash
252      run: |
253        mkdir -p "artifacts/$LOGS_ARTIFACT_NAME"; for a in local/var/tmp/sage/build/*; do if [ -d $a ]; then tar -c --remove-files -f "artifacts/$LOGS_ARTIFACT_NAME/$(basename $a).tar" $a || tar -c --ignore-failed-read -f "artifacts/$LOGS_ARTIFACT_NAME/$(basename $a)-save.tar" $a ; fi; done; cp -r logs/*  "artifacts/$LOGS_ARTIFACT_NAME"
254      if: always()
255    - uses: actions/upload-artifact@v2
256      with:
257        path: artifacts
258        name: ${{ env.LOGS_ARTIFACT_NAME }}
259      if: always()
260    - name: Print out logs for immediate inspection
261      # The markup in the output is a GitHub Actions logging command
262      # https://help.github.com/en/actions/automating-your-workflow-with-github-actions/development-tools-for-github-actions
263      shell: bash
264      run: |
265        find "artifacts/$LOGS_ARTIFACT_NAME" -type f -name "*.log" -exec sh -c 'if tail -20 "{}" 2>/dev/null | grep "^Error" >/dev/null; then echo :":"error file={}:":" ==== LOG FILE {} CONTAINS AN ERROR ====; cat {} ; fi' \;
266      if: always()
267    - name: Prepare sage-local artifact
268      # We specifically use the cygwin tar so that symlinks are saved/restored correctly on Windows.
269      # We remove the $SAGE_LOCAL/lib64 link, which will be recreated by the next stage.
270      run: |
271        C:\\tools\\cygwin\\bin\\bash -l -c 'cd $(cygpath -u "$GITHUB_WORKSPACE") && rm -f "${{ env.SAGE_LOCAL }}"/lib64; tar -cf /tmp/sage-local-${{ env.STAGE }}.tar --remove-files "${{ env.SAGE_LOCAL }}"'
272      if: always()
273    - uses: actions/upload-artifact@v2
274      # upload-artifact@v2 does not support whitespace in file names.
275      # so we tar up the directory ourselves
276      with:
277        path: C:\\tools\\cygwin\\tmp\\sage-local-${{ env.STAGE }}.tar
278        name: ${{ env.LOCAL_ARTIFACT_NAME }}
279      if: always()
280
281  docker:
282    runs-on: ubuntu-latest
283    needs: [dist, kanarienvogel]
284    strategy:
285      fail-fast: false
286      max-parallel: 32
287      matrix:
288        tox_system_factor: [ubuntu-trusty, ubuntu-xenial, ubuntu-bionic, ubuntu-focal, ubuntu-hirsute, ubuntu-impish, ubuntu-jammy, debian-stretch, debian-buster, debian-bullseye, debian-bookworm, debian-sid, linuxmint-17, linuxmint-18, linuxmint-19, linuxmint-19.3, linuxmint-20.1, linuxmint-20.2, linuxmint-20.3, fedora-26, fedora-27, fedora-28, fedora-29, fedora-30, fedora-31, fedora-32, fedora-33, fedora-34, fedora-35, fedora-36, centos-7, centos-8, gentoo, archlinux-latest, opensuse-15, opensuse-15.3, opensuse-tumbleweed, slackware-14.2, conda-forge, ubuntu-bionic-i386, manylinux-2_24-i686, debian-buster-i386, centos-7-i386, raspbian-buster-armhf]
289        tox_packages_factor: [minimal, standard]
290    env:
291      TOX_ENV: docker-${{ matrix.tox_system_factor }}-${{ matrix.tox_packages_factor }}
292      LOGS_ARTIFACT_NAME: logs-commit-${{ github.sha }}-tox-docker-${{ matrix.tox_system_factor }}-${{ matrix.tox_packages_factor }}
293      DOCKER_TARGETS: configured with-targets with-targets-optional
294    steps:
295      - name: Check out SageMath
296        uses: actions/checkout@v2
297        with:
298          repository: ${{ env.SAGE_REPO }}
299          ref: ${{ env.SAGE_REF }}
300          fetch-depth: 2000
301        if: env.SAGE_REPO != ''
302      - name: Check out git-trac-command
303        uses: actions/checkout@v2
304        with:
305          repository: sagemath/git-trac-command
306          path: git-trac-command
307        if: env.SAGE_TRAC_GIT != ''
308      - name: Check out SageMath from trac.sagemath.org
309        shell: bash {0}
310        run: |
311          git config --global user.email "ci-sage@example.com"
312          git config --global user.name "ci-sage workflow"
313          if [ ! -d .git ]; then git init; fi; git remote add trac ${{ env.SAGE_TRAC_GIT }} && x=1 && while [ $x -le 5 ]; do x=$(( $x + 1 )); sleep $(( $RANDOM % 60 + 1 )); if git-trac-command/git-trac fetch $SAGE_TICKET; then git merge FETCH_HEAD || echo "(ignored)"; exit 0; fi; sleep 40; done; exit 1
314        if: env.SAGE_TRAC_GIT != ''
315      - uses: actions/download-artifact@v2
316        with:
317          path: upstream
318          name: upstream
319      - name: Install test prerequisites
320        run: |
321          sudo DEBIAN_FRONTEND=noninteractive apt-get update
322          sudo DEBIAN_FRONTEND=noninteractive apt-get install tox python3-setuptools
323      - name: Update Sage packages from upstream artifact
324        run: |
325          (export PATH=$(pwd)/build/bin:$PATH; (cd upstream && bash -x update-pkgs.sh) && sed -i.bak '/upstream/d' .dockerignore && echo "/:toolchain:/i ADD upstream upstream" | sed -i.bak -f - build/bin/write-dockerfile.sh && git diff)
326      - name: Configure and build Sage distribution within a Docker container
327        run: |
328          set -o pipefail; EXTRA_DOCKER_BUILD_ARGS="--build-arg USE_MAKEFLAGS=\"-k V=0 SAGE_NUM_THREADS=3\"" tox -e $TOX_ENV -- $TARGETS 2>&1 | sed "/^configure: notice:/s|^|::warning file=artifacts/$LOGS_ARTIFACT_NAME/config.log::|;/^configure: warning:/s|^|::warning file=artifacts/$LOGS_ARTIFACT_NAME/config.log::|;/^configure: error:/s|^|::error file=artifacts/$LOGS_ARTIFACT_NAME/config.log::|;"
329      - name: Copy logs from the Docker image or build container
330        run: |
331          mkdir -p "artifacts/$LOGS_ARTIFACT_NAME"
332          cp -r .tox/$TOX_ENV/Dockerfile .tox/$TOX_ENV/log "artifacts/$LOGS_ARTIFACT_NAME"
333          if [ -f .tox/$TOX_ENV/Dockertags ]; then CONTAINERS=$(docker create $(tail -1 .tox/$TOX_ENV/Dockertags) /bin/bash || true); fi
334          if [ -n "$CONTAINERS" ]; then for CONTAINER in $CONTAINERS; do for ARTIFACT in /sage/logs; do docker cp $CONTAINER:$ARTIFACT artifacts/$LOGS_ARTIFACT_NAME && HAVE_LOG=1; done; if [ -n "$HAVE_LOG" ]; then break; fi; done; fi
335        if: always()
336      - uses: actions/upload-artifact@v2
337        with:
338          path: artifacts
339          name: ${{ env.LOGS_ARTIFACT_NAME }}
340        if: always()
341      - name: Print out logs for immediate inspection
342        # and markup the output with GitHub Actions logging commands
343        run: |
344          .github/workflows/scan-logs.sh "artifacts/$LOGS_ARTIFACT_NAME"
345        if: always()
346      - name: Push Docker images
347        run: |
348          if [ -f .tox/$TOX_ENV/Dockertags ]; then
349            TOKEN="${{ secrets.DOCKER_PKG_GITHUB_TOKEN }}"
350            if [ -z "$TOKEN" ]; then
351              TOKEN="${{ secrets.GITHUB_TOKEN }}"
352            fi
353            echo "$TOKEN" | docker login docker.pkg.github.com -u ${{ github.actor }} --password-stdin
354            for a in $(cat .tox/$TOX_ENV/Dockertags); do
355              FULL_TAG=docker.pkg.github.com/$(echo ${{ github.repository }}|tr 'A-Z' 'a-z')/$a
356              docker tag $a $FULL_TAG
357              echo Pushing $FULL_TAG
358              docker push $FULL_TAG
359            done || echo "(Ignoring errors)"
360          fi
361        if: always()
362
363  macos:
364
365    runs-on: macos-latest
366    strategy:
367      fail-fast: false
368      max-parallel: 4
369      matrix:
370        os: [ macos-10.15, macos-11.0 ]
371        tox_system_factor: [homebrew-macos, conda-forge-macos]
372        tox_packages_factor: [minimal, standard]
373        xcode_version_factor: [11.7, default]
374
375    needs: [dist, kanarienvogel]
376
377    env:
378      TOX_ENV: local-${{ matrix.tox_system_factor }}-${{ matrix.tox_packages_factor }}
379      LOGS_ARTIFACT_NAME: logs-commit-${{ github.sha }}-tox-local-${{ matrix.tox_system_factor }}-${{ matrix.tox_packages_factor }}-${{ matrix.os }}-xcode_${{ matrix.xcode_version_factor }}
380      DOCKER_TARGETS: configured with-targets with-targets-optional
381
382    steps:
383
384      - name: Select Xcode version
385        run: |
386          if [ ${{ matrix.xcode_version_factor }} != default ]; then sudo xcode-select -s /Applications/Xcode_${{ matrix.xcode_version_factor }}.app; fi
387      - name: Check out SageMath
388        uses: actions/checkout@v2
389        with:
390          repository: ${{ env.SAGE_REPO }}
391          ref: ${{ env.SAGE_REF }}
392          fetch-depth: 2000
393        if: env.SAGE_REPO != ''
394      - name: Check out git-trac-command
395        uses: actions/checkout@v2
396        with:
397          repository: sagemath/git-trac-command
398          path: git-trac-command
399        if: env.SAGE_TRAC_GIT != ''
400      - name: Check out SageMath from trac.sagemath.org
401        shell: bash {0}
402        run: |
403          git config --global user.email "ci-sage@example.com"
404          git config --global user.name "ci-sage workflow"
405          if [ ! -d .git ]; then git init; fi; git remote add trac ${{ env.SAGE_TRAC_GIT }} && x=1 && while [ $x -le 5 ]; do x=$(( $x + 1 )); sleep $(( $RANDOM % 60 + 1 )); if git-trac-command/git-trac fetch $SAGE_TICKET; then git merge FETCH_HEAD || echo "(ignored)"; exit 0; fi; sleep 40; done; exit 1
406        if: env.SAGE_TRAC_GIT != ''
407      - uses: actions/download-artifact@v2
408        with:
409          path: upstream
410          name: upstream
411      - name: Update Sage packages from upstream artifact
412        run: |
413          (export PATH=$(pwd)/build/bin:$PATH; (cd upstream && bash -x update-pkgs.sh) && git diff)
414
415      - name: Install test prerequisites
416        run: |
417          brew install tox
418      - name: Build and test with tox
419        # We use a high parallelization on purpose in order to catch possible parallelization bugs in the build scripts.
420        # For doctesting, we use a lower parallelization to avoid timeouts.
421        run: |
422          MAKE="make -j12" tox -e $TOX_ENV -- SAGE_NUM_THREADS=4 $TARGETS
423      - name: Prepare logs artifact
424        run: |
425          mkdir -p "artifacts/$LOGS_ARTIFACT_NAME"; cp -r .tox/*/log "artifacts/$LOGS_ARTIFACT_NAME"
426        if: always()
427      - uses: actions/upload-artifact@v1
428        with:
429          path: artifacts
430          name: ${{ env.LOGS_ARTIFACT_NAME }}
431        if: always()
432      - name: Print out logs for immediate inspection
433        # and markup the output with GitHub Actions logging commands
434        run: |
435          .github/workflows/scan-logs.sh "artifacts/$LOGS_ARTIFACT_NAME"
436        if: always()
Note: See TracBrowser for help on using the repository browser.