---

# Main collection of env. vars to set for all tasks and scripts.
env:
    ####
    #### Global variables used for all tasks
    ####
    # Overrides default location (/tmp/cirrus) for repo clone
    CIRRUS_WORKING_DIR: "/var/tmp/go/src/github.com/containers/storage"
    # 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

    ####
    #### Cache-image names to test with (double-quotes around names are critical)
    ###
    FEDORA_NAME: "fedora-41"
    DEBIAN_NAME: "debian-13"

    # GCE project where images live
    IMAGE_PROJECT: "libpod-218412"
    # VM Image built in containers/automation_images
    IMAGE_SUFFIX: "c20250107t132430z-f41f40d13"
    FEDORA_CACHE_IMAGE_NAME: "fedora-${IMAGE_SUFFIX}"
    DEBIAN_CACHE_IMAGE_NAME: "debian-${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 --file ${CIRRUS_WORKING_DIR}/${SCRIPT_BASE}/timestamp.awk'
    _DFCMD: 'df -lhTx tmpfs'
    _RAUDITCMD: 'cat /var/log/audit/audit.log'
    _UAUDITCMD: 'cat /var/log/kern.log'
    _JOURNALCMD: 'journalctl -b'

gcp_credentials: ENCRYPTED[c87717f04fb15499d19a3b3fa0ad2cdedecc047e82967785d101e9bc418e93219f755e662feac8390088a2df1a4d8464]

# 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-b"  # Required by Cirrus for the time being
    cpu: 2
    memory: "4Gb"
    disk: 200
    image_name: "${FEDORA_CACHE_IMAGE_NAME}"


linux_testing: &linux_testing
    depends_on:
        - lint
    gce_instance:  # Only need to specify differences from defaults (above)
        image_name: "${VM_IMAGE}"

    # Separate scripts for separate outputs, makes debugging easier.
    setup_script: '${CIRRUS_WORKING_DIR}/${SCRIPT_BASE}/setup.sh |& ${_TIMESTAMP}'
    build_and_test_script: '${CIRRUS_WORKING_DIR}/${SCRIPT_BASE}/build_and_test.sh |& ${_TIMESTAMP}'

    always:
        df_script: '${_DFCMD} || true'
        rh_audit_log_script: '${_RAUDITCMD} || true'
        debian_audit_log_script: '${_UAUDITCMD} || true'
        journal_log_script: '${_JOURNALCMD} || true'


fedora_testing_task: &fedora_testing
    <<: *linux_testing
    alias: fedora_testing
    name: &std_test_name "${OS_NAME} ${TEST_DRIVER}"
    env:
        OS_NAME: "${FEDORA_NAME}"
        VM_IMAGE: "${FEDORA_CACHE_IMAGE_NAME}"
    # Not all $TEST_DRIVER combinations valid for all $VM_IMAGE types.
    matrix: &test_matrix
        - env:
            TEST_DRIVER: "vfs"
        - env:
            TEST_DRIVER: "overlay"
        - env:
            TEST_DRIVER: "overlay-transient"
        - env:
            TEST_DRIVER: "fuse-overlay"
        - env:
            TEST_DRIVER: "fuse-overlay-whiteout"
        - env:
            TEST_DRIVER: "btrfs"


# aufs was dropped between 20.04 and 22.04, can't test it
debian_testing_task: &debian_testing
    <<: *linux_testing
    alias: debian_testing
    name: *std_test_name
    env:
        OS_NAME: "${DEBIAN_NAME}"
        VM_IMAGE: "${DEBIAN_CACHE_IMAGE_NAME}"
    # Not all $TEST_DRIVER combinations valid for all $VM_IMAGE types.
    matrix:
        - env:
            TEST_DRIVER: "vfs"
        - env:
            TEST_DRIVER: "overlay"
        - env:
            TEST_DRIVER: "fuse-overlay"
        - env:
            TEST_DRIVER: "fuse-overlay-whiteout"
        - env:
            TEST_DRIVER: "btrfs"


lint_task:
    alias: lint
    env:
        CIRRUS_WORKING_DIR: "/go/src/github.com/containers/storage"
    container:
        image: golang
    modules_cache:
        fingerprint_script: cat go.sum
        folder: $GOPATH/pkg/mod
    build_script: |
      apt-get update
      apt-get install -y libbtrfs-dev
    test_script: |
      make TAGS=regex_precompile local-validate
      make lint
      make clean


# Update metadata on VM images referenced by this repository state
meta_task:
    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}
            ${DEBIAN_CACHE_IMAGE_NAME}
        BUILDID: "${CIRRUS_BUILD_ID}"
        REPOREF: "${CIRRUS_CHANGE_IN_REPO}"
        GCPJSON: ENCRYPTED[244a93fe8b386b48b96f748342bf741350e43805eee81dd04b45093bdf737e540b993fc735df41f131835fa0f9b65826]
        GCPNAME: ENCRYPTED[91cf7aa421858b26b67835978d224b4a5c46afcf52a0f1ec1b69a99b248715dc8e92a1b56fde18e092acf256fa80ae9c]
        GCPPROJECT: ENCRYPTED[79b0f7eb5958e25bc7095d5d368fa8d94447a43ffacb9c693de438186e2f767b7efe9563d6954297ae4730220e10aa9c]
        CIRRUS_CLONE_DEPTH: 1  # source not used

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


vendor_task:
    alias: vendor
    container:
        image: golang
    modules_cache:
        fingerprint_script: cat go.sum
        folder: $GOPATH/pkg/mod
    build_script: make vendor
    test_script: hack/tree_status.sh

cross_task:
    alias: cross
    container:
        image: golang:1.22
    build_script: make cross

gofix_task:
    alias: gofix
    container:
        image: golang:1.22
    build_script: go fix ./...
    test_script: git diff --exit-code

codespell_task:
    alias: codespell
    container:
        image: python
    build_script: pip install codespell
    test_script: codespell


# 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:
    alias: success
    # N/B: The prow merge-bot (tide) is sensitized to this exact name, DO NOT CHANGE IT.
    # Ref: https://github.com/openshift/release/pull/49820
    name: "Total Success"
    depends_on:
        - lint
        - fedora_testing
        - debian_testing
        - meta
        - vendor
        - cross
        - gofix
        - codespell
    container:
        image: golang:1.21
    clone_script: 'mkdir -p "$CIRRUS_WORKING_DIR"'  # Source code not needed
    script: /bin/true
