---

# Main collection of env. vars to set for all tasks and scripts.
env:
    ####
    #### Global variables used for all tasks
    ####
    # Name of the ultimate destination branch for this CI run, PR or post-merge.
    DEST_BRANCH: "release-1.21"
    GOPATH: "/var/tmp/go"
    GOSRC: "${GOPATH}/src/github.com/containers/buildah"
    # Overrides default location (/tmp/cirrus) for repo clone
    CIRRUS_WORKING_DIR: "${GOSRC}"
    # Shell used to execute all script commands
    CIRRUS_SHELL: "/bin/bash"
    # Automation script path relative to $CIRRUS_WORKING_DIR)
    SCRIPT_BASE: "./contrib/cirrus"
    # No need to go crazy, but grab enough to cover most PRs
    CIRRUS_CLONE_DEPTH: 50
    # Unless set by in_podman.sh, default to operating outside of a podman container
    IN_PODMAN: 'false'

    ####
    #### Cache-image names to test with
    ####
    # GCE project where images live
    IMAGE_PROJECT: "libpod-218412"
    # See https://github.com/containers/podman/blob/master/contrib/cirrus/README.md#test_build_cache_images_task-task
    FEDORA_NAME: "fedora-34"
    PRIOR_FEDORA_NAME: "fedora-33"
    UBUNTU_NAME: "ubuntu-2104"
    PRIOR_UBUNTU_NAME: "ubuntu-2010"

    IMAGE_SUFFIX: "c6032583541653504"
    FEDORA_CACHE_IMAGE_NAME: "fedora-${IMAGE_SUFFIX}"
    PRIOR_FEDORA_CACHE_IMAGE_NAME: "prior-fedora-${IMAGE_SUFFIX}"
    UBUNTU_CACHE_IMAGE_NAME: "ubuntu-${IMAGE_SUFFIX}-a"
    PRIOR_UBUNTU_CACHE_IMAGE_NAME: "prior-ubuntu-${IMAGE_SUFFIX}"

    IN_PODMAN_IMAGE: "quay.io/libpod/fedora_podman:${IMAGE_SUFFIX}"

    ####
    #### Command variables to help avoid duplication
    ####
    # Command to prefix every output line with a timestamp
    # (can't do inline awk script, Cirrus-CI or YAML mangles quoting)
    _TIMESTAMP: 'awk -f ${CIRRUS_WORKING_DIR}/${SCRIPT_BASE}/timestamp.awk'

gcp_credentials: ENCRYPTED[ae0bf7370f0b6e446bc61d0865a2c55d3e166b3fab9466eb0393e38e1c66a31ca4c71ddc7e0139d47d075c36dd6d3fd7]

# Default timeout for each task
timeout_in: 120m

# Default VM to use unless set or modified by task
gce_instance:
    image_project: "${IMAGE_PROJECT}"
    zone: "us-central1-c"  # Required by Cirrus for the time being
    cpu: 2
    memory: "4Gb"
    disk: 200  # Gigabytes, do not set less than 200 per obscure GCE docs re: I/O performance
    image_name: "${FEDORA_CACHE_IMAGE_NAME}"


# Update metadata on VM images referenced by this repository state
meta_task:
    name: "VM img. keepalive"
    alias: meta

    container:
        image: "quay.io/libpod/imgts:latest"
        cpu: 1
        memory: 1

    env:
        # Space-separated list of images used by this repository state
        IMGNAMES: |-
            ${FEDORA_CACHE_IMAGE_NAME}
            ${PRIOR_FEDORA_CACHE_IMAGE_NAME}
            ${UBUNTU_CACHE_IMAGE_NAME}
            ${PRIOR_UBUNTU_CACHE_IMAGE_NAME}
        BUILDID: "${CIRRUS_BUILD_ID}"
        REPOREF: "${CIRRUS_CHANGE_IN_REPO}"
        GCPJSON: ENCRYPTED[d3614d6f5cc0e66be89d4252b3365fd84f14eee0259d4eb47e25fc0bc2842c7937f5ee8c882b7e547b4c5ec4b6733b14]
        GCPNAME: ENCRYPTED[8509e6a681b859479ce6aa275bd3c4ac82de5beec6df6057925afc4cd85b7ef2e879066ae8baaa2d453b82958e434578]
        GCPPROJECT: ENCRYPTED[cc09b62d0ec6746a3df685e663ad25d9d5af95ef5fd843c96f3d0ec9d7f065dc63216b9c685c9f43a776a1d403991494]
        CIRRUS_CLONE_DEPTH: 1  # source not used

    script: '/usr/local/bin/entrypoint.sh |& ${_TIMESTAMP}'


smoke_task:
    alias: 'smoke'
    name: "Smoke Test"

    gce_instance:
        memory: "12Gb"

    # N/B: Skip running this on branches due to multiple bugs in
    # the git-validate tool which are difficult to debug and fix.
    skip: $CIRRUS_PR == ''

    timeout_in: 10m

    setup_script: '${SCRIPT_BASE}/setup.sh |& ${_TIMESTAMP}'
    build_script: '${SCRIPT_BASE}/build.sh |& ${_TIMESTAMP}'
    validate_test_script: '${SCRIPT_BASE}/test.sh validate |& ${_TIMESTAMP}'

    binary_artifacts:
        path: ./bin/*

# Check that all included go modules from other sources match
# # what is expected in `vendor/modules.txt` vs `go.mod`.
vendor_task:
    name: "Test Vendoring"
    alias: vendor

    env:
        CIRRUS_WORKING_DIR: "/var/tmp/go/src/github.com/containers/buildah"
        GOPATH: "/var/tmp/go"
        GOSRC: "/var/tmp/go/src/github.com/containers/buildah"

    # Runs within Cirrus's "community cluster"
    container:
        image: docker.io/library/golang:1.13
        cpu: 1
        memory: 1

    timeout_in: 5m

    vendor_script:
        - 'make vendor'
        - './hack/tree_status.sh'


conformance_task:
    name: 'Build Conformance w/ $STORAGE_DRIVER'
    alias: conformance
    depends_on:
      - vendor

    gce_instance:
        image_name: "${UBUNTU_CACHE_IMAGE_NAME}"

    timeout_in: 25m

    matrix:
        - env:
            STORAGE_DRIVER: 'vfs'
        - env:
            STORAGE_DRIVER: 'overlay'

    setup_script: '${SCRIPT_BASE}/setup.sh |& ${_TIMESTAMP}'
    conformance_test_script: '${SCRIPT_BASE}/test.sh conformance |& ${_TIMESTAMP}'


# Status aggregator for all tests.  This task simply ensures a defined
# set of tasks all passed, and allows confirming that based on the status
# of this task.
success_task:
    name: "Total Success"
    alias: success

    depends_on:
      - meta
      - smoke
      - vendor
      - conformance

    container:
        image: "quay.io/libpod/alpine:latest"
        cpu: 1
        memory: 1

    env:
        CIRRUS_SHELL: direct  # execute command directly

    clone_script: mkdir -p $CIRRUS_WORKING_DIR
    script: /bin/true
