Skip to content

Main

Main #985

Workflow file for this run

# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
name: "Main"
on:
push:
tags: ["*"]
branches: ["*"]
pull_request:
branches: ["*"]
schedule:
- cron: "42 02 * * *"
workflow_dispatch:
permissions: {}
jobs:
lint-shellcheck-stable:
name: "Lint with ShellCheck"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container:
image: "docker.io/koalaman/shellcheck-alpine:stable"
steps:
- name: "Install packages"
run: "apk add --no-cache ca-certificates curl file make"
- name: "Print ShellCheck version"
run: "shellcheck --version"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Lint project"
run: "make lint"
test-debian-latest:
name: "Test on Debian"
needs:
- "lint-shellcheck-stable"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/debian:latest"
steps:
- name: "Update package index"
run: "apt-get update"
- name: "Install packages"
run: "apt-get install -y ca-certificates curl file findutils idn2 make"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Test project"
run: "make test-all"
test-ubuntu-latest:
name: "Test on Ubuntu"
needs:
- "lint-shellcheck-stable"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/ubuntu:latest"
steps:
- name: "Update package index"
run: "apt-get update"
- name: "Install packages"
run: "apt-get install -y ca-certificates curl file findutils idn2 make"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Test project"
run: "make test-all"
test-fedora-latest:
name: "Test on Fedora"
needs:
- "lint-shellcheck-stable"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/fedora:latest"
steps:
- name: "Install packages"
run: "dnf install -y ca-certificates curl file findutils idn2 make"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Test project"
run: "make test-all"
test-almalinux-latest:
name: "Test on AlmaLinux"
needs:
- "lint-shellcheck-stable"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/almalinux:latest"
steps:
- name: "Install packages"
run: "dnf install -y ca-certificates curl-minimal file findutils idn2 make"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Test project"
run: "make test-all"
test-opensuse-latest:
name: "Test on openSUSE"
needs:
- "lint-shellcheck-stable"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/opensuse/tumbleweed:latest"
steps:
- name: "Install packages"
run: "zypper install -y ca-certificates curl file findutils gawk gzip libidn2-tools make tar"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Test project"
run: "make test-all"
test-archlinux-latest:
name: "Test on Arch Linux"
needs:
- "lint-shellcheck-stable"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/archlinux:latest"
steps:
- name: "Install packages"
run: "pacman -Syu --noconfirm --needed ca-certificates curl file findutils libidn2 make"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Test project"
run: "make test-all"
test-alpine-latest:
name: "Test on Alpine Linux"
needs:
- "lint-shellcheck-stable"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/alpine:latest"
steps:
- name: "Install packages"
run: "apk add --no-cache ca-certificates curl file findutils idn2-utils make"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Test project"
run: "make test-all"
test-alpine-latest-shell-bash:
name: "Test on Alpine Linux (bash shell)"
needs:
- "lint-shellcheck-stable"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/alpine:latest"
steps:
- name: "Install packages"
run: "apk add --no-cache ca-certificates curl file findutils idn2-utils make"
- name: "Install packages (2nd stage)"
run: "apk add --no-cache bash"
- name: "Print bash version"
run: "apk info --no-cache bash"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Test project"
run: 'make test-all TEST_SHELL="$(command -v bash)"'
test-alpine-latest-shell-zsh:
name: "Test on Alpine Linux (zsh shell)"
needs:
- "lint-shellcheck-stable"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/alpine:latest"
steps:
- name: "Install packages"
run: "apk add --no-cache ca-certificates curl file findutils idn2-utils make"
- name: "Install packages (2nd stage)"
run: "apk add --no-cache zsh"
- name: "Print zsh version"
run: "apk info --no-cache zsh"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Test project"
run: 'make test-all TEST_SHELL="$(command -v zsh)"'
test-alpine-latest-shell-dash:
name: "Test on Alpine Linux (dash shell)"
needs:
- "lint-shellcheck-stable"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/alpine:latest"
steps:
- name: "Install packages"
run: "apk add --no-cache ca-certificates curl file findutils idn2-utils make"
- name: "Install packages (2nd stage)"
run: "apk add --no-cache dash"
- name: "Print dash version"
run: "apk info --no-cache dash"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Test project"
run: 'make test-all TEST_SHELL="$(command -v dash)"'
test-alpine-latest-shell-mksh:
name: "Test on Alpine Linux (mksh shell)"
needs:
- "lint-shellcheck-stable"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/alpine:latest"
steps:
- name: "Install packages"
run: "apk add --no-cache ca-certificates curl file findutils idn2-utils make"
- name: "Install packages (2nd stage)"
run: "apk add --no-cache mksh"
- name: "Print mksh version"
run: "apk info --no-cache mksh"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Test project"
run: 'make test-all TEST_SHELL="$(command -v mksh)"'
test-alpine-latest-shell-oksh:
name: "Test on Alpine Linux (oksh shell)"
needs:
- "lint-shellcheck-stable"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/alpine:latest"
steps:
- name: "Install packages"
run: "apk add --no-cache ca-certificates curl file findutils idn2-utils make"
- name: "Install packages (2nd stage)"
run: "apk add --no-cache oksh"
- name: "Print oksh version"
run: "apk info --no-cache oksh"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Test project"
run: 'make test-all TEST_SHELL="$(command -v oksh)"'
test-alpine-latest-shell-yash:
name: "Test on Alpine Linux (yash shell)"
needs:
- "lint-shellcheck-stable"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/alpine:latest"
steps:
- name: "Install packages"
run: "apk add --no-cache ca-certificates curl file findutils idn2-utils make"
- name: "Install packages (2nd stage)"
run: "apk add --no-cache yash"
- name: "Print yash version"
run: "apk info --no-cache yash"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Test project"
run: 'make test-all TEST_SHELL="$(command -v yash)"'
test-alpine-latest-shell-busybox-ash:
name: "Test on Alpine Linux (BusyBox ash shell)"
needs:
- "lint-shellcheck-stable"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/alpine:latest"
steps:
- name: "Install packages"
run: "apk add --no-cache ca-certificates curl file findutils idn2-utils make"
- name: "Install packages (2nd stage)"
run: "apk add --no-cache busybox"
- name: "Print BusyBox version"
run: "apk info --no-cache busybox"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Test project"
run: 'make test-all TEST_SHELL="$(command -v busybox) ash"'
test-alpine-latest-awk-gawk:
name: "Test on Alpine Linux (gawk awk implementation)"
needs:
- "lint-shellcheck-stable"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/alpine:latest"
steps:
- name: "Install packages"
run: "apk add --no-cache ca-certificates curl file findutils idn2-utils make"
- name: "Install packages (2nd stage)"
run: "apk add --no-cache gawk"
- name: "Print gawk version"
run: "apk info --no-cache gawk"
- name: "Set default awk implementation"
run: 'ln -sf "$(command -v gawk)" /usr/bin/awk'
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Test project"
run: "make test-all"
test-alpine-latest-awk-mawk:
name: "Test on Alpine Linux (mawk awk implementation)"
needs:
- "lint-shellcheck-stable"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/alpine:latest"
steps:
- name: "Install packages"
run: "apk add --no-cache ca-certificates curl file findutils idn2-utils make"
- name: "Install packages (2nd stage)"
run: "apk add --no-cache mawk"
- name: "Print mawk version"
run: "apk info --no-cache mawk"
- name: "Set default awk implementation"
run: 'ln -sf "$(command -v mawk)" /usr/bin/awk'
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Test project"
run: "make test-all"
test-alpine-latest-awk-nawk:
name: "Test on Alpine Linux (nawk awk implementation)"
needs:
- "lint-shellcheck-stable"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/alpine:latest"
steps:
- name: "Install packages"
run: "apk add --no-cache ca-certificates curl file findutils idn2-utils make"
- name: "Install packages (2nd stage)"
run: "apk add --no-cache nawk"
- name: "Print nawk version"
run: "apk info --no-cache nawk"
- name: "Set default awk implementation"
run: 'ln -sf "$(command -v nawk)" /usr/bin/awk'
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Test project"
run: "make test-all"
test-alpine-latest-awk-busybox-awk:
name: "Test on Alpine Linux (BusyBox awk implementation)"
needs:
- "lint-shellcheck-stable"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/alpine:latest"
steps:
- name: "Install packages"
run: "apk add --no-cache ca-certificates curl file findutils idn2-utils make"
- name: "Install packages (2nd stage)"
run: "apk add --no-cache busybox"
- name: "Print busybox version"
run: "apk info --no-cache busybox"
- name: "Set default awk implementation"
run: 'ln -sf "$(command -v busybox)" /usr/bin/awk'
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Test project"
run: "make test-all"
test-openwrt-latest:
name: "Test on OpenWrt"
needs:
- "lint-shellcheck-stable"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/openwrt/rootfs:latest"
steps:
- name: "Apply workarounds for GitHub Actions runner"
run: 'printf "ID=alpine\n" > /etc/_os-release'
- name: "Update package index"
run: "mkdir -p /var/run/; mkdir -p /var/lock/; opkg update ||:"
- name: "Install packages"
run: "opkg install ca-certificates curl file findutils idn2 make"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Build project"
run: "make test-all"
test-openwrt-latest-shell-busybox-ash:
name: "Test on OpenWrt (BusyBox ash shell)"
needs:
- "lint-shellcheck-stable"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/openwrt/rootfs:latest"
steps:
- name: "Apply workarounds for GitHub Actions runner"
run: 'printf "ID=alpine\n" > /etc/_os-release'
- name: "Update package index"
run: "mkdir -p /var/run/; mkdir -p /var/lock/; opkg update ||:"
- name: "Install packages"
run: "opkg install ca-certificates curl file findutils idn2 make"
- name: "Install packages (2nd stage)"
run: "opkg install busybox"
- name: "Print BusyBox version"
run: "opkg info busybox"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Build project"
run: 'make test-all TEST_SHELL="$(command -v busybox) ash"'
test-macos-latest:
name: "Test on macOS"
needs:
- "lint-shellcheck-stable"
runs-on: "macos-latest"
permissions:
contents: "read"
steps:
- name: "Install packages"
run: "brew install curl libidn2 make"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Test project"
run: "make test-all"
test-macos-latest-shell-bash:
name: "Test on macOS (bash shell)"
needs:
- "lint-shellcheck-stable"
runs-on: "macos-latest"
permissions:
contents: "read"
steps:
- name: "Install packages"
run: "brew install curl libidn2 make"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Test project"
run: 'make test-all TEST_SHELL="$(command -v bash)"'
test-macos-latest-shell-zsh:
name: "Test on macOS (zsh shell)"
needs:
- "lint-shellcheck-stable"
runs-on: "macos-latest"
permissions:
contents: "read"
steps:
- name: "Install packages"
run: "brew install curl libidn2 make"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Test project"
run: 'make test-all TEST_SHELL="$(command -v zsh)"'
test-macos-latest-shell-dash:
name: "Test on macOS (dash shell)"
needs:
- "lint-shellcheck-stable"
runs-on: "macos-latest"
permissions:
contents: "read"
steps:
- name: "Install packages"
run: "brew install curl libidn2 make"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Test project"
run: 'make test-all TEST_SHELL="$(command -v dash)"'
test-haiku-latest:
name: "Test on Haiku"
needs:
- "lint-shellcheck-stable"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/hectorm/qemu-haiku:latest"
steps:
- name: "Wait until the VM is ready"
run: "container-init & timeout 600 vmshell exit 0"
- name: "Install packages"
run: "vmshell pkgman install -y ca_root_certificates curl file findutils libidn2 make"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Copy project to VM"
run: "vmshell mkdir ./hblock/; tar -cf - ./ | vmshell tar -xf - -C ./hblock/"
- name: "Test project"
run: "vmshell make -C ./hblock/ test-all"
build-debian-latest:
name: "Build on Debian"
needs:
- "test-debian-latest"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/debian:latest"
steps:
- name: "Update package index"
run: "apt-get update"
- name: "Install packages"
run: "apt-get install -y ca-certificates curl file findutils idn2 make"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Build project"
run: "make hosts stats index"
build-ubuntu-latest:
name: "Build on Ubuntu"
needs:
- "test-ubuntu-latest"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/ubuntu:latest"
steps:
- name: "Update package index"
run: "apt-get update"
- name: "Install packages"
run: "apt-get install -y ca-certificates curl file findutils idn2 make"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Build project"
run: "make hosts stats index"
build-fedora-latest:
name: "Build on Fedora"
needs:
- "test-fedora-latest"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/fedora:latest"
steps:
- name: "Install packages"
run: "dnf install -y ca-certificates curl file findutils idn2 make"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Build project"
run: "make hosts stats index"
build-almalinux-latest:
name: "Build on AlmaLinux"
needs:
- "test-almalinux-latest"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/almalinux:latest"
steps:
- name: "Install packages"
run: "dnf install -y ca-certificates curl-minimal file findutils idn2 make"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Build project"
run: "make hosts stats index"
build-opensuse-latest:
name: "Build on openSUSE"
needs:
- "test-opensuse-latest"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/opensuse/tumbleweed:latest"
steps:
- name: "Install packages"
run: "zypper install -y ca-certificates curl file findutils gawk gzip libidn2-tools make tar"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Build project"
run: "make hosts stats index"
build-archlinux-latest:
name: "Build on Arch Linux"
needs:
- "test-archlinux-latest"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/archlinux:latest"
steps:
- name: "Install packages"
run: "pacman -Syu --noconfirm --needed ca-certificates curl file findutils libidn2 make"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Build project"
run: "make hosts stats index"
build-alpine-latest:
name: "Build on Alpine Linux"
needs:
- "test-alpine-latest"
- "test-alpine-latest-shell-bash"
- "test-alpine-latest-shell-zsh"
- "test-alpine-latest-shell-dash"
- "test-alpine-latest-shell-mksh"
- "test-alpine-latest-shell-oksh"
- "test-alpine-latest-shell-yash"
- "test-alpine-latest-shell-busybox-ash"
- "test-alpine-latest-awk-gawk"
- "test-alpine-latest-awk-mawk"
- "test-alpine-latest-awk-nawk"
- "test-alpine-latest-awk-busybox-awk"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/alpine:latest"
steps:
- name: "Install packages"
run: "apk add --no-cache ca-certificates curl file findutils idn2-utils make"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Build project"
run: "make hosts stats index"
build-openwrt-latest:
name: "Build on OpenWrt"
needs:
- "test-openwrt-latest"
- "test-openwrt-latest-shell-busybox-ash"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container: "docker.io/openwrt/rootfs:latest"
steps:
- name: "Apply workarounds for GitHub Actions runner"
run: 'printf "ID=alpine\n" > /etc/_os-release'
- name: "Update package index"
run: "mkdir -p /var/run/; mkdir -p /var/lock/; opkg update ||:"
- name: "Install packages"
run: "opkg install ca-certificates curl file findutils idn2 make"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Build project"
run: "make hosts stats index"
build-macos-latest:
name: "Build on macOS"
needs:
- "test-macos-latest"
- "test-macos-latest-shell-bash"
- "test-macos-latest-shell-zsh"
- "test-macos-latest-shell-dash"
runs-on: "macos-latest"
permissions:
contents: "read"
steps:
- name: "Use dash as sh"
run: "sudo ln -sf /bin/dash /var/select/sh"
- name: "Install packages"
run: "brew install curl libidn2 make"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Build project"
run: "make hosts stats index"
package-deb:
name: "Create deb package"
needs:
- "build-debian-latest"
- "build-ubuntu-latest"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container:
image: "docker.io/debian:latest"
steps:
- name: "Update package index"
run: "apt-get update"
- name: "Install packages"
run: "apt-get install -y ca-certificates curl file findutils idn2 make"
- name: "Install packages (2nd stage)"
run: "apt-get install -y build-essential debhelper dpkg-dev m4 rsync"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Package project"
run: |
make package-deb
mv ./dist/ ./dist-package-deb/
apt install -y ./dist-package-deb/packages/hblock-*.deb
command hblock -v
package-rpm:
name: "Create RPM package"
needs:
- "build-fedora-latest"
- "build-almalinux-latest"
- "build-opensuse-latest"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container:
image: "docker.io/fedora:latest"
steps:
- name: "Install packages"
run: "dnf install -y ca-certificates curl file findutils idn2 make"
- name: "Install packages (2nd stage)"
run: "dnf install -y m4 rpm-build rpmdevtools rsync systemd"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Package project"
run: |
make package-rpm
mv ./dist/ ./dist-package-rpm/
dnf install -y ./dist-package-rpm/packages/hblock-*.rpm
command hblock -v
package-pkgbuild:
name: "Create PKGBUILD package"
needs:
- "build-archlinux-latest"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container:
image: "docker.io/archlinux:latest"
steps:
- name: "Install packages"
run: "pacman -Syu --noconfirm --needed ca-certificates curl file findutils libidn2 make"
- name: "Install packages (2nd stage)"
run: "pacman -Syu --noconfirm --needed base-devel m4 rsync sudo"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Package project"
run: |
mkdir ./dist/; chown nobody ./dist/
sudo -u nobody make package-pkgbuild
mv ./dist/ ./dist-package-pkgbuild/
pacman -U --noconfirm ./dist-package-pkgbuild/packages/hblock-*.pkg.tar.*
command hblock -v
package-apkbuild:
name: "Create APKBUILD package"
needs:
- "build-alpine-latest"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container:
image: "docker.io/alpine:latest"
steps:
- name: "Install packages"
run: "apk add --no-cache ca-certificates curl file findutils idn2-utils make"
- name: "Install packages (2nd stage)"
run: "apk add --no-cache alpine-sdk m4 rsync sudo"
- name: "Create unprivileged user and setup abuild"
run: |
adduser -D -G abuild build
printf "\n%s\n" "build ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
sudo -u build abuild-keygen -a -i -n
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Package project"
run: |
mkdir ./dist/; chown build ./dist/
sudo -u build make package-apkbuild
mv ./dist/ ./dist-package-apkbuild/
apk add --allow-untrusted ./dist-package-apkbuild/packages/hblock-*.apk
command hblock -v
package-npm:
name: "Create npm package"
needs:
- "build-alpine-latest"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
container:
image: "docker.io/node:current-alpine"
steps:
- name: "Install packages"
run: "apk add --no-cache ca-certificates curl file findutils idn2-utils make"
- name: "Install packages (2nd stage)"
run: "apk add --no-cache m4 rsync"
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Package project"
run: |
make package-npm
mv ./dist/ ./dist-package-npm/
npm install -g ./dist-package-npm/packages/hblock-*.tgz
command hblock -v