mirror of
https://github.com/jrnl-org/jrnl.git
synced 2025-05-11 09:08:32 +02:00
Homebrew doesn't like explicitly declaring a version for a formula (it prefers to infer it from the url), and will throw an error on PRs. So, this removes that part of the workflow.
215 lines
6.8 KiB
YAML
215 lines
6.8 KiB
YAML
name: Release
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
version:
|
|
description: 'Version (e.g. v2.5, v2.5.1-beta, v2.6-beta2)'
|
|
required: true
|
|
include_repo_version:
|
|
description: 'Update version in repo? (true/false)'
|
|
require: true
|
|
default: true
|
|
include_pypi:
|
|
description: 'Publish to PyPI? (true/false)'
|
|
required: true
|
|
default: true
|
|
include_brew:
|
|
description: 'Publish to Homebrew? (true/false)'
|
|
required: true
|
|
default: true
|
|
|
|
jobs:
|
|
validate:
|
|
name: "Validate version string"
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Validate version
|
|
run: |
|
|
JRNL_VERSION="${{ github.event.inputs.version }}"
|
|
echo "::debug::version: $JRNL_VERSION"
|
|
if [[ ! $JRNL_VERSION =~ ^v[0-9]+(\.[0-9]+){1,2}(-(alpha|beta)([0-9]+)?)?$ ]]; then
|
|
echo
|
|
echo "::error::Bad version"
|
|
echo
|
|
echo "Version string should match pattern above."
|
|
echo "Here are some examples of valid version numbers:"
|
|
echo
|
|
echo " v2.5"
|
|
echo " v2.5-alpha"
|
|
echo " v2.5-beta"
|
|
echo " v2.5.1"
|
|
echo " v2.5.1-alpha"
|
|
echo " v2.5.1-beta"
|
|
exit 1
|
|
fi
|
|
|
|
release_pypi:
|
|
needs: validate
|
|
name: "Release to PyPI"
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
pypi_version: ${{ steps.pypi-version-getter.outputs.pypi_version }}
|
|
env:
|
|
HOME_REPO: ${{ secrets.HOME_REPO }}
|
|
steps:
|
|
- name: Get version
|
|
run: |
|
|
JRNL_VERSION="${{ github.event.inputs.version }}"
|
|
echo "::debug::version: $JRNL_VERSION"
|
|
echo "JRNL_VERSION=$JRNL_VERSION" >> $GITHUB_ENV
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v2
|
|
with:
|
|
python-version: 3.9
|
|
|
|
- name: Checkout repo
|
|
uses: actions/checkout@v2
|
|
with:
|
|
token: ${{ secrets.JRNL_BOT_TOKEN }}
|
|
|
|
- name: Config git user
|
|
run: |
|
|
git config --global user.name "${{ secrets.JRNL_BOT_NAME }}"
|
|
git config --global user.email "${{ secrets.JRNL_BOT_EMAIL }}"
|
|
|
|
- name: Install dependencies
|
|
run: pip install poetry
|
|
|
|
- name: Update version in files
|
|
if: ${{ github.event.inputs.include_repo_version == 'true' }}
|
|
run: |
|
|
poetry version "$JRNL_VERSION"
|
|
echo __version__ = \"$JRNL_VERSION\" > jrnl/__version__.py
|
|
|
|
- name: Commit updated files
|
|
if: ${{ github.event.inputs.include_repo_version == 'true' && github.repository == env.HOME_REPO }}
|
|
run: |
|
|
git add pyproject.toml jrnl/__version__.py
|
|
git commit -m "Increment version to ${JRNL_VERSION}"
|
|
git tag -a -m "$JRNL_VERSION" "$JRNL_VERSION"
|
|
git push
|
|
git push --tags
|
|
|
|
- name: Build
|
|
run: poetry build
|
|
|
|
- name: Deploy to PyPI
|
|
if: ${{ github.event.inputs.include_pypi == 'true' && github.repository == env.HOME_REPO }}
|
|
env:
|
|
POETRY_PYPI_TOKEN_PYPI: ${{ secrets.PYPI_TOKEN }}
|
|
run: poetry publish
|
|
|
|
- name: Get PyPI version
|
|
id: pypi-version-getter
|
|
run: |
|
|
pypi_version="$(ls dist/jrnl-*.tar.gz | sed -r 's!dist/jrnl-(.*)\.tar\.gz!\1!')"
|
|
echo "::set-output name=pypi_version::$pypi_version"
|
|
|
|
release_homebrew:
|
|
if: ${{ github.event.inputs.include_brew == 'true' }}
|
|
needs: release_pypi
|
|
name: "Release to Homebrew"
|
|
runs-on: macos-latest
|
|
env:
|
|
HOMEBREW_NO_AUTO_UPDATE: 1
|
|
HOMEBREW_NO_INSTALL_CLEANUP: 1
|
|
HOME_REPO: ${{ secrets.HOME_REPO }}
|
|
steps:
|
|
- name: Get version
|
|
run: |
|
|
JRNL_VERSION="${{ github.event.inputs.version }}"
|
|
PYPI_VERSION="${{ needs.release_pypi.outputs.pypi_version }}"
|
|
|
|
echo "::debug::jrnl version: $JRNL_VERSION"
|
|
echo "::debug::pypi version: $PYPI_VERSION"
|
|
|
|
echo "JRNL_VERSION=$JRNL_VERSION" >> $GITHUB_ENV
|
|
echo "PYPI_VERSION=$PYPI_VERSION" >> $GITHUB_ENV
|
|
|
|
- name: Set env variables
|
|
env:
|
|
REPO_OWNER: ${{ github.repository_owner }}
|
|
run: |
|
|
if [[ $JRNL_VERSION =~ (alpha|beta) ]]; then
|
|
echo '::debug::Prerelease (not a full release)'
|
|
{
|
|
echo "RELEASE_TYPE=pre"
|
|
echo "FORMULA_REPO=${REPO_OWNER}/homebrew-prerelease"
|
|
echo "BOT_REPO=jrnl-bot/homebrew-prerelease"
|
|
echo "FORMULA_NAME=jrnl-beta"
|
|
} >> $GITHUB_ENV
|
|
else
|
|
echo '::debug::Full release (not a prerelease)'
|
|
if [[ "${{ github.repository }}" == "${HOME_REPO}" ]]; then
|
|
REPO_OWNER="homebrew"
|
|
fi
|
|
{
|
|
echo "RELEASE_TYPE=full"
|
|
echo "FORMULA_REPO=${REPO_OWNER}/homebrew-core"
|
|
echo "BOT_REPO=jrnl-bot/homebrew-core"
|
|
echo "FORMULA_NAME=jrnl"
|
|
} >> $GITHUB_ENV
|
|
fi
|
|
|
|
- name: Tap formula
|
|
run: |
|
|
brew tap ${FORMULA_REPO}
|
|
echo '::debug::Set tap directory'
|
|
echo "BREW_TAP_DIRECTORY=$(brew --repo ${FORMULA_REPO})" >> $GITHUB_ENV
|
|
- name: Install dependencies
|
|
run: brew install pipgrip
|
|
|
|
- name: Query PyPI API
|
|
uses: nick-invision/retry@v2
|
|
with:
|
|
timeout_seconds: 10
|
|
max_attempts: 30
|
|
retry_wait_seconds: 10
|
|
command: |
|
|
curl -Ls https://pypi.org/pypi/jrnl/json > api_response.json
|
|
# if query doesn't have our version yet, give it some time before trying again
|
|
if [[ "null" == "$(jq ".releases[\"${PYPI_VERSION}\"][1].url" -r api_response.json)" ]]; then
|
|
echo "::debug::PYPI_VERSION: $PYPI_VERSION"
|
|
echo "::debug::JQ VALUE: $(jq ".releases[\"${PYPI_VERSION}\"][1].url" -r api_response.json)"
|
|
echo "::group::cat api_response.json"
|
|
cat api_response.json
|
|
echo "::endgroup::"
|
|
exit 1
|
|
fi
|
|
|
|
- name: Update Homebrew Formula
|
|
uses: nick-invision/retry@v2
|
|
with:
|
|
timeout_minutes: 8
|
|
max_attempts: 6
|
|
retry_wait_seconds: 30
|
|
command: >
|
|
brew bump-formula-pr "${FORMULA_NAME}"
|
|
--url $(jq ".releases[\"${PYPI_VERSION}\"][1].url" -r api_response.json)
|
|
--sha256 $(jq ".releases[\"${PYPI_VERSION}\"][1].digests.sha256" -r api_response.json)
|
|
--no-audit
|
|
--write
|
|
--force
|
|
|
|
- name: Create Pull Request
|
|
uses: peter-evans/create-pull-request@v3
|
|
with:
|
|
path: ${{ env.BREW_TAP_DIRECTORY }}
|
|
token: ${{ secrets.JRNL_BOT_TOKEN }}
|
|
push-to-fork: ${{ env.BOT_REPO }}
|
|
|
|
committer: ${{ secrets.JRNL_BOT_NAME }} <${{ secrets.JRNL_BOT_EMAIL }}>
|
|
author: ${{ secrets.JRNL_BOT_NAME }} <${{ secrets.JRNL_BOT_EMAIL }}>
|
|
|
|
title: jrnl ${{ env.JRNL_VERSION }}
|
|
body: Created with `brew bump-formula-pr`
|
|
|
|
branch: jrnl-${{ env.JRNL_VERSION }}--
|
|
branch-suffix: random
|
|
commit-message: |
|
|
jrnl ${{ env.JRNL_VERSION }}
|
|
|
|
Update jrnl to ${{ env.JRNL_VERSION }}
|
|
|
|
${{ secrets.RELEASE_COAUTHORS }}
|