mirror of
https://github.com/jrnl-org/jrnl.git
synced 2025-05-10 08:38:32 +02:00
222 lines
7 KiB
YAML
222 lines
7 KiB
YAML
# Copyright © 2012-2023 jrnl contributors
|
|
# License: https://www.gnu.org/licenses/gpl-3.0.html
|
|
|
|
name: Release
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
version:
|
|
description: 'Version (e.g. v2.5, v2.5.1-beta, v2.6-beta2)'
|
|
type: string
|
|
required: true
|
|
include_repo_version:
|
|
description: 'Update version in repo?'
|
|
type: boolean
|
|
required: true
|
|
default: true
|
|
include_pypi:
|
|
description: 'Publish to PyPI?'
|
|
type: boolean
|
|
required: true
|
|
default: true
|
|
include_brew:
|
|
description: 'Publish to Homebrew?'
|
|
type: boolean
|
|
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@v4
|
|
with:
|
|
python-version: '3.11'
|
|
|
|
- name: Checkout repo
|
|
uses: actions/checkout@v4
|
|
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="$(find dist/jrnl-*.tar.gz | sed -r 's!dist/jrnl-(.*)\.tar\.gz!\1!')"
|
|
echo "pypi_version=$pypi_version" >> "$GITHUB_OUTPUT"
|
|
|
|
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-only
|
|
--force
|
|
|
|
- name: Create Pull Request
|
|
uses: peter-evans/create-pull-request@v5
|
|
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 }}
|