name: Release on: workflow_dispatch: inputs: version: description: 'Version (e.g. v2.5, v2.5.1-beta, v2.6-beta2)' required: 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 run: | poetry version "$JRNL_VERSION" echo __version__ = \"$JRNL_VERSION\" > jrnl/__version__.py - name: Commit updated files if: ${{ 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 --tags - name: Build run: poetry build - name: Deploy to PyPI if: ${{ 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: 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: Determine type of release 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: Checkout homebrew repo uses: actions/checkout@v2 with: token: ${{ secrets.JRNL_BOT_TOKEN }} repository: ${{ env.FORMULA_REPO }} - name: Config git user run: | git config --global user.name "${{ secrets.JRNL_BOT_NAME }}" git config --global user.email "${{ secrets.JRNL_BOT_EMAIL }}" - name: Create branch run: | BRANCH_NAME="jrnl-${JRNL_VERSION}--${RANDOM}" git remote rename origin upstream git remote add origin "https://github.com/${BOT_REPO}.git" git fetch origin git checkout -b $BRANCH_NAME git push -u origin $BRANCH_NAME - name: Install dependencies run: brew install pipgrip - name: Query PyPI API run: curl -Ls https://pypi.org/pypi/jrnl/json > api_response.json - name: Update Homebrew Formula run: > brew bump-formula-pr "Formula/${FORMULA_NAME}.rb" --url $(jq ".releases[\"${PYPI_VERSION}\"][1].url" -r api_response.json) --sha256 $(jq ".releases[\"${PYPI_VERSION}\"][1].digests.sha256" -r api_response.json) --version=$PYPI_VERSION --no-audit --write --commit --force - name: Update commit message run: | git commit --amend \ -m "jrnl ${JRNL_VERSION}" \ -m "Update jrnl to ${JRNL_VERSION}" \ -m '${{ secrets.RELEASE_COAUTHORS }}' - name: Push commit run: | git show head git push - name: Open pull request env: GH_TOKEN: ${{ secrets.JRNL_BOT_TOKEN }} run: > gh pr create --title "jrnl ${JRNL_VERSION}" --body 'Created with `brew bump-formula-pr`.'