From c9235e784eecd26e4f7603fc5af83955836fc759 Mon Sep 17 00:00:00 2001 From: Richard Hansen Date: Mon, 9 Sep 2024 18:55:52 -0400 Subject: [PATCH] GitHub workflow to build and test on push or pull request Only some Debian flavors are tested for now; other distros can be easily added later. --- .github/workflows/ci.yml | 63 ++++++++++++++++++++ .github/workflows/scripts/dist-tarball-check | 59 ++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 .github/workflows/ci.yml create mode 100755 .github/workflows/scripts/dist-tarball-check diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..c69988e --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,63 @@ +name: CI +on: + push: + pull_request: + +jobs: + test-debian-like: + strategy: + fail-fast: false + matrix: + image: + - ubuntu:latest + - ubuntu:22.04 + - debian:testing + - debian:stable + runs-on: ubuntu-latest + container: + image: ${{ matrix.image }} + steps: + - name: install dependencies + run: | + apt-get update && + apt-get install -y --no-install-recommends \ + automake \ + build-essential \ + ca-certificates \ + git \ + pkg-config \ + python3 \ + scdoc \ + && + { + # /usr/share/pkgconfig/systemd.pc was moved from the systemd + # package to a new systemd-dev package in systemd 253-2 (Debian 13 + # (trixie) and later, Ubuntu 23.10 (mantic) and later). + apt-get install -y --no-install-recommends systemd-dev || + apt-get install -y --no-install-recommends systemd + } + env: + DEBIAN_FRONTEND: noninteractive + - uses: actions/checkout@v4 + with: + # Fetch all commits and tags so that build-aux/git-version-gen can + # discover the version number. + fetch-depth: 0 + # https://github.com/actions/checkout/issues/1169 + - name: fix git permissions + run: git config --system --add safe.directory $(pwd) + - name: autogen + run: ./autogen + - name: configure + run: ./configure + - name: check + run: make VERBOSE=1 AM_COLOR_TESTS=always check + - name: distcheck + run: make VERBOSE=1 AM_COLOR_TESTS=always distcheck + - name: distribution tarball is complete + run: ./.github/workflows/scripts/dist-tarball-check + - if: ${{ matrix.image == 'debian:testing' }} + uses: actions/upload-artifact@v4 + with: + name: distribution-tarball + path: keyd-*.tar.gz diff --git a/.github/workflows/scripts/dist-tarball-check b/.github/workflows/scripts/dist-tarball-check new file mode 100755 index 0000000..6382a01 --- /dev/null +++ b/.github/workflows/scripts/dist-tarball-check @@ -0,0 +1,59 @@ +#!/bin/sh + +pecho() { printf %s\\n "$*"; } +log() { pecho "$@"; } +warning() { log "::warning::$@"; } +error() { log "::error::$@"; } +fatal() { error "$@"; exit 1; } +try() { "$@" || fatal "'$@' failed"; } + +dist_tarball=$(ls keyd-*.tar.gz) \ + || fatal "'make dist' must be run before this test" + +tmpdir=$(try mktemp -d) || exit 1 + +log "Copying contents of Git repository..." +try git archive --format=tar --prefix=git-repo/ HEAD \ + | try tar -C "${tmpdir}" -xv || exit 1 +( + try cd "${tmpdir}"/git-repo + # Delete files checked into Git that shouldn't be in the distribution + # tarball. + try rm -rf \ + .gitattributes \ + .github \ + .gitignore \ + ; +) || exit 1 + +log "Extracting distribution tarball..." +try tar -C "${tmpdir}" -xvzf "${dist_tarball}" +try mv "${tmpdir}/${dist_tarball%.tar.gz}" "${tmpdir}"/dist-tarball +( + try cd "${tmpdir}"/dist-tarball + # Delete generated files + try rm -rf \ + .dist-version \ + Makefile.in \ + aclocal.m4 \ + autoconfig.h.in \ + build-aux/compile \ + build-aux/depcomp \ + build-aux/install-sh \ + build-aux/missing \ + build-aux/test-driver \ + configure \ + ; +) || exit 1 + +log "Comparing Git repository with distribution tarball..." +cd "${tmpdir}" +diff -qNr git-repo dist-tarball >/dev/null || { + error "Unexpected diff between the repo and the distribution tarball." + error "You may need to add a file to EXTRA_DIST in Makefile.am." + error "Diff output:" + diff -uNr git-repo dist-tarball \ + | while IFS= read -r line; do error "${line}"; done + exit 1 +} +log "No difference"