Skip to content

Continuous Integration #864

Continuous Integration

Continuous Integration #864

Workflow file for this run

# This is the continuous integration job for `mpdpopm`. It will run on
# both MacOS & Ubuntu, using various versions of Rust: a "pinned"
# version representing the least-supported, the current stable & the
# current nightly.
name: Continuous Integration
on:
workflow_dispatch:
pull_request:
types: [opened, edited, reopened] # don't say `synchronize`-- that is taken care of by `push`
push:
schedule:
- cron: '00 01 * * *'
jobs:
build:
name: build
strategy:
matrix:
rust-build:
- pinned
- stable
- nightly
os: [ubuntu-22.04, macos-12]
include:
- rust-build: pinned
os: ubuntu-22.04
rust: 1.70.0
- rust-build: stable
os: ubuntu-22.04
rust: stable
- rust-build: nightly
os: ubuntu-22.04
rust: nightly
- rust-build: pinned
os: macos-12
rust: 1.70.0
- rust-build: stable
os: macos-12
rust: stable
- rust-build: nightly
os: macos-12
rust: nightly
runs-on: ${{ matrix.os }}
env:
RUST_BACKTRACE: 1
steps:
- name: Checkout repo
uses: actions/checkout@v3
# This is cheap, so do it early. I'd hate to install Rust, Eamcs,
# Tex &c only to find-out I'd forgotten a code TODO.
- name: Check for TODO-s
shell: bash
run: |
set -x
# `ripgrep` needs rust 1.70 to compile, but I stubbornly refuse
# to upgrade my "pinned" rust version!
# if rg -t rust 'TODO|TOOD|LATER|\\todo|todo!|dbg!'; then
if find . -iname '*.rs' -print0|xargs -0 grep -E 'TODO|TOOD|LATER|\\todo|todo!|dbg!'; then
echo "You have TODO-s"
exit 1
fi
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.rust }}
- name: Install Tools (Ubuntu)
if: matrix.os == 'ubuntu-22.04'
shell: bash
run: |
pwd
set -x
set -e
sudo apt-get update
sudo apt-get install -y autoconf automake emacs liblzma-dev texlive
- name: Install Tools (macOS)
if: matrix.os == 'macos-12'
shell: bash
run: |
set -x
# This seems wrong on multiple levels, but see here:
# <https://github.com/orgs/Homebrew/discussions/4612#discussioncomment-6339258>
set +e
pwd
brew cleanup
# Will exit with non-zero status if it finds problems, but can be handy
# for trouble-shooting:
brew doctor
brew update
brew upgrade
set -e
brew install autoconf automake emacs
brew install --cask basictex
- name: Install a modern version of Texinfo
if: matrix.os == 'macos-12'
shell: bash
run: |
set -x
mkdir tmp && cd tmp
# TODO(sp1ff): cache this
curl -L -O https://ftp.gnu.org/gnu/texinfo/texinfo-7.0.2.tar.gz
tar xf texinfo-7.0.2.tar.gz
cd texinfo-7.0.2
./configure
make
make install
type -p texi2dvi
texi2dvi --version
- name: Install additional Rust tooling
shell: bash
run: |
cargo install --verbose --version=1.44.0 --locked cargo-deb
- name: Configure mpdpopm
shell: bash
run: |
set -ex
./bootstrap && ./configure
- name: Build mpdpopm
run: make
# Copied verbatim from ripgrep. BurntSushi says "This is useful
# for debugging problems when the expected build artifacts (like
# shell completions and man pages) aren't generated."
- name: Show build.rs stderr
shell: bash
run: |
set -x
cd mpdpopm
pwd
stderr="$(find target/release -name stderr -print0 | xargs -0 ls -t | head -n1)"
if [ -s "$stderr" ]; then
echo "===== $stderr ===== "
cat "$stderr"
echo "====="
fi
- name: Run unit test suite
shell: bash
run: |
set -x
make check
- name: Check the Autotools distribution (Ubuntu)
if: matrix.os == 'ubuntu-22.04'
shell: bash
run: make distcheck
- name: Check the Autotools distribution (MacOS)
if: matrix.os == 'macos-12'
shell: bash
run: |
eval "$(/usr/libexec/path_helper)"
make distcheck
- name: Check the Debian package
if: matrix.os == 'ubuntu-22.04'
shell: bash
run: |
set -x
cd mpdpopm
cargo deb