ci: add e2e (#90)
Reviewed-on: #90 Co-authored-by: Maxim Slipenko <no-reply@maxim.slipenko.com> Co-committed-by: Maxim Slipenko <no-reply@maxim.slipenko.com>
This commit is contained in:
57
.gitea/workflows/e2e-tests.yaml
Normal file
57
.gitea/workflows/e2e-tests.yaml
Normal file
@ -0,0 +1,57 @@
|
||||
# ALR - Any Linux Repository
|
||||
# Copyright (C) 2025 The ALR Authors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
name: E2E
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main ]
|
||||
pull_request:
|
||||
|
||||
|
||||
jobs:
|
||||
tests:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
container:
|
||||
image: altlinux.space/maks1ms/actions-container-runner:latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: https://github.com/actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set up Go
|
||||
uses: https://github.com/actions/setup-go@v5
|
||||
with:
|
||||
go-version: '1.24'
|
||||
|
||||
- name: Cache Podman images
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
~/.local/share/containers/storage
|
||||
/var/lib/containers/storage
|
||||
key: ${{ runner.os }}-primes
|
||||
|
||||
- name: Run E2E tests
|
||||
env:
|
||||
DOCKER_HOST: unix:///tmp/podman.sock
|
||||
IGNORE_ROOT_CHECK: 1
|
||||
run: |
|
||||
podman system service -t 0 unix:///tmp/podman.sock &
|
||||
make e2e-test
|
@ -25,7 +25,6 @@ import (
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@ -121,29 +120,6 @@ var COMMON_SYSTEMS []string = []string{
|
||||
"ubuntu-24.04",
|
||||
}
|
||||
|
||||
func init() {
|
||||
for _, id := range ALL_SYSTEMS {
|
||||
buildAlrTestImage(id)
|
||||
}
|
||||
}
|
||||
|
||||
func buildAlrTestImage(id string) {
|
||||
cmd := exec.Command(
|
||||
"docker",
|
||||
"build",
|
||||
"-t", fmt.Sprintf("alr-testimage-%s", id),
|
||||
"-f", fmt.Sprintf("images/Dockerfile.%s", id),
|
||||
".",
|
||||
)
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
err := cmd.Run()
|
||||
if err != nil {
|
||||
fmt.Println("Error:", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func dockerMultipleRun(t *testing.T, name string, ids []string, f func(t *testing.T, runnable e2e.Runnable)) {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
for _, id := range ids {
|
||||
@ -158,17 +134,25 @@ func dockerMultipleRun(t *testing.T, name string, ids []string, f func(t *testin
|
||||
e, err := e2e.New(e2e.WithVerbose(), e2e.WithName(fmt.Sprintf("alr-%s", truncatedHash)))
|
||||
assert.NoError(t, err)
|
||||
t.Cleanup(e.Close)
|
||||
imageId := fmt.Sprintf("alr-testimage-%s", id)
|
||||
imageId := fmt.Sprintf("ghcr.io/maks1ms/alr-e2e-test-image-%s", id)
|
||||
runnable := e.Runnable(dockerName).Init(
|
||||
e2e.StartOptions{
|
||||
Image: imageId,
|
||||
Image: imageId,
|
||||
Volumes: []string{
|
||||
// "./alr:/usr/bin/alr",
|
||||
"./alr:/tmp/alr",
|
||||
},
|
||||
Privileged: true,
|
||||
},
|
||||
)
|
||||
assert.NoError(t, e2e.StartAndWaitReady(runnable))
|
||||
err = runnable.Exec(e2e.NewCommand("/bin/alr-test-setup", "alr-install"))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = runnable.Exec(e2e.NewCommand("/bin/alr-test-setup", "passwordless-sudo-setup"))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
f(t, runnable)
|
||||
})
|
||||
}
|
||||
|
@ -1,4 +0,0 @@
|
||||
FROM alpine:latest
|
||||
RUN adduser -s /bin/bash alr-user
|
||||
USER alr-user
|
||||
ENTRYPOINT ["tail", "-f", "/dev/null"]
|
@ -1,6 +0,0 @@
|
||||
FROM registry.altlinux.org/sisyphus/alt:latest
|
||||
RUN apt-get update && apt-get install -y ca-certificates rpm-build
|
||||
RUN useradd -m -s /bin/bash alr-user
|
||||
USER alr-user
|
||||
WORKDIR /home/alr-user
|
||||
ENTRYPOINT ["tail", "-f", "/dev/null"]
|
@ -1,4 +0,0 @@
|
||||
FROM archlinux:latest
|
||||
RUN useradd -m -s /bin/bash alr-user
|
||||
USER alr-user
|
||||
ENTRYPOINT ["tail", "-f", "/dev/null"]
|
@ -1,18 +0,0 @@
|
||||
FROM fedora:41
|
||||
RUN dnf install -y ca-certificates sudo rpm-build bindfs
|
||||
RUN <<EOF
|
||||
useradd -m -s /bin/bash -G wheel user
|
||||
echo "user ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/user
|
||||
chmod 0440 /etc/sudoers.d/user
|
||||
|
||||
useradd -m -s /bin/bash alr
|
||||
mkdir -p /var/cache/alr /etc/alr
|
||||
chown alr:alr /var/cache/alr /etc/alr
|
||||
EOF
|
||||
COPY ./alr /usr/bin
|
||||
RUN <<EOF
|
||||
setcap cap_setuid,cap_setgid+ep /usr/bin/alr
|
||||
EOF
|
||||
USER user
|
||||
WORKDIR /home/user
|
||||
ENTRYPOINT ["tail", "-f", "/dev/null"]
|
@ -1,4 +0,0 @@
|
||||
FROM opensuse/leap:latest
|
||||
RUN useradd -m -s /bin/bash alr-user
|
||||
USER alr-user
|
||||
ENTRYPOINT ["tail", "-f", "/dev/null"]
|
@ -1,4 +0,0 @@
|
||||
FROM registry.red-soft.ru/ubi8/ubi:latest
|
||||
RUN useradd -m -s /bin/bash alr-user
|
||||
USER alr-user
|
||||
ENTRYPOINT ["tail", "-f", "/dev/null"]
|
@ -1,17 +0,0 @@
|
||||
FROM ubuntu:24.10
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates sudo libcap2-bin
|
||||
RUN <<EOF
|
||||
useradd -m -s /bin/bash user
|
||||
echo "user ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/user
|
||||
chmod 0440 /etc/sudoers.d/user
|
||||
|
||||
useradd -m -s /bin/bash alr
|
||||
mkdir -p /var/cache/alr /etc/alr
|
||||
chown alr:alr /var/cache/alr /etc/alr
|
||||
EOF
|
||||
COPY ./alr /usr/bin
|
||||
RUN <<EOF
|
||||
setcap cap_setuid,cap_setgid+ep /usr/bin/alr
|
||||
EOF
|
||||
USER user
|
||||
ENTRYPOINT ["tail", "-f", "/dev/null"]
|
@ -43,6 +43,10 @@ func TestE2EIssue32Interactive(t *testing.T) {
|
||||
"alr", "fix",
|
||||
)))
|
||||
|
||||
assert.NoError(t, r.Exec(e2e.NewCommand(
|
||||
"sudo", "apt-get", "update",
|
||||
)))
|
||||
|
||||
assert.NoError(t, r.Exec(e2e.NewCommand(
|
||||
"sudo", "alr", "--interactive=false", "install", "ca-certificates",
|
||||
)))
|
||||
|
Reference in New Issue
Block a user