This repository has been archived by the owner on Jul 17, 2024. It is now read-only.
Release #1
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: Release | |
on: | |
workflow_dispatch: | |
inputs: | |
version: | |
description: 'Community Edition version (e.g. 1.0.0)' | |
required: true | |
pythonVersionSuffix: | |
description: 'What suffix to append to the Python version (ex: a0 for alpha release)' | |
required: true | |
default: a0 | |
sourceBranch: | |
description: 'Branch to cut the release from' | |
default: main | |
required: true | |
releaseBranch: | |
description: 'Release branch to create (e.g. 1.0.x for version 1.0.0; once created, branch protection rules apply)' | |
default: dry_run | |
required: true | |
dryRun: | |
description: 'Do a dry run? (true or false)' | |
default: true | |
required: true | |
jobs: | |
build: | |
env: | |
MAVEN_ARGS: "--no-transfer-progress --batch-mode" | |
runs-on: ubuntu-latest | |
steps: | |
- name: Print inputs to the release workflow | |
run: echo "${{ toJSON(github.event.inputs) }}" | |
- name: Checkout the relevant timefold-solver tag | |
uses: actions/checkout@v4 | |
with: | |
repository: "TimefoldAI/timefold-solver" | |
path: "./timefold-solver" | |
fetch-depth: 0 | |
ref: v${{ github.event.inputs.version }} | |
- uses: actions/setup-java@v4 | |
with: | |
java-version: '17' | |
distribution: 'temurin' | |
cache: 'maven' | |
- name: Set up Maven | |
uses: stCarolas/setup-maven@v5 | |
with: | |
maven-version: 3.9.3 | |
- name: Python 3.12 Setup | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.12 | |
- name: Install Pip and build | |
run: | |
python -m pip install --upgrade pip | |
pip install build | |
- name: Checkout timefold-solver-python | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
ref: ${{ github.event.inputs.sourceBranch }} | |
- name: Create release branch and switch to it | |
run: | | |
git config user.name "Timefold Release Bot" | |
git config user.email "release@timefold.ai" | |
git checkout -b ${{ github.event.inputs.releaseBranch }} | |
# We skip tests in dry run, to make the process faster. | |
# Technically, this goes against the main reason for doing a dry run; to eliminate potential problems. | |
# But unless something catastrophic happened, PR checks on source branch already ensured that all tests pass. | |
# We also do not use versions:set, because we'd have to have the SNAPSHOT version built from somewhere, | |
# and at this point in the release, there is no upstream branch anywhere that would have this version anymore. | |
- name: Set release version and build release | |
run: | | |
export NEW_VERSION=${{ github.event.inputs.version }} | |
export NEW_VERSION_PYTHON=${{ github.event.inputs.version }}${{ github.event.inputs.pythonVersionSuffix }} | |
.github/scripts/change_versions.sh | |
python -m build | |
# JReleaser requires the release branch to exist, so we need to push it before releasing. | |
# Once this is pushed, branch protection rules apply. | |
# So if any of the subsequent steps should fail, the release branch is there to stay; cannot be deleted. | |
# To minimize that chance, do a dry run first, with a branch named in a way that the protection rules don't apply. | |
- name: Push release branch to Git | |
run: | | |
git push origin ${{ github.event.inputs.releaseBranch }} | |
- name: Run JReleaser | |
uses: jreleaser/release-action@v2 | |
env: | |
JRELEASER_DRY_RUN: ${{ github.event.inputs.dryRun }} | |
JRELEASER_PROJECT_VERSION: ${{ github.event.inputs.version }}${{ github.event.inputs.pythonVersionSuffix }} | |
JRELEASER_GITHUB_TOKEN: ${{ secrets.JRELEASER_GITHUB_TOKEN }} | |
JRELEASER_GPG_PASSPHRASE: ${{ secrets.JRELEASER_GPG_PASSPHRASE }} | |
JRELEASER_GPG_PUBLIC_KEY: ${{ secrets.JRELEASER_GPG_PUBLIC_KEY }} | |
JRELEASER_GPG_SECRET_KEY: ${{ secrets.JRELEASER_GPG_SECRET_KEY }} | |
- name: JReleaser release output | |
uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: jreleaser-release | |
path: | | |
out/jreleaser/trace.log | |
out/jreleaser/output.properties | |
# TODO: Use https://github.com/marketplace/actions/pypi-publish to publish to PyPI here | |
# Pull Request will be created with the changes and a summary of next steps. | |
- name: Put back the 999-SNAPSHOT version on the release branch | |
run: | | |
git checkout -B ${{ github.event.inputs.releaseBranch }}-put-back-999-snapshot | |
export NEW_VERSION="999-SNAPSHOT" | |
export NEW_VERSION_PYTHON="999-dev0" | |
.github/scripts/change_versions.sh | |
git push origin ${{ github.event.inputs.releaseBranch }}-put-back-999-snapshot | |
gh pr create --reviewer triceo,Christopher-Chianelli --base ${{ github.event.inputs.releaseBranch }} --head ${{ github.event.inputs.releaseBranch }}-put-back-999-snapshot --title "build: move back to 999-SNAPSHOT" --body-file .github/workflows/release-pr-body.md | |
env: | |
GITHUB_TOKEN: ${{ secrets.JRELEASER_GITHUB_TOKEN }} |