Skip to content

🛠️ mommy's makefile is now much cleaner~ #190

🛠️ mommy's makefile is now much cleaner~

🛠️ mommy's makefile is now much cleaner~ #190

Workflow file for this run

name: CI
on:
push:
pull_request:
jobs:
test-linux:
runs-on: ubuntu-latest
steps:
- name: Install dependencies for mommy
run: |
echo "::group::Install ShellSpec"
git clone --depth=1 https://github.com/shellspec/shellspec.git
sudo make -C shellspec install
echo "::endgroup::"
echo "::group::Install additional shells"
sudo apt-get install fish zsh
touch "$HOME/.zshrc"
echo "::endgroup::"
- name: Checkout
uses: actions/checkout@v3
- name: Test script
run: make test
- name: Install fpm and build dependencies
run: |
sudo apt-get install -y rubygems libarchive-tools rpm zstd
sudo gem install --no-document fpm
- name: Test fpm package
run: |
echo "::group::Build"
make dist/deb
echo "::endgroup::"
echo "::group::Install"
sudo apt-get install -y ./dist/mommy-*.deb
echo "::endgroup::"
echo "::group::Test"
make system=1 test
echo "::endgroup::"
echo "::group::Uninstall"
sudo apt-get purge -y mommy
echo "::endgroup::"
- name: Install Homebrew
run: NONINTERACTIVE=1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- name: Checkout homebrew-mommy
uses: actions/checkout@v3
with:
repository: FWDekker/homebrew-mommy
path: homebrew-mommy
ref: dev
- name: Test Homebrew package
run: |
echo "::group::Enable Homebrew"
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
mkdir -p "$HOME/.config/fish/"; echo "set -gx fish_complete_path \$fish_complete_path $(brew --prefix)/share/fish/vendor_completions.d/" >> "$HOME/.config/fish/config.fish"
echo "FPATH=\"$(brew --prefix)/share/zsh/site-functions/:\$FPATH\"" >> "$HOME/.zshrc"
echo "::endgroup::"
echo "::group::Install"
brew tap local/mommy "$(pwd)/homebrew-mommy"
brew install mommy --HEAD
echo "::endgroup::"
echo "::group::Test"
make system=1 test
echo "::endgroup::"
echo "::group::Uninstall"
brew uninstall mommy
brew untap local/mommy
echo "::endgroup::"
test-archlinux:
runs-on: ubuntu-latest
container: archlinux:latest
steps:
- name: Set up basic system
run: |
echo "::group::Update system"
pacman -Syu --noconfirm
echo "::endgroup::"
echo "::group::Install basic packages"
pacman -S --noconfirm --needed git base-devel
echo "::endgroup::"
echo "::group::Add non-privileged user to run makepkg"
useradd -m build
echo "build ALL=(ALL:ALL) NOPASSWD: ALL" >> /etc/sudoers
echo "::endgroup::"
- name: Install dependencies for mommy
run: |
echo "::group::Install man-db"
pacman -S --noconfirm man-db
sed -i "/NoExtract.*man/d" /etc/pacman.conf # Extract man pages
echo "::endgroup::"
echo "::group::Install ShellSpec"
git clone https://aur.archlinux.org/shellspec-bin.git
chown -R build:build ./shellspec-bin
cd ./shellspec-bin
sudo -u build makepkg -si --noconfirm
cd -
echo "::endgroup::"
echo "::group::Install additional shells"
pacman -S --noconfirm fish zsh
echo "::endgroup::"
- name: Checkout mommy
uses: actions/checkout@v3
with:
path: mommy
- name: Fix mommy directory ownership
run: chown -R build:build ./mommy/
- name: Test script
working-directory: ./mommy/
run: make test
- name: Install fpm
run: |
pacman -S --noconfirm ruby
gem install --no-document fpm
ln -s "$HOME/.local/share/gem/ruby/"*"/bin/fpm" /usr/local/bin/fpm # Symlink `fpm` to latest version
- name: Test fpm package
working-directory: ./mommy/
run: |
echo "::group::Build"
make dist/pacman
echo "::endgroup::"
echo "::group::Install"
pacman -U --noconfirm ./dist/mommy*.pacman
echo "::endgroup::"
echo "::group::Test"
make system=1 test
echo "::endgroup::"
echo "::group::Uninstall"
pacman -R --noconfirm mommy
echo "::endgroup::"
- name: Checkout aur-mommy
uses: actions/checkout@v3
with:
repository: FWDekker/aur-mommy
path: aur-mommy
ref: dev
- name: Fix aur-mommy directory ownership
run: chown -R build:build ./aur-mommy/
- name: Test AUR package
working-directory: ./aur-mommy/
run: |
echo "::group::Patch"
sudo -u build ./update.sh dev
echo "::endgroup::"
echo "::group::Build and install"
sudo -u build makepkg -si --noconfirm
echo "::endgroup::"
cd ../mommy/
echo "::group::Test"
make system=1 test
echo "::endgroup::"
echo "::group::Uninstall"
pacman -R --noconfirm mommy
echo "::endgroup::"
test-fedora:
runs-on: ubuntu-latest
container: fedora:latest
steps:
- name: Set up basic system
run: |
echo "::group::Update system"
dnf -y update
echo "::endgroup::"
echo "::group::Install basic packages"
dnf -y install git make rpm-build
echo "::endgroup::"
- name: Install dependencies for mommy
run: |
echo "::group::Install man-db"
dnf -y install man-db
sed -i "/nodocs/d" /etc/dnf/dnf.conf # Extract man pages
echo "::endgroup::"
echo "::group::Install ShellSpec"
git clone --depth=1 https://github.com/shellspec/shellspec.git
make -C shellspec install
echo "::endgroup::"
echo "::group::Install additional shells"
dnf -y install fish zsh
echo "::endgroup::"
- name: Checkout mommy
uses: actions/checkout@v3
with:
# Checkout to subdirectory is required for `pkg/rpm/rpkg.conf` to correctly determine `${git_props:root}`
path: mommy
- name: Test script
working-directory: ./mommy/
run: make test
- name: Install fpm
run: |
dnf -y install rubygems
gem install --no-document fpm
- name: Test fpm package
working-directory: ./mommy/
run: |
echo "::group::Build"
make dist/rpm
echo "::endgroup::"
echo "::group::Install"
dnf -y install ./dist/mommy*.rpm
echo "::endgroup::"
echo "::group::Test"
make system=1 test
echo "::endgroup::"
echo "::group::Uninstall"
dnf -y remove mommy
echo "::endgroup::"
- name: Install rpkg
run: dnf -y install rpkg
- name: Test SRPM package
working-directory: ./mommy/
run: |
echo "::group::Build"
rpkg -p ./pkg/rpm local # build srpm
rpmbuild --rebuild /tmp/rpkg/mommy-*/*.rpm
echo "::endgroup::"
echo "::group::Install"
dnf -y install "$HOME"/rpmbuild/RPMS/*/*.rpm
echo "::endgroup::"
echo "::group::Test"
make system=1 test
echo "::endgroup::"
echo "::group::Uninstall"
dnf -y remove mommy
echo "::endgroup::"
test-macos:
runs-on: macos-latest
steps:
- name: Install dependencies for mommy
run: |
echo "::group::Install ShellSpec"
brew tap shellspec/shellspec
brew install shellspec
echo "::endgroup::"
echo "::group::Install additional shells"
brew install fish
echo "::endgroup::"
- name: Checkout
uses: actions/checkout@v3
- name: Test script
run: make test
- name: Install fpm
run: sudo gem install --no-document fpm
- name: Test fpm package
run: |
echo "::group::Build"
make dist/osxpkg
echo "::endgroup::"
echo "::group::Install"
sudo installer -pkg ./dist/mommy*+osx.pkg -target /
echo "::endgroup::"
echo "::group::Test"
make system=1 test
echo "::endgroup::"
echo "::group::Uninstall"
sudo rm -f /usr/local/bin/mommy /usr/local/share/man/man1/mommy.1.gz /usr/local/share/fish/vendor_completions.d/mommy.fish /usr/local/share/zsh/site-functions/_mommy
echo "::endgroup::"
- name: Checkout homebrew-mommy
uses: actions/checkout@v3
with:
repository: FWDekker/homebrew-mommy
path: homebrew-mommy
ref: dev
- name: Test Homebrew package
run: |
echo "::group::Enable Homebrew"
mkdir -p "$HOME/.config/fish/"; echo "set -gx fish_complete_path \$fish_complete_path $(brew --prefix)/share/fish/vendor_completions.d/" >> "$HOME/.config/fish/config.fish"
echo "FPATH=\"$(brew --prefix)/share/zsh/site-functions/:\$FPATH\"" >> "$HOME/.zshrc"
echo "::endgroup::"
echo "::group::Install"
brew tap local/mommy "$(pwd)/homebrew-mommy"
brew install mommy --HEAD
echo "::endgroup::"
echo "::group::Test"
make system=1 test
echo "::endgroup::"
echo "::group::Uninstall"
brew uninstall mommy
brew untap local/mommy
echo "::endgroup::"
test-freebsd:
runs-on: macos-12
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Test script and package
uses: vmactions/freebsd-vm@v0
with:
usesh: true
# TODO: Use `set -e` in `prepare` once https://github.com/vmactions/freebsd-vm/issues/66 is deployed
# Probably once the latest release at https://github.com/vmactions/freebsd-vm/releases is newer than v0.3.0
prepare: |
echo "::group::Install basic packages"
pkg install -y git gmake || exit 1
echo "::endgroup::"
echo "::group::Install ShellSpec"
git clone --depth=1 https://github.com/shellspec/shellspec.git || exit 1
gmake -C shellspec install || exit 1
echo "::endgroup::"
echo "::group::Install additional shells"
pkg install -y fish zsh || exit 1
echo "::endgroup::"
# fpm
echo "::group::Install fpm: Actually install fpm"
pkg install -y devel/ruby-gems || exit 1
gem install --no-document fpm || exit 1
echo "::endgroup::"
echo "::group::Install fpm: Install gtar (workaround for https://github.com/jordansissel/fpm/pull/1922)"
pkg install -y gtar || exit 1
mv /usr/bin/tar /usr/bin/bsdtar || exit 1
mv /usr/local/bin/gtar /usr/bin/tar || exit 1
echo "::endgroup::"
# /fpm
echo "::group::Ignore ownership issues"
git config --global --add safe.directory "$GITHUB_WORKSPACE" || exit 1
echo "::endgroup::"
run: |
set -e
echo "::group::Test script"
gmake test
echo "::endgroup::"
echo "::group::Build package"
gmake dist/freebsd
echo "::endgroup::"
echo "::group::Install package"
pkg add ./dist/mommy-*.freebsd
echo "::endgroup::"
echo "::group::Test package"
gmake system=1 test
echo "::endgroup::"
echo "::group::Uninstall package"
pkg delete -y mommy
echo "::endgroup::"
test-netbsd:
runs-on: macos-12
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Test script and package
uses: vmactions/netbsd-vm@v0
with:
usesh: true
prepare: |
set -e
echo "::group::Install basic packages"
pkg_add git gmake mozilla-rootcerts-openssl
echo "::endgroup::"
echo "::group::Install ShellSpec"
git clone --depth=1 https://github.com/shellspec/shellspec.git
gmake -C shellspec install
echo "::endgroup::"
echo "::group::Install additional shells"
pkg_add fish zsh
touch "$HOME/.zshrc"
echo "::endgroup::"
echo "::group::Install fpm"
pkg_add ruby
/usr/pkg/bin/gem install --no-document fpm
pkg_add pkg_install # This is necessary to make `fpm` work with `pkgin` format for some reason
echo "::endgroup::"
echo "::group::Ignore ownership issues"
git config --global --add safe.directory "$GITHUB_WORKSPACE"
echo "::endgroup::"
run: |
set -e
export PATH="/usr/sbin:$PATH" # Add `pkg_*` commands to path
export MOMMY_ZSH_SKIP=1 # Zsh completion capturing totally does not work
echo "::group::Test script"
gmake test
echo "::endgroup::"
echo "::group::Build package"
gmake dist/netbsd
echo "::endgroup::"
echo "::group::Install package"
pkg_add ./dist/mommy-*+netbsd.tgz
echo "::endgroup::"
echo "::group::Test package"
gmake system=1 test
echo "::endgroup::"
echo "::group::Uninstall package"
pkg_delete mommy
echo "::endgroup::"
test-openbsd:
runs-on: macos-12
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install dependencies for mommy && Test script && Build package && Test package
uses: vmactions/openbsd-vm@v0
with:
usesh: true
prepare: |
set -e
echo "::group::Install basic packages"
pkg_add git gmake
echo "::endgroup::"
echo "::group::Install ShellSpec"
git clone --depth=1 https://github.com/shellspec/shellspec.git
gmake -C shellspec install
echo "::endgroup::"
echo "::group::Install additional shells"
pkg_add fish zsh
touch "$HOME/.zshrc"
echo "::endgroup::"
echo "::group::Install fpm"
pkg_add "$(pkg_info -Q ruby | grep "^ruby-[0-9]" | tail -n 1)"
/usr/local/bin/gem* install --no-document fpm
ln -s /usr/local/bin/fpm* /usr/local/bin/fpm # Symlink `fpm` to latest version
echo "::endgroup::"
echo "::group::Ignore ownership issues"
git config --global --add safe.directory "$GITHUB_WORKSPACE"
echo "::endgroup::"
run: |
set -e
export MOMMY_ZSH_SKIP=1 # `script` does not have the `-q` option in OpenBSD
echo "::group::Test script"
gmake test
echo "::endgroup::"
echo "::group::Build package"
gmake dist/openbsd
echo "::endgroup::"
echo "::group::Install package"
pkg_add -D unsigned ./dist/mommy-*+openbsd.tgz
echo "::endgroup::"
echo "::group::Test package"
gmake system=1 test # Zsh completion tests do not work in OpenBSD
echo "::endgroup::"
echo "::group::Uninstall package"
pkg_delete mommy
echo "::endgroup::"
test-windows:
runs-on: windows-latest
steps:
- name: Set up msys2
uses: msys2/setup-msys2@v2
with:
update: true
# Install basic package && Install additional shells
install: git make fish zsh
- name: Install dependencies for mommy
shell: msys2 {0}
run: |
echo "::group::Install ShellSpec"
git clone --depth=1 https://github.com/shellspec/shellspec.git
make -C shellspec install
echo "::endgroup::"
echo "::group::Post-install additional shells"
touch "$HOME/.zshrc"
echo "::endgroup::"
- name: Checkout
uses: actions/checkout@v3
- name: Test script
shell: msys2 {0}
run: make test
- name: Install mommy
shell: msys2 {0}
run: make install
- name: Test installed mommy
shell: msys2 {0}
run: make system=1 test