Delete bin directory #37
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build | |
| on: | |
| push: | |
| branches: [ main, master ] | |
| paths-ignore: | |
| - logs/** | |
| pull_request: | |
| branches: [ main, master ] | |
| paths-ignore: | |
| - logs/** | |
| workflow_dispatch: | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| win_x86_64_msvc: | |
| name: Windows x86_64 MSVC | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: win | |
| variant: x86_64-msvc | |
| runner: windows-2022 | |
| win_x86_msvc: | |
| name: Windows x86 MSVC | |
| needs: [win_x86_64_msvc] | |
| if: always() | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: win | |
| variant: x86-msvc | |
| runner: windows-2022 | |
| should_build: ${{ needs.win_x86_64_msvc.result == 'success' && needs.win_x86_64_msvc.outputs.continue_queue == 'true' }} | |
| blocked_by: ${{ needs.win_x86_64_msvc.outputs.blocking_variant || 'Windows x86_64 MSVC' }} | |
| blocked_status: ${{ needs.win_x86_64_msvc.outputs.blocking_status || needs.win_x86_64_msvc.result }} | |
| win_arm64_msvc: | |
| name: Windows arm64 MSVC | |
| needs: [win_x86_msvc] | |
| if: always() | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: win | |
| variant: arm64-msvc | |
| runner: windows-2022 | |
| should_build: ${{ needs.win_x86_msvc.result == 'success' && needs.win_x86_msvc.outputs.continue_queue == 'true' }} | |
| blocked_by: ${{ needs.win_x86_msvc.outputs.blocking_variant || 'Windows x86 MSVC' }} | |
| blocked_status: ${{ needs.win_x86_msvc.outputs.blocking_status || needs.win_x86_msvc.result }} | |
| win_x86_64_mingw: | |
| name: Windows x86_64 MinGW | |
| needs: [win_arm64_msvc] | |
| if: always() | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: win | |
| variant: x86_64-mingw | |
| runner: windows-2022 | |
| should_build: ${{ needs.win_arm64_msvc.result == 'success' && needs.win_arm64_msvc.outputs.continue_queue == 'true' }} | |
| blocked_by: ${{ needs.win_arm64_msvc.outputs.blocking_variant || 'Windows arm64 MSVC' }} | |
| blocked_status: ${{ needs.win_arm64_msvc.outputs.blocking_status || needs.win_arm64_msvc.result }} | |
| win_x86_mingw: | |
| name: Windows x86 MinGW | |
| needs: [win_x86_64_mingw] | |
| if: always() | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: win | |
| variant: x86-mingw | |
| runner: windows-2022 | |
| should_build: ${{ needs.win_x86_64_mingw.result == 'success' && needs.win_x86_64_mingw.outputs.continue_queue == 'true' }} | |
| blocked_by: ${{ needs.win_x86_64_mingw.outputs.blocking_variant || 'Windows x86_64 MinGW' }} | |
| blocked_status: ${{ needs.win_x86_64_mingw.outputs.blocking_status || needs.win_x86_64_mingw.result }} | |
| win_armv7_msvc: | |
| name: Windows ARMv7 MSVC | |
| needs: [win_x86_mingw] | |
| if: always() | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: win | |
| variant: armv7-msvc | |
| runner: windows-2022 | |
| should_build: ${{ needs.win_x86_mingw.result == 'success' && needs.win_x86_mingw.outputs.continue_queue == 'true' }} | |
| blocked_by: ${{ needs.win_x86_mingw.outputs.blocking_variant || 'Windows x86 MinGW' }} | |
| blocked_status: ${{ needs.win_x86_mingw.outputs.blocking_status || needs.win_x86_mingw.result }} | |
| linux_glibc_x86_64: | |
| name: Linux glibc x86_64 | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: linux-glibc | |
| variant: x86_64 | |
| runner: ubuntu-24.04 | |
| linux_glibc_x86: | |
| name: Linux glibc x86 | |
| needs: [linux_glibc_x86_64] | |
| if: always() | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: linux-glibc | |
| variant: x86 | |
| runner: ubuntu-24.04 | |
| should_build: ${{ needs.linux_glibc_x86_64.result == 'success' && needs.linux_glibc_x86_64.outputs.continue_queue == 'true' }} | |
| blocked_by: ${{ needs.linux_glibc_x86_64.outputs.blocking_variant || 'Linux glibc x86_64' }} | |
| blocked_status: ${{ needs.linux_glibc_x86_64.outputs.blocking_status || needs.linux_glibc_x86_64.result }} | |
| linux_glibc_arm64: | |
| name: Linux glibc arm64 | |
| needs: [linux_glibc_x86] | |
| if: always() | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: linux-glibc | |
| variant: arm64 | |
| runner: ubuntu-24.04 | |
| should_build: ${{ needs.linux_glibc_x86.result == 'success' && needs.linux_glibc_x86.outputs.continue_queue == 'true' }} | |
| blocked_by: ${{ needs.linux_glibc_x86.outputs.blocking_variant || 'Linux glibc x86' }} | |
| blocked_status: ${{ needs.linux_glibc_x86.outputs.blocking_status || needs.linux_glibc_x86.result }} | |
| linux_glibc_armv7: | |
| name: Linux glibc armv7 | |
| needs: [linux_glibc_arm64] | |
| if: always() | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: linux-glibc | |
| variant: armv7 | |
| runner: ubuntu-24.04 | |
| should_build: ${{ needs.linux_glibc_arm64.result == 'success' && needs.linux_glibc_arm64.outputs.continue_queue == 'true' }} | |
| blocked_by: ${{ needs.linux_glibc_arm64.outputs.blocking_variant || 'Linux glibc arm64' }} | |
| blocked_status: ${{ needs.linux_glibc_arm64.outputs.blocking_status || needs.linux_glibc_arm64.result }} | |
| linux_glibc_riscv64: | |
| name: Linux glibc riscv64 | |
| needs: [linux_glibc_armv7] | |
| if: always() | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: linux-glibc | |
| variant: riscv64 | |
| runner: ubuntu-24.04 | |
| should_build: ${{ needs.linux_glibc_armv7.result == 'success' && needs.linux_glibc_armv7.outputs.continue_queue == 'true' }} | |
| blocked_by: ${{ needs.linux_glibc_armv7.outputs.blocking_variant || 'Linux glibc armv7' }} | |
| blocked_status: ${{ needs.linux_glibc_armv7.outputs.blocking_status || needs.linux_glibc_armv7.result }} | |
| linux_glibc_s390x: | |
| name: Linux glibc s390x | |
| needs: [linux_glibc_riscv64] | |
| if: always() | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: linux-glibc | |
| variant: s390x | |
| runner: ubuntu-24.04 | |
| should_build: ${{ needs.linux_glibc_riscv64.result == 'success' && needs.linux_glibc_riscv64.outputs.continue_queue == 'true' }} | |
| blocked_by: ${{ needs.linux_glibc_riscv64.outputs.blocking_variant || 'Linux glibc riscv64' }} | |
| blocked_status: ${{ needs.linux_glibc_riscv64.outputs.blocking_status || needs.linux_glibc_riscv64.result }} | |
| linux_glibc_ppc64le: | |
| name: Linux glibc ppc64le | |
| needs: [linux_glibc_s390x] | |
| if: always() | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: linux-glibc | |
| variant: ppc64le | |
| runner: ubuntu-24.04 | |
| should_build: ${{ needs.linux_glibc_s390x.result == 'success' && needs.linux_glibc_s390x.outputs.continue_queue == 'true' }} | |
| blocked_by: ${{ needs.linux_glibc_s390x.outputs.blocking_variant || 'Linux glibc s390x' }} | |
| blocked_status: ${{ needs.linux_glibc_s390x.outputs.blocking_status || needs.linux_glibc_s390x.result }} | |
| linux_glibc_loongarch64: | |
| name: Linux glibc loongarch64 | |
| needs: [linux_glibc_ppc64le] | |
| if: always() | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: linux-glibc | |
| variant: loongarch64 | |
| runner: ubuntu-24.04 | |
| should_build: ${{ needs.linux_glibc_ppc64le.result == 'success' && needs.linux_glibc_ppc64le.outputs.continue_queue == 'true' }} | |
| blocked_by: ${{ needs.linux_glibc_ppc64le.outputs.blocking_variant || 'Linux glibc ppc64le' }} | |
| blocked_status: ${{ needs.linux_glibc_ppc64le.outputs.blocking_status || needs.linux_glibc_ppc64le.result }} | |
| linux_musl_x86_64: | |
| name: Linux musl x86_64 | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: linux-musl | |
| variant: x86_64 | |
| runner: ubuntu-24.04 | |
| linux_musl_arm64: | |
| name: Linux musl arm64 | |
| needs: [linux_musl_x86_64] | |
| if: always() | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: linux-musl | |
| variant: arm64 | |
| runner: ubuntu-24.04 | |
| should_build: ${{ needs.linux_musl_x86_64.result == 'success' && needs.linux_musl_x86_64.outputs.continue_queue == 'true' }} | |
| blocked_by: ${{ needs.linux_musl_x86_64.outputs.blocking_variant || 'Linux musl x86_64' }} | |
| blocked_status: ${{ needs.linux_musl_x86_64.outputs.blocking_status || needs.linux_musl_x86_64.result }} | |
| linux_musl_armv7: | |
| name: Linux musl armv7 | |
| needs: [linux_musl_arm64] | |
| if: always() | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: linux-musl | |
| variant: armv7 | |
| runner: ubuntu-24.04 | |
| should_build: ${{ needs.linux_musl_arm64.result == 'success' && needs.linux_musl_arm64.outputs.continue_queue == 'true' }} | |
| blocked_by: ${{ needs.linux_musl_arm64.outputs.blocking_variant || 'Linux musl arm64' }} | |
| blocked_status: ${{ needs.linux_musl_arm64.outputs.blocking_status || needs.linux_musl_arm64.result }} | |
| macos_x86_64: | |
| name: macOS x86_64 | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: macos | |
| variant: x86_64 | |
| runner: macos-14 | |
| macos_arm64: | |
| name: macOS arm64 | |
| needs: [macos_x86_64] | |
| if: always() | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: macos | |
| variant: arm64 | |
| runner: macos-14 | |
| should_build: ${{ needs.macos_x86_64.result == 'success' && needs.macos_x86_64.outputs.continue_queue == 'true' }} | |
| blocked_by: ${{ needs.macos_x86_64.outputs.blocking_variant || 'macOS x86_64' }} | |
| blocked_status: ${{ needs.macos_x86_64.outputs.blocking_status || needs.macos_x86_64.result }} | |
| macos_universal: | |
| name: macOS universal | |
| needs: [macos_arm64] | |
| if: always() | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: macos | |
| variant: universal | |
| runner: macos-14 | |
| should_build: ${{ needs.macos_arm64.result == 'success' && needs.macos_arm64.outputs.continue_queue == 'true' }} | |
| blocked_by: ${{ needs.macos_arm64.outputs.blocking_variant || 'macOS arm64' }} | |
| blocked_status: ${{ needs.macos_arm64.outputs.blocking_status || needs.macos_arm64.result }} | |
| wasm_emscripten_wasm32: | |
| name: WASM emscripten-wasm32 | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: wasm | |
| variant: emscripten-wasm32 | |
| runner: ubuntu-24.04 | |
| wasm_wasi_wasm32: | |
| name: WASM wasi-wasm32 | |
| needs: [wasm_emscripten_wasm32] | |
| if: always() | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: wasm | |
| variant: wasi-wasm32 | |
| runner: ubuntu-24.04 | |
| should_build: ${{ needs.wasm_emscripten_wasm32.result == 'success' && needs.wasm_emscripten_wasm32.outputs.continue_queue == 'true' }} | |
| blocked_by: ${{ needs.wasm_emscripten_wasm32.outputs.blocking_variant || 'WASM emscripten-wasm32' }} | |
| blocked_status: ${{ needs.wasm_emscripten_wasm32.outputs.blocking_status || needs.wasm_emscripten_wasm32.result }} | |
| android_arm64_v8a: | |
| name: Android arm64-v8a | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: android | |
| variant: arm64-v8a | |
| runner: ubuntu-24.04 | |
| android_armeabi_v7a: | |
| name: Android armeabi-v7a | |
| needs: [android_arm64_v8a] | |
| if: always() | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: android | |
| variant: armeabi-v7a | |
| runner: ubuntu-24.04 | |
| should_build: ${{ needs.android_arm64_v8a.result == 'success' && needs.android_arm64_v8a.outputs.continue_queue == 'true' }} | |
| blocked_by: ${{ needs.android_arm64_v8a.outputs.blocking_variant || 'Android arm64-v8a' }} | |
| blocked_status: ${{ needs.android_arm64_v8a.outputs.blocking_status || needs.android_arm64_v8a.result }} | |
| android_x86_64: | |
| name: Android x86_64 | |
| needs: [android_armeabi_v7a] | |
| if: always() | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: android | |
| variant: x86_64 | |
| runner: ubuntu-24.04 | |
| should_build: ${{ needs.android_armeabi_v7a.result == 'success' && needs.android_armeabi_v7a.outputs.continue_queue == 'true' }} | |
| blocked_by: ${{ needs.android_armeabi_v7a.outputs.blocking_variant || 'Android armeabi-v7a' }} | |
| blocked_status: ${{ needs.android_armeabi_v7a.outputs.blocking_status || needs.android_armeabi_v7a.result }} | |
| android_x86: | |
| name: Android x86 | |
| needs: [android_x86_64] | |
| if: always() | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: android | |
| variant: x86 | |
| runner: ubuntu-24.04 | |
| should_build: ${{ needs.android_x86_64.result == 'success' && needs.android_x86_64.outputs.continue_queue == 'true' }} | |
| blocked_by: ${{ needs.android_x86_64.outputs.blocking_variant || 'Android x86_64' }} | |
| blocked_status: ${{ needs.android_x86_64.outputs.blocking_status || needs.android_x86_64.result }} | |
| ios_device_arm64: | |
| name: iOS device arm64 | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: ios | |
| variant: device-arm64 | |
| runner: macos-14 | |
| ios_sim_arm64: | |
| name: iOS simulator arm64 | |
| needs: [ios_device_arm64] | |
| if: always() | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: ios | |
| variant: sim-arm64 | |
| runner: macos-14 | |
| should_build: ${{ needs.ios_device_arm64.result == 'success' && needs.ios_device_arm64.outputs.continue_queue == 'true' }} | |
| blocked_by: ${{ needs.ios_device_arm64.outputs.blocking_variant || 'iOS device arm64' }} | |
| blocked_status: ${{ needs.ios_device_arm64.outputs.blocking_status || needs.ios_device_arm64.result }} | |
| ios_sim_x86_64: | |
| name: iOS simulator x86_64 | |
| needs: [ios_sim_arm64] | |
| if: always() | |
| uses: ./.github/workflows/build-variant.yml | |
| with: | |
| platform: ios | |
| variant: sim-x86_64 | |
| runner: macos-14 | |
| should_build: ${{ needs.ios_sim_arm64.result == 'success' && needs.ios_sim_arm64.outputs.continue_queue == 'true' }} | |
| blocked_by: ${{ needs.ios_sim_arm64.outputs.blocking_variant || 'iOS simulator arm64' }} | |
| blocked_status: ${{ needs.ios_sim_arm64.outputs.blocking_status || needs.ios_sim_arm64.result }} | |
| collect: | |
| name: Collect and publish outputs | |
| needs: | |
| - win_armv7_msvc | |
| - linux_glibc_loongarch64 | |
| - linux_musl_armv7 | |
| - macos_universal | |
| - wasm_wasi_wasm32 | |
| - android_x86 | |
| - ios_sim_x86_64 | |
| if: always() | |
| runs-on: ubuntu-24.04 | |
| permissions: | |
| contents: write | |
| steps: | |
| - uses: actions/checkout@v6 | |
| timeout-minutes: 25 | |
| with: | |
| fetch-depth: 0 | |
| - name: Download all log artifacts | |
| timeout-minutes: 25 | |
| uses: actions/download-artifact@v8 | |
| with: | |
| pattern: logs__* | |
| path: _ci_logs_artifacts/ | |
| merge-multiple: false | |
| - name: Download all successful binary artifacts | |
| timeout-minutes: 25 | |
| continue-on-error: true | |
| uses: actions/download-artifact@v8 | |
| with: | |
| pattern: nextssl__* | |
| path: _ci_bin_artifacts/ | |
| merge-multiple: false | |
| - name: Merge log artifacts | |
| timeout-minutes: 25 | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| python3 build/ci_merge_logs.py _ci_logs_artifacts merged-logs | |
| - name: Merge successful binary artifacts | |
| timeout-minutes: 25 | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| python3 build/ci_merge_bins.py _ci_bin_artifacts merged-bins | |
| - name: Upload all-logs | |
| timeout-minutes: 25 | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: all-logs | |
| path: merged-logs/ | |
| retention-days: 30 | |
| if-no-files-found: error | |
| - name: Upload all-bins | |
| timeout-minutes: 25 | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: all-bins | |
| path: merged-bins/ | |
| retention-days: 30 | |
| if-no-files-found: warn | |
| - name: Determine publish target | |
| id: publish_target | |
| timeout-minutes: 25 | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| if [ "${{ github.event_name }}" = "pull_request" ]; then | |
| echo "should_publish=false" >> "${GITHUB_OUTPUT}" | |
| echo "publish_state=artifact-only" >> "${GITHUB_OUTPUT}" | |
| echo "reason=pull request runs upload artifacts only" >> "${GITHUB_OUTPUT}" | |
| elif [ "${{ github.ref_name }}" = "main" ] || [ "${{ github.ref_name }}" = "master" ]; then | |
| echo "should_publish=true" >> "${GITHUB_OUTPUT}" | |
| echo "branch=${{ github.ref_name }}" >> "${GITHUB_OUTPUT}" | |
| else | |
| echo "should_publish=false" >> "${GITHUB_OUTPUT}" | |
| echo "publish_state=artifact-only" >> "${GITHUB_OUTPUT}" | |
| echo "reason=workflow runs on branch ${{ github.ref_name }}, so logs were not pushed back to the repository" >> "${GITHUB_OUTPUT}" | |
| fi | |
| - name: Publish logs and bins to repo branch | |
| id: publish_outputs | |
| timeout-minutes: 25 | |
| if: steps.publish_target.outputs.should_publish == 'true' | |
| continue-on-error: true | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| branch="${{ steps.publish_target.outputs.branch }}" | |
| git config user.name "github-actions[bot]" | |
| git config user.email "41898282+github-actions[bot]@users.noreply.github.com" | |
| git fetch origin "${branch}" | |
| git switch -C "${branch}" "origin/${branch}" | |
| rm -rf logs | |
| mkdir -p logs | |
| cp -R merged-logs/. logs/ | |
| mkdir -p bin | |
| if [ -d merged-bins ]; then | |
| find merged-bins -mindepth 2 -maxdepth 2 -type d | while read -r variant_dir; do | |
| rel_path="${variant_dir#merged-bins/}" | |
| rm -rf "bin/${rel_path}" | |
| mkdir -p "$(dirname "bin/${rel_path}")" | |
| cp -R "${variant_dir}" "bin/${rel_path}" | |
| done | |
| fi | |
| git add logs bin | |
| if git diff --cached --quiet; then | |
| echo "publish_state=no-changes" >> "${GITHUB_OUTPUT}" | |
| else | |
| git commit -m "CI outputs for run ${{ github.run_id }}" | |
| git push origin HEAD:"${branch}" | |
| echo "publish_state=published" >> "${GITHUB_OUTPUT}" | |
| fi | |
| - name: Write pull instructions | |
| timeout-minutes: 25 | |
| if: always() | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| publish_state="${{ steps.publish_target.outputs.publish_state }}" | |
| publish_reason="${{ steps.publish_target.outputs.reason }}" | |
| publish_branch="${{ steps.publish_target.outputs.branch }}" | |
| if [ "${{ steps.publish_target.outputs.should_publish }}" = "true" ]; then | |
| if [ "${{ steps.publish_outputs.outcome }}" = "success" ]; then | |
| publish_state="${{ steps.publish_outputs.outputs.publish_state }}" | |
| elif [ "${{ steps.publish_outputs.outcome }}" = "failure" ]; then | |
| publish_state="publish-failed" | |
| publish_reason="repository push failed; see the collect job log for details" | |
| fi | |
| fi | |
| { | |
| echo "## Pullable outputs" | |
| echo | |
| case "${publish_state}" in | |
| published) | |
| echo "Logs and successful bins were published to branch: ${publish_branch}" | |
| ;; | |
| no-changes) | |
| echo "Logs and successful bins already matched branch: ${publish_branch}" | |
| ;; | |
| publish-failed) | |
| echo "Logs and successful bins were uploaded as artifacts, but publication to ${publish_branch} failed." | |
| echo | |
| echo "Reason: ${publish_reason}" | |
| ;; | |
| *) | |
| echo "Logs and successful bins were uploaded as artifacts only." | |
| echo | |
| echo "Reason: ${publish_reason}" | |
| ;; | |
| esac | |
| echo | |
| echo "Commands:" | |
| if [ -n "${publish_branch}" ]; then | |
| echo "git fetch origin ${publish_branch}" | |
| echo "git switch ${publish_branch}" | |
| else | |
| echo "git fetch origin main" | |
| echo "git switch main" | |
| fi | |
| echo | |
| echo "Logs path: logs/<platform>/<variant>/" | |
| echo "Bins path: bin/<platform>/<variant>/" | |
| echo | |
| echo "Fallback artifact: all-logs" | |
| echo "Fallback artifact: all-bins" | |
| } >> "${GITHUB_STEP_SUMMARY}" | |
| - name: Fail collect job when publish failed | |
| timeout-minutes: 25 | |
| if: ${{ steps.publish_target.outputs.should_publish == 'true' && steps.publish_outputs.outcome == 'failure' }} | |
| shell: bash | |
| run: exit 1 |