1+ name : Setup Podman
2+ description : Install Podman
3+ inputs :
4+ version :
5+ required : true
6+ default : latest
7+ description : Engine version
8+ runs :
9+ using : composite
10+ steps :
11+ - name : Set up Docker APT repository
12+ shell : bash
13+ run : | # shell
14+ set -euo pipefail
15+
16+ # See https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository
17+ sudo apt-get update
18+ sudo apt-get install ca-certificates curl
19+ sudo install -m 0755 -d /etc/apt/keyrings
20+ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
21+ sudo chmod a+r /etc/apt/keyrings/docker.asc
22+
23+ # Add the repository to Apt sources:
24+ echo \
25+ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
26+ $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
27+ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
28+ sudo apt-get update
29+
30+ - name : Install Docker CLI
31+ shell : bash
32+ run : sudo apt-get install docker-ce-cli
33+
34+ - name : Install Podman Engine
35+ shell : bash
36+ run : | # shell
37+ set -euo pipefail
38+
39+ BASE_URL="https://github.com/mgoltzsche/podman-static/releases/latest/download"
40+ if [[ "${{ inputs.version }}" != "latest" ]]; then
41+ BASE_URL="https://github.com/mgoltzsche/podman-static/releases/download/v${{ inputs.version }}"
42+ fi
43+
44+ ARCHIVE_NAME="podman-linux-$(dpkg --print-architecture)"
45+
46+ cd /tmp
47+ curl -L "${BASE_URL}/${ARCHIVE_NAME}.tar.gz" \
48+ | tar -xz
49+ sudo rsync -av "${ARCHIVE_NAME}/etc/" /etc
50+ sudo rsync -av "${ARCHIVE_NAME}/usr/" /usr
51+
52+ sudo podman version
53+
54+ - shell : bash
55+ name : Start Podman Engine
56+ run : | # shell
57+ podman_version=$(sudo podman version --format="{{.Server.Version}}")
58+ export podman_socket="/var/run/podman-${podman_version}.sock"
59+
60+ export TIMEOUT=$(($(date +%s) + 30)) # 30 seconds in the future
61+ function await() {
62+ exit_code=0
63+ echo "Polling: $@" >&2
64+ while true; do
65+ if (( $(date +%s) >= $TIMEOUT )); then
66+ echo "Timeout reached!" >&2
67+ return 1
68+ fi
69+
70+ "$@" || exit_code=$?
71+ if [[ $exit_code == 0 ]]; then
72+ break
73+ fi
74+
75+ sleep 1
76+ done
77+ }
78+
79+ sudo podman system service --time=0 "unix://${podman_socket}" &
80+
81+ sudo groupadd -f docker
82+ sudo usermod -aG docker $USER
83+ newgrp docker
84+
85+ # Await socket creation
86+ await test -S "${podman_socket}"
87+ sudo chgrp docker "${podman_socket}"
88+ sudo chmod 660 "${podman_socket}"
89+
90+ docker context create --docker "host=unix://${podman_socket}" "podman-${podman_version}"
91+ docker context use "podman-${podman_version}"
92+
93+ # Await start of engine
94+ await docker ps
95+
96+ - name : Podman version
97+ shell : bash
98+ run : docker version --format '{{.Server.Version}}'
0 commit comments