summaryrefslogtreecommitdiff
path: root/contrib/cirrus/container_test.sh
blob: a0542f4a05c2a54a8f36b775db1312e762205eeb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#!/bin/bash
set -xeo pipefail

export GOPATH=/var/tmp/go
export PATH=$HOME/gopath/bin:$PATH:$GOPATH/bin
export GOSRC=$GOPATH/src/github.com/containers/libpod

DIST=${DIST:=""}
CONTAINER_RUNTIME=${DIST:=""}

source /etc/os-release

INTEGRATION_TEST_ENVS=""

# For all distributions not Fedora, we need to skip USERNS tests
# for now.
if [ "${ID}" != "fedora" ] || [ "${CONTAINER_RUNTIME}" != "" ]; then
    INTEGRATION_TEST_ENVS="SKIP_USERNS=1"
fi

pwd

# -i install
# -b build
# -t integration test
# -u unit test
# -v validate

build=0
install=0
integrationtest=0
unittest=0
validate=0
options=0
remote=0
install_tools_made=0

while getopts "bituv" opt; do
    case "$opt" in
    b) build=1
       options=1
       ;;
    i) install=1
       options=1
       ;;
    t) integrationtest=1
       options=1
       ;;
    u) unittest=1
       options=1
       ;;
    v) validate=1
       options=1
       ;;
    esac
done

# The TEST_REMOTE_CLIENT environment variable decides whether
# to test varlinke
if [[ "$TEST_REMOTE_CLIENT" == "true" ]]; then
    remote=1
fi

# If no options are passed, do everything
if [ $options -eq 0 ]; then
    build=1
    install=1
    integrationtest=1
    unittest=1
    validate=1
fi

# Make Install tools function used by multiple sections below
make_install_tools () {
    # Only make the install tools once
    if [ $install_tools_made -eq 0 ]; then
        make install.tools TAGS="${TAGS}"
    fi
    install_tools_made=1
}

CONTAINER_RUNTIME=${CONTAINER_RUNTIME:-none}

if [ "${CONTAINER_RUNTIME}" == "none" ]; then
    mkdir -p /$GOPATH/src/github.com/containers/
    mv /var/tmp/checkout $GOSRC
    cd $GOSRC
    pwd
fi


export TAGS="seccomp $($GOSRC/hack/btrfs_tag.sh) $($GOSRC/hack/libdm_tag.sh) $($GOSRC/hack/btrfs_installed_tag.sh) $($GOSRC/hack/ostree_tag.sh) $($GOSRC/hack/selinux_tag.sh)"

# Validate
if [ $validate -eq 1 ]; then
    make_install_tools
    # PAPR adds a merge commit, for testing, which fails the
    # short-commit-subject validation test, so tell git-validate.sh to only check
    # up to, but not including, the merge commit.
    export GITVALIDATE_TIP=$(cd $GOSRC; git log -2 --pretty='%H' | tail -n 1)
    make gofmt TAGS="${TAGS}"

    # Only check lint and gitvalidation on more recent
    # distros with updated git and tooling
    if [[ ${DIST} == "Fedora" ]]; then
        HEAD=$GITVALIDATE_TIP make -C $GOSRC .gitvalidation TAGS="${TAGS}"
        make lint
    fi
fi

# Unit tests
if [ $unittest -eq 1 ]; then
    make localunit TAGS="${TAGS}"
fi

# Make Podman
if [ $build -eq 1 ]; then
    make_install_tools
    make TAGS="${TAGS}" GOPATH=$GOPATH
    make podman-remote TAGS="${TAGS}" GOPATH=$GOPATH
fi

# Install Podman
if [ $install -eq 1 ]; then
    make_install_tools
    make TAGS="${TAGS}" install.bin PREFIX=/usr ETCDIR=/etc
    make TAGS="${TAGS}" install.man PREFIX=/usr ETCDIR=/etc
    make TAGS="${TAGS}" install.cni PREFIX=/usr ETCDIR=/etc
    make TAGS="${TAGS}" install.systemd PREFIX=/usr ETCDIR=/etc
fi

# Run integration tests
if [ $integrationtest -eq 1 ]; then
    make TAGS="${TAGS}" test-binaries
    make varlink_generate
    make ginkgo $INTEGRATION_TEST_ENVS
    if [ $remote -eq 1 ]; then
        make ginkgo-remote $INTEGRATION_TEST_ENVS
    fi
fi