Skip to content

🚚 deploy~

🚚 deploy~ #88

Workflow file for this run

name: 🚚 deploy~
on:
workflow_dispatch:
inputs:
dry_run:
description: 'dry run'
type: boolean
default: true
release_mommy:
description: 'create mommy release'
type: boolean
default: true
release_apt:
description: 'create apt-mommy release'
type: boolean
default: true
release_aur:
description: 'create aur-mommy release'
type: boolean
default: true
release_homebrew:
description: 'create homebrew-mommy release'
type: boolean
default: true
permissions:
contents: write
discussions: write
packages: read
jobs:
pre-flight-checks:
if: "!(contains(github.event.head_commit.message, '[cd skip]') || contains(github.event.head_commit.message, '[skip cd]'))"
runs-on: ubuntu-latest
outputs:
MOMMY_VERSION: ${{ steps.mommy_version.outputs.MOMMY_VERSION }}
steps:
- name: Print inputs
run: |
echo "dry_run: ${{ github.event.inputs.dry_run }}"
- name: Checkout
uses: actions/checkout@v4
- name: Extract mommy's version number
id: mommy_version
run: |
MOMMY_VERSION="v$(head -n 1 ./version)"
echo "Found version '$MOMMY_VERSION'"
echo "MOMMY_VERSION=$MOMMY_VERSION" >> "$GITHUB_ENV"
echo "MOMMY_VERSION=$MOMMY_VERSION" >> "$GITHUB_OUTPUT"
- name: Check if corresponding section exists in changelog
# yes, you really do need to compare with a string, and no, using ! does not work~
if: ${{ github.event.inputs.dry_run == 'false' }}
run: grep -qF "# [${MOMMY_VERSION#v}] --" CHANGELOG.md
- name: Check if release already exists
if: ${{ github.event.inputs.dry_run == 'false' }}
# using `fetch-tags` option of `actions/checkout` does not work properly~
run: |
git fetch --prune --unshallow --tags
! git show-ref --tags "$MOMMY_VERSION" --quiet
build-linux:
needs: [ pre-flight-checks ]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- 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@v4
with:
name: dist-linux
path: dist/mommy*
build-macos:
needs: [ pre-flight-checks ]
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- 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@v4
with:
name: dist-macos
path: dist/mommy*
build-freebsd:
needs: [ pre-flight-checks ]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install fpm && Build package
uses: vmactions/freebsd-vm@v1
with:
usesh: true
prepare: |
set -e
echo "::group::Install basic packages"
pkg install -y git gmake
echo "::endgroup::"
# fpm
echo "::group::Install fpm: Actually install fpm"
pkg install -y devel/ruby-gems
gem install --no-document fpm
echo "::endgroup::"
echo "::group::Install fpm: Install gtar (workaround for https://github.com/jordansissel/fpm/pull/1922)"
pkg install -y gtar
mv /usr/bin/tar /usr/bin/bsdtar
mv /usr/local/bin/gtar /usr/bin/tar
echo "::endgroup::"
# /fpm
echo "::group::Ignore ownership issues"
git config --global --add safe.directory "$GITHUB_WORKSPACE"
echo "::endgroup::"
run: |
set -e
gmake dist/freebsd
- name: Upload built package
uses: actions/upload-artifact@v4
with:
name: dist-freebsd
path: dist/mommy*
build-netbsd:
needs: [ pre-flight-checks ]
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install fpm && Build package
uses: cross-platform-actions/action@v0.22.0
with:
operating_system: netbsd
version: "9.3"
run: |
set -e
export PATH="/usr/sbin:$PATH" # Add 'pkg_*' commands to path
echo "::group::Install basic packages"
sudo pkgin -y in git gmake mozilla-rootcerts-openssl
echo "::endgroup::"
echo "::group::Ignore ownership issues"
git config --global --add safe.directory "$GITHUB_WORKSPACE"
echo "::endgroup::"
echo "::group::Build package"
gmake dist/netbsd
echo "::endgroup::"
- name: Upload built package
uses: actions/upload-artifact@v4
with:
name: dist-netbsd
path: dist/mommy*
build-openbsd:
needs: [ pre-flight-checks ]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install fpm && Build package
uses: vmactions/openbsd-vm@v1
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@v4
with:
name: dist-openbsd
path: dist/mommy*
release-mommy:
if: ${{ github.event.inputs.release_mommy == 'true' }}
# `pre-flight-checks` is required to access `MOMMY_VERSION`
needs: [ pre-flight-checks, build-linux, build-macos, build-freebsd, build-netbsd, build-openbsd ]
runs-on: ubuntu-latest
env:
MOMMY_VERSION: ${{ needs.pre-flight-checks.outputs.MOMMY_VERSION }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download built packages
uses: actions/download-artifact@v4
with:
pattern: dist-*
merge-multiple: true
path: dist
- name: Extract release notes
id: extract-release-notes
uses: ffurrer2/extract-release-notes@v2
with:
release_notes_file: RELEASE_NOTES.md
- name: Prepend release notes
run: |
echo -e "mommy can also be installed using a package manager. [check the readme for more info](https://github.com/FWDekker/mommy/tree/${MOMMY_VERSION}#-installation)~\n" | cat - RELEASE_NOTES.md | tee RELEASE_NOTES.md
- name: Publish release
uses: softprops/action-gh-release@v1
if: ${{ github.event.inputs.dry_run == 'false' && github.event.inputs.release_mommy == 'true' }}
with:
target_commitish: main
tag_name: ${{ env.MOMMY_VERSION }}
body_path: RELEASE_NOTES.md
files: mommy*
draft: false
prerelease: false
discussion_category_name: announcements
release-apt:
if: ${{ github.event.inputs.release_apt == 'true' }}
needs: [ pre-flight-checks, release-mommy ]
runs-on: ubuntu-latest
env:
MOMMY_VERSION: ${{ needs.pre-flight-checks.outputs.MOMMY_VERSION }}
steps:
- name: Checkout mommy
uses: actions/checkout@v4
with:
path: src-mommy
- name: Checkout apt-mommy
uses: actions/checkout@v4
with:
repository: fwdekker/apt-mommy
path: apt-mommy
ref: main
fetch-depth: 0
# Required to push '.deb' to repository
token: ${{ secrets.personal_access_token }}
- name: Download built packages
uses: actions/download-artifact@v4
with:
pattern: dist-*
merge-multiple: true
path: dist-mommy
- name: Move .deb into apt-mommy
run: cp dist-mommy/*.deb apt-mommy/deb/
- name: Import GPG key
run: echo "$apt_gpg_private_key" | gpg --import
env:
apt_gpg_private_key: ${{ secrets.apt_gpg_private_key }}
- name: Update apt-mommy
working-directory: apt-mommy
run: |
echo "::group::Run update script"
./update.sh
echo "::endgroup::"
echo "::group::Commit changes"
git config --global user.name "FWDekkerBot"
git config --global user.email "bot@fwdekker.com"
git add --all
git commit -m "🔖 mommy added package mommy $MOMMY_VERSION~"
echo "::endgroup::"
if [ "${{ github.event.inputs.dry_run }}" = "false" ]; then
echo "::group::Push changes"
git push origin
echo "::endgroup::"
else
echo "::group::Not pushing changes"
echo "::endgroup::"
fi;
release-aur:
if: ${{ github.event.inputs.release_aur == 'true' }}
needs: [ pre-flight-checks, release-mommy ]
runs-on: ubuntu-latest
container: archlinux:latest
env:
MOMMY_VERSION: ${{ needs.pre-flight-checks.outputs.MOMMY_VERSION }}
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@v4
with:
path: src-mommy
- name: Checkout aur-mommy
uses: actions/checkout@v4
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: |
if [ "${{ github.event.inputs.dry_run }}" = "false" ]; then
empty_option=""
else
empty_option="--allow-empty"
fi;
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 "bot@fwdekker.com"
sudo -u build git add --all
sudo -u build git commit -m "🔖 mommy updated the build files to mommy $MOMMY_VERSION~" $empty_option
echo "::endgroup::"
echo "::group::Fast-forward dev"
sudo -u build git checkout dev
sudo -u build git merge --commit master
echo "::endgroup::"
if [ "${{ github.event.inputs.dry_run }}" = "false" ]; then
echo "::group::Push changes"
sudo -u build git push origin master dev
echo "::endgroup::"
else
echo "::group::Not pushing changes"
echo "::endgroup::"
fi;
release-homebrew:
if: ${{ github.event.inputs.release_homebrew == 'true' }}
needs: [ pre-flight-checks, release-mommy ]
runs-on: ubuntu-latest
env:
MOMMY_VERSION: ${{ needs.pre-flight-checks.outputs.MOMMY_VERSION }}
steps:
- name: Checkout mommy
uses: actions/checkout@v4
with:
path: src-mommy
- name: Checkout homebrew-mommy
uses: actions/checkout@v4
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: |
if [ "${{ github.event.inputs.dry_run }}" = "false" ]; then
empty_option=""
else
empty_option="--allow-empty"
fi;
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 "bot@fwdekker.com"
git add --all
git commit -m "🔖 mommy updated the formula to mommy $MOMMY_VERSION~" $empty_option
echo "::endgroup::"
echo "::group::Fast-forward dev"
git checkout dev
git merge --commit main
echo "::endgroup::"
if [ "${{ github.event.inputs.dry_run }}" = "false" ]; then
echo "::group::Push changes"
git push origin main dev
echo "::endgroup::"
else
echo "::group::Not pushing changes"
echo "::endgroup::"
fi;