💜 merge pull request #64 from FWDekker/dev~ #57
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CD | |
on: | |
push: | |
branches: | |
- main | |
workflow_dispatch: | |
permissions: | |
contents: write | |
packages: read | |
jobs: | |
check-release-needed: | |
# Note that `workflow_dispatch` is never skipped | |
if: "!(contains(github.event.head_commit.message, '[cd skip]') || contains(github.event.head_commit.message, '[skip cd]'))" | |
runs-on: ubuntu-latest | |
steps: | |
- name: nop | |
run: true | |
build-linux: | |
needs: [ check-release-needed ] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Install fpm and build dependencies | |
run: | | |
sudo apt install -y rubygems libarchive-tools rpm zstd | |
sudo gem install --no-document fpm | |
- name: Build packages | |
run: make dist/generic dist/apk dist/deb dist/rpm dist/pacman | |
- name: Upload built package | |
uses: actions/upload-artifact@v3 | |
with: | |
name: dist | |
path: dist/mommy* | |
build-macos: | |
needs: [ check-release-needed ] | |
runs-on: macos-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Install fpm | |
run: sudo gem install --no-document fpm | |
- name: Build package | |
run: make dist/osxpkg | |
- name: Upload built package | |
uses: actions/upload-artifact@v3 | |
with: | |
name: dist | |
path: dist/mommy* | |
build-freebsd: | |
needs: [ check-release-needed ] | |
runs-on: macos-12 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Install fpm && Build package | |
uses: vmactions/freebsd-vm@v0 | |
with: | |
usesh: true | |
prepare: | | |
echo "::group::Install basic packages" | |
pkg install -y git gmake || 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 | |
gmake dist/freebsd | |
- name: Upload built package | |
uses: actions/upload-artifact@v3 | |
with: | |
name: dist | |
path: dist/mommy* | |
build-netbsd: | |
needs: [ check-release-needed ] | |
runs-on: macos-12 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Install fpm && Build package | |
uses: vmactions/netbsd-vm@v0 | |
with: | |
usesh: true | |
prepare: | | |
set -e | |
echo "::group::Install basic packages" | |
pkg_add git gmake || exit 1 | |
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 | |
gmake dist/netbsd | |
- name: Upload built package | |
uses: actions/upload-artifact@v3 | |
with: | |
name: dist | |
path: dist/mommy* | |
build-openbsd: | |
needs: [ check-release-needed ] | |
runs-on: macos-12 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Install fpm && Build 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 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 | |
gmake dist/openbsd | |
- name: Upload built package | |
uses: actions/upload-artifact@v3 | |
with: | |
name: dist | |
path: dist/mommy* | |
release-mommy: | |
needs: [ build-linux, build-macos, build-freebsd, build-netbsd, build-openbsd ] | |
runs-on: ubuntu-latest | |
if: github.ref == 'refs/heads/main' && github.event_name != 'workflow_dispatch' | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Download built packages | |
uses: actions/download-artifact@v3 | |
with: | |
name: dist | |
- name: Extract version number | |
run: echo "MOMMY_VERSION=v$(head -n 1 ./version)" >> $GITHUB_ENV | |
- name: Extract release notes | |
id: extract-release-notes | |
uses: ffurrer2/extract-release-notes@v1 | |
with: | |
release_notes_file: RELEASE_NOTES.md | |
- name: Checkout release | |
uses: softprops/action-gh-release@v1 | |
with: | |
draft: false | |
prerelease: false | |
tag_name: ${{ env.MOMMY_VERSION }} | |
body_path: RELEASE_NOTES.md | |
files: mommy* | |
release-aur: | |
needs: [ release-mommy ] | |
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: Checkout mommy | |
uses: actions/checkout@v3 | |
with: | |
path: mommy | |
token: ${{ secrets.personal_access_token }} | |
- name: Extract version number | |
run: echo "MOMMY_VERSION=v$(head -n 1 ./mommy/version)" >> $GITHUB_ENV | |
- name: Checkout aur-mommy | |
uses: actions/checkout@v3 | |
with: | |
repository: FWDekker/aur-mommy | |
path: aur-mommy | |
ref: master | |
fetch-depth: 0 | |
# Required to trigger CI action when pushed | |
token: ${{ secrets.personal_access_token }} | |
- name: Fix aur-mommy directory ownership | |
run: chown -R build:build ./aur-mommy/ | |
- name: Update build files | |
working-directory: ./aur-mommy/ | |
run: | | |
echo "::group::Fast-forward main" | |
sudo -u build git checkout dev | |
sudo -u build git checkout master | |
sudo -u build git merge --commit dev | |
echo "::endgroup::" | |
echo "::group::Update build files" | |
sudo -u build ./update.sh "$MOMMY_VERSION" | |
echo "::endgroup::" | |
echo "::group::Commit update" | |
sudo -u build git config --global user.name "FWDekkerBot" | |
sudo -u build git config --global user.email "[email protected]" | |
sudo -u build git commit -am "🔖 mommy updated the build files to mommy $MOMMY_VERSION~" | |
echo "::endgroup::" | |
echo "::group::Fast-forward dev" | |
sudo -u build git checkout dev | |
sudo -u build git merge --commit master | |
echo "::endgroup::" | |
echo "::group::Push changes" | |
sudo -u build git push origin master dev | |
echo "::endgroup::" | |
release-homebrew: | |
needs: [ release-mommy ] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout mommy | |
uses: actions/checkout@v3 | |
with: | |
path: mommy | |
token: ${{ secrets.personal_access_token }} | |
- name: Extract version number | |
run: echo "MOMMY_VERSION=v$(head -n 1 ./mommy/version)" >> $GITHUB_ENV | |
- name: Checkout homebrew-mommy | |
uses: actions/checkout@v3 | |
with: | |
repository: FWDekker/homebrew-mommy | |
path: homebrew-mommy | |
ref: main | |
fetch-depth: 0 | |
# Required to trigger CI action when pushed | |
token: ${{ secrets.personal_access_token }} | |
- name: Update formula | |
working-directory: ./homebrew-mommy/ | |
run: | | |
echo "::group::Fast-forward main" | |
git checkout dev | |
git checkout main | |
git merge --commit dev | |
echo "::endgroup::" | |
echo "::group::Update formula" | |
./update.sh "$MOMMY_VERSION" | |
echo "::endgroup::" | |
echo "::group::Commit update" | |
git config --global user.name "FWDekkerBot" | |
git config --global user.email "[email protected]" | |
git commit -am "🔖 mommy updated the formula to mommy $MOMMY_VERSION~" | |
echo "::endgroup::" | |
echo "::group::Fast-forward dev" | |
git checkout dev | |
git merge --commit main | |
echo "::endgroup::" | |
echo "::group::Push changes" | |
git push origin main dev | |
echo "::endgroup::" |