github.com/containers/podman/v5@v5.1.0-rc1/.cirrus.yml (about)

     1  ---
     2  
     3  # Main collection of env. vars to set for all tasks and scripts.
     4  env:
     5      ####
     6      #### Global variables used for all tasks
     7      ####
     8      # Name of the ultimate destination branch for this CI run, PR or post-merge.
     9      DEST_BRANCH: "main"
    10      # Sane (default) value for GOPROXY and GOSUMDB.
    11      GOPROXY: "https://proxy.golang.org,direct"
    12      GOSUMDB: "sum.golang.org"
    13      # Overrides default location (/tmp/cirrus) for repo clone
    14      GOPATH: &gopath "/var/tmp/go"
    15      GOCACHE: "${GOPATH}/cache"
    16      GOSRC: &gosrc "/var/tmp/go/src/github.com/containers/podman"
    17      CIRRUS_WORKING_DIR: *gosrc
    18      # The default is 'sh' if unspecified
    19      CIRRUS_SHELL: "/bin/bash"
    20      # Save a little typing (path relative to $CIRRUS_WORKING_DIR)
    21      SCRIPT_BASE: "./contrib/cirrus"
    22      # Runner statistics log file path/name
    23      STATS_LOGFILE_SFX: 'runner_stats.log'
    24      STATS_LOGFILE: '$GOSRC/${CIRRUS_TASK_NAME}-${STATS_LOGFILE_SFX}'
    25  
    26      ####
    27      #### Cache-image names to test with (double-quotes around names are critical)
    28      ####
    29      FEDORA_NAME: "fedora-40"
    30      FEDORA_AARCH64_NAME: "${FEDORA_NAME}-aarch64"
    31      PRIOR_FEDORA_NAME: "fedora-39"
    32      RAWHIDE_NAME: "rawhide"
    33      DEBIAN_NAME: "debian-13"
    34  
    35      # Image identifiers
    36      IMAGE_SUFFIX: "c20240513t140131z-f40f39d13"
    37  
    38      # EC2 images
    39      FEDORA_AMI: "fedora-aws-${IMAGE_SUFFIX}"
    40      FEDORA_AARCH64_AMI: "fedora-podman-aws-arm64-${IMAGE_SUFFIX}"
    41      # GCP Images
    42      FEDORA_CACHE_IMAGE_NAME: "fedora-${IMAGE_SUFFIX}"
    43      PRIOR_FEDORA_CACHE_IMAGE_NAME: "prior-fedora-${IMAGE_SUFFIX}"
    44      RAWHIDE_CACHE_IMAGE_NAME: "rawhide-${IMAGE_SUFFIX}"
    45      DEBIAN_CACHE_IMAGE_NAME: "debian-${IMAGE_SUFFIX}"
    46      # Container FQIN's
    47      FEDORA_CONTAINER_FQIN: "quay.io/libpod/fedora_podman:${IMAGE_SUFFIX}"
    48      PRIOR_FEDORA_CONTAINER_FQIN: "quay.io/libpod/prior-fedora_podman:${IMAGE_SUFFIX}"
    49      WINDOWS_AMI: "win-server-wsl-${IMAGE_SUFFIX}"
    50      ####
    51      #### Control variables that determine what to run and how to run it.
    52      #### N/B: Required ALL of these are set for every single task.
    53      ####
    54      TEST_FLAVOR:             # int, sys, ext_svc, validate, automation, etc.
    55      TEST_ENVIRON: host       # 'host', or 'container'.
    56      PODBIN_NAME: podman      # 'podman' or 'remote'
    57      PRIV_NAME: root          # 'root' or 'rootless'
    58      DISTRO_NV:               # any {PRIOR_,}{FEDORA,DEBIAN}_NAME value
    59      VM_IMAGE_NAME:           # One of the "Google-cloud VM Images" (above)
    60      CTR_FQIN:                # One of the "Container FQIN's" (above)
    61      CI_DESIRED_DATABASE: sqlite # 'sqlite' or 'boltdb'
    62      CI_DESIRED_STORAGE: overlay # overlay or vfs
    63  
    64      # Curl-command prefix for downloading task artifacts, simply add the
    65      # the url-encoded task name, artifact name, and path as a suffix.
    66      ART_URL: https://api.cirrus-ci.com/v1/artifact/build/${CIRRUS_BUILD_ID}
    67      ARTCURL: >-
    68          curl --retry 5 --retry-delay 8 --fail --location -O
    69          --url ${ART_URL}
    70  
    71  
    72  # Default timeout for each task
    73  timeout_in: 60m
    74  
    75  
    76  gcp_credentials: ENCRYPTED[a28959877b2c9c36f151781b0a05407218cda646c7d047fc556e42f55e097e897ab63ee78369dae141dcf0b46a9d0cdd]
    77  
    78  aws_credentials: ENCRYPTED[4ca070bffe28eb9b27d63c568b52970dd46f119c3a83b8e443241e895dbf1737580b4d84eed27a311a2b74287ef9f79f]
    79  
    80  
    81  # N/B: This matrix of build tasks are critical to CI, along with the following
    82  # aarch64 task. They build binaries for all CI platforms, and versions. On
    83  # success, the contents of the repository are preserved as an artifact for
    84  # consumption by most subsequent CI tasks.  This saves about 3-5 minutes of
    85  # otherwise duplicative effort in most tasks.
    86  build_task:
    87      alias: 'build'
    88      name: 'Build for $DISTRO_NV'
    89      gce_instance: &standardvm
    90          image_project: libpod-218412
    91          zone: "us-central1-a"
    92          cpu: 2
    93          memory: "4Gb"
    94          # Required to be 200gig, do not modify - has i/o performance impact
    95          # according to gcloud CLI tool warning messages.
    96          disk: 200
    97          image_name: "${VM_IMAGE_NAME}"  # from stdenvars
    98      matrix: &platform_axis
    99          # Ref: https://cirrus-ci.org/guide/writing-tasks/#matrix-modification
   100          - env: &stdenvars
   101                DISTRO_NV: ${FEDORA_NAME}
   102                # Not used here, is used in other tasks
   103                VM_IMAGE_NAME: ${FEDORA_CACHE_IMAGE_NAME}
   104                CTR_FQIN: ${FEDORA_CONTAINER_FQIN}
   105                # ID for re-use of build output
   106                CI_DESIRED_RUNTIME: crun
   107          - env:
   108                DISTRO_NV: ${PRIOR_FEDORA_NAME}
   109                VM_IMAGE_NAME: ${PRIOR_FEDORA_CACHE_IMAGE_NAME}
   110                CTR_FQIN: ${PRIOR_FEDORA_CONTAINER_FQIN}
   111                CI_DESIRED_RUNTIME: crun
   112                CI_DESIRED_DATABASE: boltdb
   113                CI_DESIRED_STORAGE: vfs
   114          - env:
   115                <<: *stdenvars
   116                DISTRO_NV: ${RAWHIDE_NAME}
   117                VM_IMAGE_NAME: ${RAWHIDE_CACHE_IMAGE_NAME}
   118                CTR_FQIN: ""
   119          - env:
   120                DISTRO_NV: ${DEBIAN_NAME}
   121                VM_IMAGE_NAME: ${DEBIAN_CACHE_IMAGE_NAME}
   122                CI_DESIRED_RUNTIME: runc
   123                CI_DESIRED_NETWORK: netavark
   124                # Ignore cgroups-v1 warnings on debian
   125                PODMAN_IGNORE_CGROUPSV1_WARNING: true
   126      env:
   127          TEST_FLAVOR: build
   128      # NOTE: The default way Cirrus-CI clones is *NOT* compatible with
   129      #       environment expectations in contrib/cirrus/lib.sh.  Specifically
   130      #       the 'origin' remote must be defined, and all remote branches/tags
   131      #       must be available for reference from CI scripts.
   132      clone_script: &full_clone |
   133            set -exo pipefail
   134            cd /
   135            rm -rf $CIRRUS_WORKING_DIR
   136            mkdir -p $CIRRUS_WORKING_DIR
   137            git clone --recursive --branch=$DEST_BRANCH https://x-access-token:${CIRRUS_REPO_CLONE_TOKEN}@github.com/${CIRRUS_REPO_FULL_NAME}.git $CIRRUS_WORKING_DIR
   138            cd $CIRRUS_WORKING_DIR
   139            git remote update origin
   140            if [[ -n "$CIRRUS_PR" ]]; then # running for a PR
   141                git fetch origin pull/$CIRRUS_PR/head:pull/$CIRRUS_PR
   142                git checkout pull/$CIRRUS_PR
   143            else
   144                git reset --hard $CIRRUS_CHANGE_IN_REPO
   145            fi
   146      # Attempt to prevent flakes by confirming basic environment expectations,
   147      # network service connectivity and essential container image availability.
   148      prebuild_script: &prebuild $SCRIPT_BASE/prebuild.sh
   149      # Standard setup stage call, used by nearly every task in CI.
   150      setup_script: &setup '$GOSRC/$SCRIPT_BASE/setup_environment.sh'
   151      # Attempt to prevent flakes by confirming automation environment and
   152      # all required external/3rd-party services are available and functional.
   153      # Standard main execution stage call, used by nearly every task in CI.
   154      main_script: &main '/usr/bin/time --verbose --output="$STATS_LOGFILE" $GOSRC/$SCRIPT_BASE/runner.sh'
   155      # Attempt to catch code-quality and vendoring problems early.
   156      postbuild_script: &postbuild $SCRIPT_BASE/postbuild.sh
   157      # Cirrus-CI is very slow uploading one file at time, and the repo contains
   158      # thousands of files.  Speed this up by archiving into tarball first.
   159      repo_prep_script: &repo_prep >-
   160          tar cjf /tmp/repo.tbz -C $GOSRC . && mv /tmp/repo.tbz $GOSRC/
   161      repo_artifacts: &repo_artifacts
   162          path: ./repo.tbz
   163          type: application/octet-stream
   164      always: &runner_stats
   165          runner_stats_artifacts:
   166              path: ./*-${STATS_LOGFILE_SFX}
   167              type: text/plain
   168  
   169  
   170  # Confirm the result of building on at least one platform appears sane.
   171  # This confirms the binaries can be executed, checks --help vs docs, and
   172  # other essential post-build validation checks.
   173  validate_task:
   174      name: "Validate ${DISTRO_NV} Build"
   175      alias: validate
   176      # This task is primarily intended to catch human-errors early on, in a
   177      # PR.  Skip it for branch-push, branch-create, and tag-push to improve
   178      # automation reliability/speed in those contexts.  Any missed errors due
   179      # to nonsequential PR merging practices, will be caught on a future PR,
   180      # build or test task failures.
   181      # Docs: ./contrib/cirrus/CIModes.md
   182      only_if: &is_pr "$CIRRUS_PR != ''"
   183      depends_on:
   184          - build
   185      # golangci-lint is a very, very hungry beast.
   186      gce_instance: &bigvm
   187          <<: *standardvm
   188          cpu: 8
   189          memory: "16Gb"
   190      matrix:
   191          - env:
   192              <<: *stdenvars
   193              VM_IMAGE_NAME: ${FEDORA_CACHE_IMAGE_NAME}
   194              DISTRO_NV: ${FEDORA_NAME}
   195          - env:
   196              <<: *stdenvars
   197              VM_IMAGE_NAME: ${RAWHIDE_CACHE_IMAGE_NAME}
   198              DISTRO_NV: ${RAWHIDE_NAME}
   199      env:
   200          TEST_FLAVOR: validate
   201      # N/B: This script depends on ${DISTRO_NV} being defined for the task.
   202      clone_script: &get_gosrc |
   203          cd /tmp
   204          echo "$ARTCURL/Build%20for%20${DISTRO_NV}/repo/repo.tbz"
   205          time $ARTCURL/Build%20for%20${DISTRO_NV}/repo/repo.tbz
   206          time tar xjf /tmp/repo.tbz -C $GOSRC
   207      setup_script: *setup
   208      main_script: *main
   209      always: *runner_stats
   210  
   211  
   212  build_aarch64_task:
   213      alias: 'build_aarch64'
   214      name: 'Build for $DISTRO_NV'
   215      ec2_instance: &standard_build_ec2_aarch64
   216          image: ${VM_IMAGE_NAME}
   217          type: ${EC2_INST_TYPE}
   218          region: us-east-1
   219          architecture: arm64  # CAUTION: This has to be "arm64", not "aarch64".
   220      env: &stdenvars_aarch64
   221          EC2_INST_TYPE: "t4g.xlarge"
   222          DISTRO_NV: ${FEDORA_AARCH64_NAME}
   223          VM_IMAGE_NAME: ${FEDORA_AARCH64_AMI}
   224          CTR_FQIN: ${FEDORA_CONTAINER_FQIN}
   225          CI_DESIRED_RUNTIME: crun
   226          TEST_FLAVOR: build
   227      clone_script: *full_clone
   228      prebuild_script: *prebuild
   229      setup_script: *setup
   230      postbuild_script: *postbuild
   231      main_script: *main
   232      # Cirrus-CI is very slow uploading one file at time, and the repo contains
   233      # thousands of files.  Speed this up by archiving into tarball first.
   234      repo_prep_script: &repo_prep_aarch64 >-
   235          tar cjf /tmp/repo.tbz -C $GOSRC . && mv /tmp/repo.tbz $GOSRC/
   236      repo_artifacts: &repo_artifacts_aarch64
   237          path: ./repo.tbz
   238          type: application/octet-stream
   239      always: *runner_stats
   240  
   241  
   242  # Confirm the result of building on at least one platform appears sane.
   243  # This confirms the binaries can be executed, checks --help vs docs, and
   244  # other essential post-build validation checks.
   245  validate_aarch64_task:
   246      name: "Validate $DISTRO_NV Build"
   247      alias: validate_aarch64
   248      # This task is primarily intended to catch human-errors early on, in a
   249      # PR.  Skip it for branch-push, branch-create, and tag-push to improve
   250      # automation reliability/speed in those contexts.  Any missed errors due
   251      # to nonsequential PR merging practices, will be caught on a future PR,
   252      # build or test task failures.
   253      # Docs: ./contrib/cirrus/CIModes.md
   254      only_if: *is_pr
   255      depends_on:
   256          - build_aarch64
   257      ec2_instance: *standard_build_ec2_aarch64
   258      env:
   259          <<: *stdenvars_aarch64
   260          TEST_FLAVOR: validate
   261          DISTRO_NV: ${FEDORA_AARCH64_NAME}
   262      # N/B: This script depends on ${DISTRO_NV} being defined for the task.
   263      clone_script: &get_gosrc_aarch64 |
   264          cd /tmp
   265          echo "$ARTCURL/build_aarch64/repo/repo.tbz"
   266          time $ARTCURL/build_aarch64/repo/repo.tbz
   267          time tar xjf /tmp/repo.tbz -C $GOSRC
   268      setup_script: *setup
   269      main_script: *main
   270      always: *runner_stats
   271  
   272  
   273  # There are several other important variations of podman which
   274  # must always build successfully.  Most of them are handled in
   275  # this task, though a few need dedicated tasks which follow.
   276  alt_build_task:
   277      name: "$ALT_NAME"
   278      alias: alt_build
   279      # Don't create task for [CI:DOCS], or rhel-release builds
   280      # Docs: ./contrib/cirrus/CIModes.md
   281      only_if: &no_rhel_release |
   282          $CIRRUS_BRANCH !=~ 'v[0-9\.]+-rhel' &&
   283          $CIRRUS_BASE_BRANCH !=~ 'v[0-9\.]+-rhel'
   284      env:
   285          <<: *stdenvars
   286          TEST_FLAVOR: "altbuild"
   287      gce_instance: *standardvm
   288      matrix:
   289        - env:
   290              ALT_NAME: 'Build Each Commit'
   291        - env:
   292              # TODO: Replace with task using `winmake` to build
   293              # binary and archive installation zip file.
   294              ALT_NAME: 'Windows Cross'
   295        - env:
   296              ALT_NAME: 'Alt Arch. x86 Cross'
   297        - env:
   298              ALT_NAME: 'Alt Arch. ARM Cross'
   299        - env:
   300              ALT_NAME: 'Alt Arch. MIPS Cross'
   301        - env:
   302              ALT_NAME: 'Alt Arch. MIPS64 Cross'
   303        - env:
   304              ALT_NAME: 'Alt Arch. Other Cross'
   305      # This task cannot make use of the shared repo.tbz artifact.
   306      clone_script: *full_clone
   307      setup_script: *setup
   308      main_script: *main
   309      # Produce a new repo.tbz artifact for consumption by 'artifacts' task.
   310      repo_prep_script: *repo_prep
   311      repo_artifacts: *repo_artifacts
   312      always: *runner_stats
   313  
   314  
   315  # Confirm building the remote client, natively on a Mac OS-X VM.
   316  osx_alt_build_task:
   317      name: "OSX Cross"
   318      alias: osx_alt_build
   319      # Docs: ./contrib/cirrus/CIModes.md
   320      only_if: *no_rhel_release  # RHEL never releases podman mac installer binary
   321      persistent_worker: &mac_pw
   322          labels:
   323              os: darwin
   324              arch: arm64
   325              purpose: prod
   326      env: &mac_env
   327          CIRRUS_SHELL: "/bin/bash"  # sh is the default
   328          CIRRUS_WORKING_DIR: "$HOME/ci/task-${CIRRUS_TASK_ID}"  # Isolation: $HOME will be set to "ci" dir.
   329          # Prevent cache-pollution fron one task to the next.
   330          GOPATH: "$CIRRUS_WORKING_DIR/.go"
   331          GOCACHE: "$CIRRUS_WORKING_DIR/.go/cache"
   332          GOENV: "$CIRRUS_WORKING_DIR/.go/support"
   333          GOSRC: "$HOME/ci/task-${CIRRUS_TASK_ID}"
   334      clone_script: *full_clone
   335      # This host is/was shared with potentially many other CI tasks.
   336      # The previous task may have been canceled or aborted.
   337      prep_script: &mac_cleanup "contrib/cirrus/mac_cleanup.sh"
   338      lint_script:
   339          - make golangci-lint
   340      basic_build_script:
   341          - make .install.ginkgo
   342          - make podman-remote
   343          - make podman-mac-helper
   344      build_pkginstaller_script:
   345          - pushd contrib/pkginstaller
   346          - make ARCH=amd64 NO_CODESIGN=1 pkginstaller
   347          - make ARCH=aarch64 NO_CODESIGN=1 pkginstaller
   348          - make ARCH=universal NO_CODESIGN=1 pkginstaller
   349          - popd
   350      build_amd64_script:
   351          - make podman-remote-release-darwin_amd64.zip
   352      # Building arm podman needs to be the last thing built in this task
   353      # The Mac tests rely this Podman binary to run, and the CI Mac is ARM-based
   354      build_arm64_script:
   355          - make podman-remote-release-darwin_arm64.zip
   356      # Produce a new repo.tbz artifact for consumption by dependent tasks.
   357      repo_prep_script: *repo_prep
   358      repo_artifacts: *repo_artifacts
   359      # This host is/was shared with potentially many other CI tasks.
   360      # Ensure nothing is left running while waiting for the next task.
   361      always:
   362          task_cleanup_script: *mac_cleanup
   363  
   364  
   365  # Build freebsd release natively on a FreeBSD VM.
   366  freebsd_alt_build_task:
   367      name: "FreeBSD Cross"
   368      alias: freebsd_alt_build
   369      # Only run on 'main' and PRs against 'main'
   370      # Docs: ./contrib/cirrus/CIModes.md
   371      only_if: |
   372          $CIRRUS_CHANGE_TITLE !=~ '.*CI:MACHINE.*' &&
   373          ( $CIRRUS_BRANCH == 'main' || $CIRRUS_BASE_BRANCH == 'main' )
   374      env:
   375          <<: *stdenvars
   376          # Functional FreeBSD builds must be built natively since they depend on CGO
   377          DISTRO_NV: freebsd-13
   378          VM_IMAGE_NAME: notyet
   379          CTR_FQIN: notyet
   380          CIRRUS_SHELL: "/bin/sh"
   381          TEST_FLAVOR: "altbuild"
   382          ALT_NAME: 'FreeBSD Cross'
   383      freebsd_instance:
   384          image_family: freebsd-13-3
   385      setup_script:
   386          - pkg install -y gpgme bash go-md2man gmake gsed gnugrep go pkgconf
   387      build_amd64_script:
   388          - gmake podman-release
   389      # This task cannot make use of the shared repo.tbz artifact and must
   390      # produce a new repo.tbz artifact for consumption by 'artifacts' task.
   391      repo_prep_script: *repo_prep
   392      repo_artifacts: *repo_artifacts
   393  
   394  
   395  # Status aggregator for all builds.  This task simply makes dependency
   396  # management easier, and results in a simpler graph that using YAML
   397  # anchors/aliases.
   398  build_success_task:
   399      name: "Total Build Success"
   400      alias: build_success
   401      depends_on:
   402          - build
   403          - validate
   404          - build_aarch64
   405          - validate_aarch64
   406          - alt_build
   407          - osx_alt_build
   408          - freebsd_alt_build
   409      env:
   410          CTR_FQIN: ${FEDORA_CONTAINER_FQIN}
   411      container: &smallcontainer
   412          image: ${CTR_FQIN}
   413          # Resources are limited across ALL currently executing tasks
   414          # ref: https://cirrus-ci.org/guide/linux/#linux-containers
   415          cpu: 1
   416          memory: 1
   417      clone_script:  &noop mkdir -p "$CIRRUS_WORKING_DIR"
   418      script: *noop
   419  
   420  
   421  # Exercise the "libpod" API with a small set of common
   422  # operations to ensure they are functional.
   423  bindings_task:
   424      name: "Test Bindings"
   425      alias: bindings
   426      # Don't create task for PRs using [CI:DOCS] or [CI:BUILD]
   427      # Docs: ./contrib/cirrus/CIModes.md
   428      only_if: >-
   429          $CIRRUS_PR != '' &&
   430          $CIRRUS_CHANGE_TITLE !=~ '.*CI:DOCS.*' &&
   431          $CIRRUS_CHANGE_TITLE !=~ '.*CI:BUILD.*' &&
   432          $CIRRUS_CHANGE_TITLE !=~ '.*CI:MACHINE.*'
   433      depends_on: &build
   434          - build_success
   435      gce_instance: *standardvm
   436      env:
   437          <<: *stdenvars
   438          TEST_FLAVOR: bindings
   439      clone_script: *get_gosrc
   440      setup_script: *setup
   441      main_script: *main
   442      always: &logs_artifacts
   443          <<: *runner_stats
   444          # Required for `contrib/cirrus/logformatter` to work properly
   445          html_artifacts:
   446              path: ./*.html
   447              type: text/html
   448          server_log_artifacts:
   449              path: ./podman-server.log
   450              type: text/plain
   451          df_script: '$SCRIPT_BASE/logcollector.sh df'
   452          audit_log_script: '$SCRIPT_BASE/logcollector.sh audit'
   453          journal_script: '$SCRIPT_BASE/logcollector.sh journal'
   454          podman_system_info_script: '$SCRIPT_BASE/logcollector.sh podman'
   455          time_script: '$SCRIPT_BASE/logcollector.sh time'
   456  
   457  
   458  # Build the "libpod" API documentation `swagger.yaml` and
   459  # publish it to google-cloud-storage (GCS).
   460  swagger_task:
   461      name: "Test Swagger"
   462      alias: swagger
   463      # Don't create task for [CI:BUILD]
   464      # Docs: ./contrib/cirrus/CIModes.md
   465      only_if: |
   466          $CIRRUS_CHANGE_TITLE !=~ '.*CI:BUILD.*' &&
   467          $CIRRUS_CHANGE_TITLE !=~ '.*CI:MACHINE.*'
   468      depends_on: *build
   469      gce_instance: *standardvm
   470      env:
   471          <<: *stdenvars
   472          TEST_FLAVOR: swagger
   473          CTR_FQIN: 'quay.io/libpod/gcsupld:${IMAGE_SUFFIX}'
   474          GCPJSON: ENCRYPTED[927dc01e755eaddb4242b0845cf86c9098d1e3dffac38c70aefb1487fd8b4fe6dd6ae627b3bffafaba70e2c63172664e]
   475          GCPNAME: ENCRYPTED[c145e9c16b6fb88d476944a454bf4c1ccc84bb4ecaca73bdd28bdacef0dfa7959ebc8171a27b2e4064d66093b2cdba49]
   476          GCPPROJECT: 'libpod-218412'
   477      clone_script: *get_gosrc
   478      setup_script: *setup
   479      main_script: *main
   480      always:
   481          <<: *runner_stats
   482          swagger_artifacts:
   483              path: ./swagger.yaml
   484              type: text/plain
   485  
   486  
   487  win_installer_task:
   488      name: "Verify Win Installer Build"
   489      alias: win_installer
   490      only_if:  # RHEL never releases podman windows installer binary
   491        $CIRRUS_TAG == '' &&
   492        $CIRRUS_BRANCH !=~ 'v[0-9\.]+-rhel' &&
   493        $CIRRUS_BASE_BRANCH !=~ 'v[0-9\.]+-rhel'
   494      depends_on: *build
   495      ec2_instance: &windows
   496          image: "${WINDOWS_AMI}"
   497          type: m5.large
   498          region: us-east-1
   499          platform: windows
   500      env: &winenv
   501          CIRRUS_WORKING_DIR: &wincwd "${LOCALAPPDATA}\\cirrus-ci-build"
   502          CIRRUS_SHELL: powershell
   503          PATH: "${PATH};C:\\ProgramData\\chocolatey\\bin"
   504          DISTRO_NV: "windows"
   505          PRIV_NAME: "rootless"
   506          # Fake version, we are only testing the installer functions, so version doesn't matter
   507          WIN_INST_VER: 9.9.9
   508      # It's HIGHLY desireable to use the same binary throughout CI.  Otherwise, if
   509      # there's a toolchain or build-environment specific problem, it can be incredibly
   510      # difficult (and non-obvious) to debug.
   511      clone_script: &winclone |
   512          $ErrorActionPreference = 'Stop'
   513          $ProgressPreference = 'SilentlyContinue'
   514          New-Item -ItemType Directory -Force -Path "$ENV:CIRRUS_WORKING_DIR"
   515          Set-Location "$ENV:CIRRUS_WORKING_DIR"
   516          $uri = "${ENV:ART_URL}/Windows Cross/repo/repo.tbz"
   517          Write-Host "Downloading $uri"
   518          For($i = 0;;) {
   519              Try {
   520                  Invoke-WebRequest -UseBasicParsing -ErrorAction Stop -OutFile "repo.tbz2" `
   521                    -Uri "$uri"
   522                  Break
   523              } Catch {
   524                  if (++$i -gt 6) {
   525                      throw $_.Exception
   526                  }
   527                  Write-Host "Download failed - retrying:" $_.Exception.Response.StatusCode
   528                  Start-Sleep -Seconds 10
   529              }
   530          }
   531          arc unarchive repo.tbz2 .\
   532          if ($LASTEXITCODE -ne 0) {
   533              throw "Unarchive repo.tbz2 failed"
   534              Exit 1
   535          }
   536          Get-ChildItem -Path .\repo
   537      main_script: ".\\repo\\contrib\\cirrus\\win-installer-main.ps1"
   538  
   539  
   540  # Verify podman is compatible with the docker python-module.
   541  docker-py_test_task:
   542      name: Docker-py Compat.
   543      alias: docker-py_test
   544      # Don't create task for tags, branches, or PRs w/ [CI:<magic>]
   545      # N/B: for PRs $CIRRUS_BRANCH == 'pull/<number>'
   546      # Docs: ./contrib/cirrus/CIModes.md
   547      only_if: &not_tag_branch_build_docs_machine >-
   548          $CIRRUS_PR != '' &&
   549          $CIRRUS_CHANGE_TITLE !=~ '.*CI:DOCS.*' &&
   550          $CIRRUS_CHANGE_TITLE !=~ '.*CI:BUILD.*' &&
   551          $CIRRUS_CHANGE_TITLE !=~ '.*CI:MACHINE.*'
   552      depends_on: *build
   553      gce_instance: *standardvm
   554      env:
   555          <<: *stdenvars
   556          TEST_FLAVOR: docker-py
   557          TEST_ENVIRON: container
   558      clone_script: *get_gosrc
   559      setup_script: *setup
   560      main_script: *main
   561      always: *runner_stats
   562  
   563  
   564  # Does exactly what it says, execute the podman unit-tests on Fedora.
   565  unit_test_task:
   566      name: "Unit tests on $DISTRO_NV"
   567      alias: unit_test
   568      # Docs: ./contrib/cirrus/CIModes.md
   569      only_if: *not_tag_branch_build_docs_machine
   570      depends_on: *build
   571      matrix:
   572          - env: *stdenvars
   573          # Special-case: Rootless on latest Fedora (standard) VM
   574          - name: "Rootless unit on $DISTRO_NV"
   575            env:
   576                <<: *stdenvars
   577                PRIV_NAME: rootless
   578      gce_instance: *standardvm
   579      env:
   580          TEST_FLAVOR: unit
   581      clone_script: *get_gosrc
   582      setup_script: *setup
   583      main_script: *main
   584      always: *logs_artifacts
   585  
   586  
   587  apiv2_test_task:
   588      name: "APIv2 test on $DISTRO_NV ($PRIV_NAME)"
   589      alias: apiv2_test
   590      # Docs: ./contrib/cirrus/CIModes.md
   591      only_if: *not_tag_branch_build_docs_machine
   592      depends_on: *build
   593      gce_instance: *standardvm
   594      # Test is normally pretty quick, about 10-minutes.  If it hangs,
   595      # don't make developers wait the full 1-hour timeout.
   596      timeout_in: 20m
   597      env:
   598          <<: *stdenvars
   599          TEST_FLAVOR: apiv2
   600      matrix:
   601        - env:
   602            PRIV_NAME: root
   603        - env:
   604            PRIV_NAME: rootless
   605      clone_script: *get_gosrc
   606      setup_script: *setup
   607      main_script: *main
   608      always: *logs_artifacts
   609  
   610  
   611  compose_test_task:
   612      name: "$TEST_FLAVOR test on $DISTRO_NV ($PRIV_NAME)"
   613      alias: compose_test
   614      # Docs: ./contrib/cirrus/CIModes.md
   615      only_if: *not_tag_branch_build_docs_machine
   616      depends_on: *build
   617      gce_instance: *standardvm
   618      matrix:
   619        - env:
   620              PRIV_NAME: root
   621        - env:
   622              PRIV_NAME: rootless
   623      env:
   624          <<: *stdenvars
   625          TEST_FLAVOR: compose_v2
   626      clone_script: *get_gosrc
   627      setup_script: *setup
   628      main_script: *main
   629      always: *logs_artifacts
   630  
   631  
   632  # versions, as root, without involving the podman-remote client.
   633  local_integration_test_task: &local_integration_test_task
   634      # Integration-test task name convention:
   635      # <int.|sys.> <podman|remote> <Distro NV> <root|rootless>
   636      name: &std_name_fmt "$TEST_FLAVOR $PODBIN_NAME $DISTRO_NV $PRIV_NAME $TEST_ENVIRON ${CI_DESIRED_DATABASE}"
   637      alias: local_integration_test
   638      # Docs: ./contrib/cirrus/CIModes.md
   639      only_if: *not_tag_branch_build_docs_machine
   640      depends_on: *build
   641      matrix: *platform_axis
   642      gce_instance: *standardvm
   643      timeout_in: 50m
   644      env:
   645          TEST_FLAVOR: int
   646      clone_script: *get_gosrc
   647      setup_script: *setup
   648      main_script: *main
   649      always: &int_logs_artifacts
   650          <<: *logs_artifacts
   651          ginkgo_node_logs_artifacts:
   652              path: ./test/e2e/ginkgo-node-*.log
   653              type: text/plain
   654          ginkgo_json_artifacts:
   655              path: ./ginkgo-e2e.json
   656              type: application/json
   657  
   658  
   659  # Nearly identical to `local_integration_test` except all operations
   660  # are performed through the podman-remote client vs a podman "server"
   661  # running on the same host.
   662  remote_integration_test_task:
   663      <<: *local_integration_test_task
   664      alias: remote_integration_test
   665      env:
   666          TEST_FLAVOR: int
   667          PODBIN_NAME: remote
   668  
   669  
   670  # Run the complete set of integration tests from inside a container.
   671  # This verifies all/most operations function with "podman-in-podman".
   672  container_integration_test_task:
   673      name: *std_name_fmt
   674      alias: container_integration_test
   675      # Docs: ./contrib/cirrus/CIModes.md
   676      only_if: *not_tag_branch_build_docs_machine
   677      depends_on: *build
   678      matrix: &fedora_vm_axis
   679          - env:
   680                DISTRO_NV: ${FEDORA_NAME}
   681                VM_IMAGE_NAME: ${FEDORA_CACHE_IMAGE_NAME}
   682                CTR_FQIN: ${FEDORA_CONTAINER_FQIN}
   683                CI_DESIRED_RUNTIME: crun
   684          - env:
   685                DISTRO_NV: ${PRIOR_FEDORA_NAME}
   686                VM_IMAGE_NAME: ${PRIOR_FEDORA_CACHE_IMAGE_NAME}
   687                CTR_FQIN: ${PRIOR_FEDORA_CONTAINER_FQIN}
   688                CI_DESIRED_RUNTIME: crun
   689                CI_DESIRED_DATABASE: boltdb
   690      gce_instance: *standardvm
   691      timeout_in: 50m
   692      env:
   693          TEST_FLAVOR: int
   694          TEST_ENVIRON: container
   695      clone_script: *get_gosrc
   696      setup_script: *setup
   697      main_script: *main
   698      always: *int_logs_artifacts
   699  
   700  
   701  # Execute most integration tests as a regular (non-root) user.
   702  rootless_integration_test_task:
   703      name: *std_name_fmt
   704      alias: rootless_integration_test
   705      # Docs: ./contrib/cirrus/CIModes.md
   706      only_if: *not_tag_branch_build_docs_machine
   707      depends_on: *build
   708      matrix: *platform_axis
   709      gce_instance: *standardvm
   710      timeout_in: 50m
   711      env:
   712          TEST_FLAVOR: int
   713          PRIV_NAME: rootless
   714      clone_script: *get_gosrc
   715      setup_script: *setup
   716      main_script: *main
   717      always: *int_logs_artifacts
   718  
   719  
   720  podman_machine_task:
   721      name: *std_name_fmt
   722      alias: podman_machine
   723      # Only run for PRs and never [CI:DOCS] or [CI:BUILD]
   724      # Docs: ./contrib/cirrus/CIModes.md
   725      only_if: &machine_cron_not_tag_build_docs >-
   726          ($CIRRUS_PR != '' &&
   727           $CIRRUS_CHANGE_TITLE !=~ '.*CI:DOCS.*' &&
   728           $CIRRUS_CHANGE_TITLE !=~ '.*CI:BUILD.*'
   729          ) || $CIRRUS_CRON == "main"
   730      depends_on: *build
   731      ec2_instance:
   732          image: "${VM_IMAGE_NAME}"
   733          type: "${EC2_INST_TYPE}"
   734          region: us-east-1
   735      env:
   736        EC2_INST_TYPE: "m5zn.metal"  # Bare-metal instance is required
   737        TEST_FLAVOR: "machine-linux"
   738        PRIV_NAME: "rootless"  # intended use-case
   739        DISTRO_NV: "${FEDORA_NAME}"
   740        VM_IMAGE_NAME: "${FEDORA_AMI}"
   741      clone_script: *get_gosrc
   742      setup_script: *setup
   743      main_script: *main
   744      always: *int_logs_artifacts
   745  
   746  
   747  podman_machine_aarch64_task:
   748      name: *std_name_fmt
   749      alias: podman_machine_aarch64
   750      only_if: *machine_cron_not_tag_build_docs
   751      depends_on: *build
   752      ec2_instance:
   753          <<: *standard_build_ec2_aarch64
   754      env:
   755          TEST_FLAVOR: "machine-linux"
   756          EC2_INST_TYPE: c6g.metal
   757          PRIV_NAME: "rootless"  # intended use-case
   758          DISTRO_NV: "${FEDORA_AARCH64_NAME}"
   759          VM_IMAGE_NAME: "${FEDORA_AARCH64_AMI}"
   760      clone_script: *get_gosrc_aarch64
   761      setup_script: *setup
   762      main_script: *main
   763      always: *int_logs_artifacts
   764  
   765  
   766  podman_machine_windows_task:
   767      name: *std_name_fmt
   768      alias: podman_machine_windows
   769      # Only run for non-docs/copr PRs and non-release branch builds
   770      # and never for tags.  Docs: ./contrib/cirrus/CIModes.md
   771      only_if: *machine_cron_not_tag_build_docs
   772      depends_on: *build
   773      ec2_instance:
   774          <<: *windows
   775          type: m5zn.metal
   776          platform: windows
   777      env: *winenv
   778      matrix:
   779        - env:
   780            TEST_FLAVOR: "machine-wsl"
   781        - env:
   782            TEST_FLAVOR: "machine-hyperv"
   783      clone_script: *winclone
   784      main_script: ".\\repo\\contrib\\cirrus\\win-podman-machine-main.ps1"
   785      always:
   786          # Required for `contrib/cirrus/logformatter` to work properly
   787          html_artifacts:
   788              path: ./*.html
   789              type: text/html
   790  
   791  
   792  podman_machine_mac_task:
   793      name: *std_name_fmt
   794      alias: podman_machine_mac
   795      only_if: *machine_cron_not_tag_build_docs
   796      depends_on: *build
   797      persistent_worker: *mac_pw
   798      env:
   799          <<: *mac_env
   800          # Consumed by podman-machine ginkgo tests
   801          CONTAINERS_MACHINE_PROVIDER: "applehv"
   802          # TODO: Should not require a special image, for now it does.
   803          # Simply remove the line below when a mac image is GA.
   804          # MACHINE_IMAGE: "https://fedorapeople.org/groups/podman/testing/applehv/arm64/fedora-coreos-38.20230925.dev.0-applehv.aarch64.raw.gz"
   805          # Values necessary to populate std_name_fmt alias
   806          TEST_FLAVOR: "machine-mac"
   807          DISTRO_NV: "darwin"
   808          PRIV_NAME: "rootless"  # intended use-case
   809      clone_script:  # artifacts from osx_alt_build_task
   810          - mkdir -p $CIRRUS_WORKING_DIR
   811          - cd $CIRRUS_WORKING_DIR
   812          - $ARTCURL/OSX%20Cross/repo/repo.tbz
   813          - tar xjf repo.tbz
   814      # This host is/was shared with potentially many other CI tasks.
   815      # The previous task may have been canceled or aborted.
   816      prep_script: *mac_cleanup
   817      setup_script: "contrib/cirrus/mac_setup.sh"
   818      env_script: "contrib/cirrus/mac_env.sh"
   819      # TODO: Timeout bumped b/c initial image download (~5min) and VM
   820      #       resize (~2min) causes test-timeout (90s default).  Should
   821      #       tests deal with this internally?
   822      test_script:
   823          - "contrib/cirrus/mac_runner.sh"
   824      # This host is/was shared with potentially many other CI tasks.
   825      # Ensure nothing is left running while waiting for the next task.
   826      always:
   827          # Required for `contrib/cirrus/logformatter` to work properly
   828          html_artifacts:
   829              path: ./*.html
   830              type: text/html
   831          task_cleanup_script: *mac_cleanup
   832  
   833  
   834  # Always run subsequent to integration tests.  While parallelism is lost
   835  # with runtime, debugging system-test failures can be more challenging
   836  # for some golang developers.  Otherwise the following tasks run across
   837  # the same matrix as the integration-tests (above).
   838  local_system_test_task: &local_system_test_task
   839      name: *std_name_fmt
   840      alias: local_system_test
   841      # Don't create task for tags, or if using [CI:*] magic
   842      # Docs: ./contrib/cirrus/CIModes.md
   843      only_if: &not_tag_magic >-
   844          $CIRRUS_TAG == '' &&
   845          $CIRRUS_CHANGE_TITLE !=~ '.*CI:DOCS.*' &&
   846          $CIRRUS_CHANGE_TITLE !=~ '.*CI:BUILD.*' &&
   847          $CIRRUS_CHANGE_TITLE !=~ '.*CI:MACHINE.*'
   848      depends_on: *build
   849      matrix: *platform_axis
   850      gce_instance: *standardvm
   851      env:
   852          TEST_FLAVOR: sys
   853      clone_script: *get_gosrc
   854      setup_script: *setup
   855      main_script: *main
   856      always: *logs_artifacts
   857  
   858  
   859  local_system_test_aarch64_task: &local_system_test_task_aarch64
   860      name: *std_name_fmt
   861      alias: local_system_test_aarch64
   862      # Don't create task for tags, or if using [CI:DOCS], [CI:BUILD]
   863      # Docs: ./contrib/cirrus/CIModes.md
   864      only_if: *not_tag_magic
   865      depends_on: *build
   866      persistent_worker: *mac_pw
   867      ec2_instance: *standard_build_ec2_aarch64
   868      env:
   869          <<: *stdenvars_aarch64
   870          TEST_FLAVOR: sys
   871          DISTRO_NV: ${FEDORA_AARCH64_NAME}
   872      clone_script: *get_gosrc_aarch64
   873      setup_script: *setup
   874      main_script: *main
   875      always: *logs_artifacts
   876  
   877  
   878  remote_system_test_task:
   879      <<: *local_system_test_task
   880      alias: remote_system_test
   881      env:
   882          TEST_FLAVOR: sys
   883          PODBIN_NAME: remote
   884  
   885  
   886  remote_system_test_aarch64_task:
   887      <<: *local_system_test_task_aarch64
   888      alias: remote_system_test_aarch64
   889      env:
   890          TEST_FLAVOR: sys
   891          PODBIN_NAME: remote
   892  
   893  
   894  rootless_remote_system_test_task:
   895      matrix:
   896          # Minimal sanity testing: only the latest Fedora
   897          - env:
   898                DISTRO_NV: ${FEDORA_NAME}
   899                # Not used here, is used in other tasks
   900                VM_IMAGE_NAME: ${FEDORA_CACHE_IMAGE_NAME}
   901                CTR_FQIN: ${FEDORA_CONTAINER_FQIN}
   902                CI_DESIRED_RUNTIME: crun
   903      <<: *local_system_test_task
   904      alias: rootless_remote_system_test
   905      gce_instance: *standardvm
   906      env:
   907          TEST_FLAVOR: sys
   908          PODBIN_NAME: remote
   909          PRIV_NAME: rootless
   910  
   911  
   912  rootless_system_test_task:
   913      name: *std_name_fmt
   914      alias: rootless_system_test
   915      # Docs: ./contrib/cirrus/CIModes.md
   916      only_if: *not_tag_magic
   917      depends_on: *build
   918      matrix: *platform_axis
   919      gce_instance: *standardvm
   920      env:
   921          TEST_FLAVOR: sys
   922          PRIV_NAME: rootless
   923      clone_script: *get_gosrc
   924      setup_script: *setup
   925      main_script: *main
   926      always: *logs_artifacts
   927  
   928  
   929  minikube_test_task:
   930      name: *std_name_fmt
   931      alias: minikube_test
   932      # Docs: ./contrib/cirrus/CIModes.md
   933      only_if: *not_tag_magic
   934      depends_on: *build
   935      gce_instance: *standardvm
   936      env:
   937          <<: *stdenvars
   938          TEST_FLAVOR: minikube
   939          PRIV_NAME: rootless
   940      clone_script: *get_gosrc
   941      setup_script: *setup
   942      main_script: *main
   943      always: *logs_artifacts
   944  
   945  farm_test_task:
   946      name: *std_name_fmt
   947      alias: farm_test
   948      # Docs: ./contrib/cirrus/CIModes.md
   949      only_if: *not_tag_magic
   950      depends_on: *build
   951      gce_instance: *standardvm
   952      env:
   953          <<: *stdenvars
   954          TEST_FLAVOR: farm
   955          PRIV_NAME: rootless
   956      clone_script: *get_gosrc
   957      setup_script: *setup
   958      main_script: *main
   959      always: *logs_artifacts
   960  
   961  buildah_bud_test_task:
   962      name: *std_name_fmt
   963      alias: buildah_bud_test
   964      # Docs: ./contrib/cirrus/CIModes.md
   965      only_if: *not_tag_magic
   966      depends_on: *build
   967      env:
   968          <<: *stdenvars
   969          TEST_FLAVOR: bud
   970      matrix:
   971          - env:
   972              PODBIN_NAME: podman
   973          - env:
   974              PODBIN_NAME: remote
   975      gce_instance: *standardvm
   976      timeout_in: 45m
   977      clone_script: *get_gosrc
   978      setup_script: *setup
   979      main_script: *main
   980      always: *int_logs_artifacts
   981  
   982  upgrade_test_task:
   983      name: "Upgrade test: from $PODMAN_UPGRADE_FROM"
   984      alias: upgrade_test
   985      # Docs: ./contrib/cirrus/CIModes.md
   986      only_if: *not_tag_magic
   987      depends_on: *build
   988      matrix:
   989          - env:
   990                # 2024-02: as long as possible/reasonable, try to keep
   991                #   one version < 4.8 so we can test boltdb. v4.3.1 is
   992                #   the lowest we can go right now, builds before that
   993                #   have netavark <1.4 which hangs on f39 kernel (#21863).
   994                PODMAN_UPGRADE_FROM: v4.3.1
   995          - env:
   996                PODMAN_UPGRADE_FROM: v4.8.0
   997      gce_instance: *standardvm
   998      env:
   999          TEST_FLAVOR: upgrade_test
  1000          DISTRO_NV: ${FEDORA_NAME}
  1001          VM_IMAGE_NAME: ${FEDORA_CACHE_IMAGE_NAME}
  1002          # Never force a DB, let the old version decide its default
  1003          CI_DESIRED_DATABASE:
  1004      clone_script: *get_gosrc
  1005      setup_script: *setup
  1006      main_script: *main
  1007      always: *logs_artifacts
  1008  
  1009  
  1010  # This task is critical.  It updates the "last-used by" timestamp stored
  1011  # in metadata for all VM images.  This mechanism functions in tandem with
  1012  # an out-of-band pruning operation to remove disused VM images.
  1013  meta_task:
  1014      name: "VM img. keepalive"
  1015      alias: meta
  1016      container:
  1017          cpu: 2
  1018          memory: 2
  1019          image: quay.io/libpod/imgts:latest
  1020      env:
  1021          # Space-separated list of images used by this repository state
  1022          IMGNAMES: >-
  1023              ${FEDORA_CACHE_IMAGE_NAME}
  1024              ${PRIOR_FEDORA_CACHE_IMAGE_NAME}
  1025              ${RAWHIDE_CACHE_IMAGE_NAME}
  1026              ${DEBIAN_CACHE_IMAGE_NAME}
  1027          EC2IMGNAMES: >-
  1028            ${FEDORA_AARCH64_AMI}
  1029            ${FEDORA_AMI}
  1030            ${WINDOWS_AMI}
  1031          BUILDID: "${CIRRUS_BUILD_ID}"
  1032          REPOREF: "${CIRRUS_REPO_NAME}"
  1033          AWSINI: ENCRYPTED[21b2db557171b11eb5abdbccae593f48c9caeba86dfcc4d4ff109edee9b4656ab6720a110dadfcd51e88cc59a71cc7af]
  1034          GCPJSON: ENCRYPTED[3a198350077849c8df14b723c0f4c9fece9ebe6408d35982e7adf2105a33f8e0e166ed3ed614875a0887e1af2b8775f4]
  1035          GCPNAME: ENCRYPTED[2f9738ef295a706f66a13891b40e8eaa92a89e0e87faf8bed66c41eca72bf76cfd190a6f2d0e8444c631fdf15ed32ef6]
  1036          GCPPROJECT: libpod-218412
  1037      clone_script: *noop
  1038      script: /usr/local/bin/entrypoint.sh
  1039  
  1040  
  1041  # Status aggregator for all tests.  This task ensures a defined set of tasks
  1042  # all passed, and allows confirming that based on the status of this task.
  1043  success_task:
  1044      # N/B: The prow merge-bot (tide) is sensitized to this exact name, DO NOT CHANGE IT.
  1045      # Ref: https://github.com/openshift/release/pull/48855
  1046      name: "Total Success"
  1047      alias: success
  1048      # N/B: ALL tasks must be listed here, minus their '_task' suffix.
  1049      depends_on:
  1050          - build_success
  1051          - bindings
  1052          - swagger
  1053          - win_installer
  1054          - docker-py_test
  1055          - unit_test
  1056          - apiv2_test
  1057          - compose_test
  1058          - local_integration_test
  1059          - remote_integration_test
  1060          - container_integration_test
  1061          - rootless_integration_test
  1062          - podman_machine
  1063          - podman_machine_aarch64
  1064          - podman_machine_windows
  1065          - podman_machine_mac
  1066          - local_system_test
  1067          - local_system_test_aarch64
  1068          - remote_system_test
  1069          - remote_system_test_aarch64
  1070          - rootless_remote_system_test
  1071          - rootless_system_test
  1072          - local_system_test
  1073          - local_system_test_aarch64
  1074          - remote_system_test
  1075          - rootless_remote_system_test
  1076          - rootless_system_test
  1077          - minikube_test
  1078          - farm_test
  1079          - buildah_bud_test
  1080          - upgrade_test
  1081          - meta
  1082      env:
  1083          CTR_FQIN: ${FEDORA_CONTAINER_FQIN}
  1084      container: *smallcontainer
  1085      clone_script: *noop
  1086      script: |
  1087          if [[ "$CIRRUS_CHANGE_TITLE" =~ CI:MACHINE ]] && [[ -n "$CIRRUS_PR" ]]; then
  1088              echo "Error: Risk of untested change merge."
  1089              echo "Please remove [CI:MACHINE] from title."
  1090              exit 1
  1091          fi
  1092  
  1093  # WARNING: Most of the artifacts captured here are also have their
  1094  # permalinks present in the `DOWNLOADS.md` file.  Any changes made
  1095  # here, should probably be reflected in that document.
  1096  artifacts_task:
  1097      name: "Artifacts"
  1098      alias: artifacts
  1099      # Docs: ./contrib/cirrus/CIModes.md
  1100      only_if: >-
  1101          $CIRRUS_CHANGE_TITLE !=~ '.*CI:DOCS.*' &&
  1102          $CIRRUS_BRANCH !=~ 'v[0-9\.]+-rhel' &&
  1103          $CIRRUS_BASE_BRANCH !=~ 'v[0-9\.]+-rhel'
  1104      depends_on:
  1105          - success
  1106      # This task is a secondary/convenience for downstream consumers, don't
  1107      # block development progress if there is a failure in a PR, only break
  1108      # when running on branches or tags.
  1109      allow_failures: $CIRRUS_PR != ''
  1110      container: *smallcontainer
  1111      env:
  1112          CTR_FQIN: ${FEDORA_CONTAINER_FQIN}
  1113          TEST_ENVIRON: container
  1114      # In order to keep the download URL and Cirrus-CI artifact.zip contents
  1115      # simple, nothing should exist in $CIRRUS_WORKING_DIR except for artifacts.
  1116      clone_script: *noop
  1117      fedora_binaries_script:
  1118          - mkdir -p /tmp/fed
  1119          - cd /tmp/fed
  1120          - $ARTCURL/Build%20for%20${FEDORA_NAME}/repo/repo.tbz
  1121          - tar xjf repo.tbz
  1122          - cp ./bin/* $CIRRUS_WORKING_DIR/
  1123      alt_binaries_intel_script:
  1124          - mkdir -p /tmp/alt
  1125          - cd /tmp/alt
  1126          - $ARTCURL/Alt%20Arch.%20x86%20Cross/repo/repo.tbz
  1127          - tar xjf repo.tbz
  1128          - mv ./*.tar.gz $CIRRUS_WORKING_DIR/
  1129      alt_binaries_arm_script:
  1130          - mkdir -p /tmp/alt
  1131          - cd /tmp/alt
  1132          - $ARTCURL/Alt%20Arch.%20ARM%20Cross/repo/repo.tbz
  1133          - tar xjf repo.tbz
  1134          - mv ./*.tar.gz $CIRRUS_WORKING_DIR/
  1135      alt_binaries_mips_script:
  1136          - mkdir -p /tmp/alt
  1137          - cd /tmp/alt
  1138          - $ARTCURL/Alt%20Arch.%20MIPS%20Cross/repo/repo.tbz
  1139          - tar xjf repo.tbz
  1140          - mv ./*.tar.gz $CIRRUS_WORKING_DIR/
  1141      alt_binaries_mips64_script:
  1142          - mkdir -p /tmp/alt
  1143          - cd /tmp/alt
  1144          - $ARTCURL/Alt%20Arch.%20MIPS64%20Cross/repo/repo.tbz
  1145          - tar xjf repo.tbz
  1146          - mv ./*.tar.gz $CIRRUS_WORKING_DIR/
  1147      alt_binaries_other_script:
  1148          - mkdir -p /tmp/alt
  1149          - cd /tmp/alt
  1150          - $ARTCURL/Alt%20Arch.%20Other%20Cross/repo/repo.tbz
  1151          - tar xjf repo.tbz
  1152          - mv ./*.tar.gz $CIRRUS_WORKING_DIR/
  1153      win_binaries_script:
  1154          - mkdir -p /tmp/win
  1155          - cd /tmp/win
  1156          - $ARTCURL/Windows%20Cross/repo/repo.tbz
  1157          - tar xjf repo.tbz
  1158          - mv ./podman-remote*.zip $CIRRUS_WORKING_DIR/
  1159      osx_binaries_script:
  1160          - mkdir -p /tmp/osx
  1161          - cd /tmp/osx
  1162          - $ARTCURL/OSX%20Cross/repo/repo.tbz
  1163          - tar xjf repo.tbz
  1164          - mv ./podman-remote-release-darwin_*.zip $CIRRUS_WORKING_DIR/
  1165          - mv ./contrib/pkginstaller/out/podman-installer-macos-*.pkg $CIRRUS_WORKING_DIR/
  1166      always:
  1167        contents_script: ls -la $CIRRUS_WORKING_DIR
  1168        # Produce downloadable files and an automatic zip-file accessible
  1169        # by a consistent URL, based on contents of $CIRRUS_WORKING_DIR
  1170        # Ref: https://cirrus-ci.org/guide/writing-tasks/#latest-build-artifacts
  1171        binary_artifacts:
  1172            path: ./*
  1173            type: application/octet-stream
  1174  
  1175  
  1176  # When a new tag is pushed, confirm that the code and commits
  1177  # meet criteria for an official release.
  1178  release_task:
  1179      name: "Verify Release"
  1180      alias: release
  1181      # This should _only_ run for new tags
  1182      # Docs: ./contrib/cirrus/CIModes.md
  1183      only_if: $CIRRUS_TAG != ''
  1184      depends_on:
  1185          - build_success
  1186          - success
  1187      gce_instance: *standardvm
  1188      env:
  1189          <<: *stdenvars
  1190          TEST_FLAVOR: release
  1191      clone_script: *get_gosrc
  1192      setup_script: *setup
  1193      main_script: *main
  1194  
  1195  
  1196  # When preparing to release a new version, this task may be manually
  1197  # activated at the PR stage to verify the build is proper for a potential
  1198  # podman release.
  1199  #
  1200  # Note: This cannot use a YAML alias on 'release_task' as of this
  1201  # comment, it is incompatible with 'trigger_type: manual'
  1202  release_test_task:
  1203      name: "Optional Release Test"
  1204      alias: release_test
  1205      # Release-PRs always include "release" or "Bump" in the title
  1206      # Docs: ./contrib/cirrus/CIModes.md
  1207      only_if: $CIRRUS_CHANGE_TITLE =~ '.*((release)|(bump)).*'
  1208      # Allow running manually only as part of release-related builds
  1209      # see RELEASE_PROCESS.md
  1210      trigger_type: manual
  1211      depends_on:
  1212          - build_success
  1213          - success
  1214      gce_instance: *standardvm
  1215      env:
  1216          <<: *stdenvars
  1217          TEST_FLAVOR: release
  1218      clone_script: *get_gosrc
  1219      setup_script: *setup
  1220      main_script: *main