name: Integration Tests on: push: branches: [master] pull_request: branches: [master] jobs: unit-tests: name: Unit Tests runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version-file: go.mod - run: go build ./... - run: go vet ./... - run: go test -race -coverprofile=coverage-unit.out ./... - uses: actions/upload-artifact@v4 with: name: coverage-unit path: coverage-unit.out debian: name: Debian (apt) runs-on: ubuntu-latest container: debian:bookworm steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version-file: go.mod - name: Setup run: | apt-get update apt-get install -y sudo tree curl - name: Integration tests run: go test -v -tags integration -count=1 -coverprofile=coverage-debian.out ./apt/ ./dpkg/ ./detect/ - uses: actions/upload-artifact@v4 if: always() with: name: coverage-debian path: coverage-debian.out ubuntu: name: Ubuntu (apt + snap) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version-file: go.mod - name: Setup run: | sudo apt-get update sudo apt-get install -y tree sudo snap install hello-world 2>/dev/null; sudo snap remove hello-world 2>/dev/null - name: Integration tests (apt) run: sudo -E go test -v -tags integration -count=1 -coverprofile=coverage-ubuntu-apt.out ./apt/ ./dpkg/ ./detect/ - name: Integration tests (snap) run: sudo -E go test -v -tags integration -count=1 -coverprofile=coverage-ubuntu-snap.out ./snap/ - uses: actions/upload-artifact@v4 if: always() with: name: coverage-ubuntu path: coverage-ubuntu-*.out fedora-dnf4: name: Fedora 39 (dnf4) runs-on: ubuntu-latest container: fedora:39 steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version-file: go.mod - name: Setup run: | dnf install -y tree sudo - name: Integration tests run: go test -v -tags integration -count=1 -coverprofile=coverage-fedora39.out ./dnf/ ./rpm/ ./detect/ - uses: actions/upload-artifact@v4 if: always() with: name: coverage-fedora39 path: coverage-fedora39.out fedora-dnf5: name: Fedora latest (dnf5) runs-on: ubuntu-latest container: fedora:latest steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version-file: go.mod - name: Setup run: | dnf install -y tree sudo - name: Integration tests run: go test -v -tags integration -count=1 -coverprofile=coverage-fedora-latest.out ./dnf/ ./rpm/ ./detect/ - uses: actions/upload-artifact@v4 if: always() with: name: coverage-fedora-latest path: coverage-fedora-latest.out alpine: name: Alpine (apk) runs-on: ubuntu-latest container: alpine:latest steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version-file: go.mod - name: Setup run: | apk add --no-cache sudo tree bash - name: Integration tests run: go test -v -tags integration -count=1 -coverprofile=coverage-alpine.out ./apk/ ./detect/ - uses: actions/upload-artifact@v4 if: always() with: name: coverage-alpine path: coverage-alpine.out arch: name: Arch Linux (pacman) runs-on: ubuntu-latest container: archlinux:latest steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version-file: go.mod - name: Setup run: | pacman -Syu --noconfirm pacman -S --noconfirm sudo tree - name: Integration tests run: go test -v -tags integration -count=1 -coverprofile=coverage-arch.out ./pacman/ ./detect/ - uses: actions/upload-artifact@v4 if: always() with: name: coverage-arch path: coverage-arch.out flatpak: name: Ubuntu + Flatpak runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version-file: go.mod - name: Verify flatpak not installed run: | if command -v flatpak &>/dev/null; then echo "already installed"; else echo "not installed — good"; fi - name: Install flatpak run: | sudo apt-get update sudo apt-get install -y flatpak sudo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo - name: Integration tests run: sudo -E go test -v -tags integration -count=1 -coverprofile=coverage-flatpak.out ./flatpak/ - uses: actions/upload-artifact@v4 if: always() with: name: coverage-flatpak path: coverage-flatpak.out codecov: name: Upload Coverage runs-on: ubuntu-latest needs: [unit-tests, debian, ubuntu, fedora-dnf4, fedora-dnf5, alpine, arch, flatpak] if: always() steps: - uses: actions/checkout@v4 - uses: actions/download-artifact@v4 with: pattern: coverage-* merge-multiple: true - name: List coverage files run: ls -la coverage-*.out 2>/dev/null || echo "No coverage files found" - uses: codecov/codecov-action@v5 with: files: coverage-unit.out,coverage-debian.out,coverage-ubuntu-apt.out,coverage-ubuntu-snap.out,coverage-fedora39.out,coverage-fedora-latest.out,coverage-alpine.out,coverage-arch.out,coverage-flatpak.out fail_ci_if_error: false env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}