lightning/.github/workflows/release-pkg.yml

219 lines
7.5 KiB
YAML

name: Releasing packages
# https://help.github.com/en/actions/reference/events-that-trigger-workflows
on:
push:
branches: [master, "release/*"]
release:
types: [published]
pull_request: # this shall test only the part of workflow before publishing
branches: [master, "release/*"]
types: [opened, reopened, ready_for_review, synchronize]
paths:
- "requirements/ci.txt"
- ".github/actions/pkg-check/*"
- ".github/actions/pkg-publish/*"
- ".github/workflows/_legacy-checkpoints.yml.yml"
- ".github/workflows/_build-packages.yml"
- ".github/workflows/release-pypi.yml"
defaults:
run:
shell: bash
env:
FREEZE_REQUIREMENTS: 1
TORCH_URL: "https://download.pytorch.org/whl/cpu/torch_stable.html"
PYTHON_VER: "3.8"
jobs:
build-packages:
uses: ./.github/workflows/_build-packages.yml
with:
artifact-name: dist-packages-${{ github.sha }}
upload-packages:
runs-on: ubuntu-22.04
needs: build-packages
if: github.event_name == 'release'
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v3
with:
name: dist-packages-${{ github.sha }}
path: dist
- run: ls -lh dist/
- name: Upload to release
uses: AButler/upload-release-assets@v3.0
with:
files: "dist/*/*"
repo-token: ${{ secrets.GITHUB_TOKEN }}
release-version:
runs-on: ubuntu-22.04
outputs:
tag: ${{ steps.lai-package.outputs.version }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VER }}
- name: install Package
run: |
pip install . -f ${TORCH_URL}
pip list
- name: package Version
id: lai-package
run: python -c "import lightning ; print(f'version={lightning.__version__}')" >> $GITHUB_OUTPUT
signaling:
runs-on: ubuntu-22.04
needs: ["release-version", "build-packages"]
if: startsWith(github.event.ref, 'refs/tags') || github.event_name == 'release'
env:
TAG: ${{ needs.release-version.outputs.tag }}
BRANCH_NAME: "trigger/lightning-${{ needs.release-version.outputs.tag }}"
steps:
- uses: actions/checkout@v4
with:
repository: gridai/base-images
token: ${{ secrets.PAT_GHOST }}
- name: Update lightning version
run: |
import json, os, re
tag = os.getenv('TAG')
fname_json = "versions.json"
with open(fname_json, encoding="utf-8") as fopen:
vers = json.load(fopen)
vers["lightning_version"] = tag
conda_ = vers["conda_snapshot"].split(".")
conda_[-1] = str(int(conda_[-1]) + 1)
vers["conda_snapshot"] = ".".join(conda_)
with open(fname_json, "w", encoding="utf-8") as fopen:
json.dump(vers, fopen, indent=2)
# satisfy pre-commit with line fixer
fopen.write(os.linesep)
fname_txt = "conda-user/user-env-requirements.txt"
with open(fname_txt, encoding="utf-8") as fopen:
reqs = fopen.read()
reqs = re.sub(r"lightning\w*==([\d\.]+)", f"lightning=={tag}", reqs)
with open(fname_txt, "w", encoding="utf-8") as fopen:
fopen.write(reqs)
shell: python
- run: cat versions.json
- name: Create Pull Request
if: github.event_name != 'pull_request'
uses: peter-evans/create-pull-request@v6
with:
title: "Bump lightning ver `${{ env.TAG }}`"
committer: GitHub <noreply@github.com>
author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com>
token: ${{ secrets.PAT_GHOST }}
add-paths: |
versions.json
conda-user/user-env-requirements.txt
commit-message: "bumping lightning version -> (${{ env.TAG }})"
branch: "bump/lightning-${{ env.TAG }}"
# Delete the branch when closing pull requests, and when undeleted after merging.
delete-branch: true
# the PR"s body/content
body: >
**This is automated update with the latest lighting [release](https://github.com/Lightning-AI/lightning/releases/tag/${{ env.TAG }})!**
Please, act swiftly to land this PR as it is effectively blocking lightning release to be finished...
assignees: |
justusschock
borda
reviewers: |
justusschock
ethanwharris
borda
waiting:
runs-on: ubuntu-22.04
needs: [release-version, signaling]
env:
TAG: ${{ needs.release-version.outputs.tag }}
# due to PR process this may take longer
timeout-minutes: 180
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VER }}
- run: pip install gitpython
- name: Delay releasing
run: |
import git, os, time
repo = git.Repo('.')
branch = f"origin/builds/{os.getenv('TAG')}"
while True:
remote_refs = [b.name for b in repo.remote().refs]
print([n for n in remote_refs if "builds" in n])
if branch in remote_refs:
break
time.sleep(60)
for remote in repo.remotes:
remote.fetch()
shell: python
pre-publish-packages:
runs-on: ubuntu-22.04
needs: build-packages
if: startsWith(github.event.ref, 'refs/tags') || github.event_name == 'release'
strategy:
fail-fast: false
matrix:
name: ["APP", "FABRIC", "PYTORCH", "LIGHTNING"]
steps:
- uses: actions/checkout@v4 # needed for local action below
- uses: actions/download-artifact@v3
with:
name: dist-packages-${{ github.sha }}
path: dist
- name: Browse folder
id: folder
run: |
sudo apt install -q -y tree
tree -L 2 -h dist/
python -c "print('pkg=' + '${{ matrix.name }}'.lower())" >> $GITHUB_OUTPUT
- uses: ./.github/actions/pkg-publish
with:
pkg-folder: dist/${{ steps.folder.outputs.pkg }}
pypi-test-token: ${{ secrets[format('PYPI_TEST_TOKEN_{0}', matrix.name)] }}
publish-packages:
runs-on: ubuntu-22.04
needs: [build-packages, waiting]
if: startsWith(github.event.ref, 'refs/tags') || github.event_name == 'release'
strategy:
fail-fast: false
matrix:
name: ["APP", "FABRIC", "PYTORCH", "LIGHTNING"]
steps:
- uses: actions/checkout@v4 # needed for local action below
- uses: actions/download-artifact@v3
with:
name: dist-packages-${{ github.sha }}
path: dist
- name: Browse folder
id: folder
run: |
sudo apt install -q -y tree
tree -L 2 -h dist/
python -c "print('pkg=' + '${{ matrix.name }}'.lower())" >> $GITHUB_OUTPUT
- uses: ./.github/actions/pkg-publish
with:
pkg-folder: dist/${{ steps.folder.outputs.pkg }}
pypi-token: ${{ secrets[format('PYPI_TOKEN_{0}', matrix.name)] }}
legacy-checkpoints:
needs: [build-packages]
uses: ./.github/workflows/_legacy-checkpoints.yml
with:
push_to_s3: ${{ startsWith(github.event.ref, 'refs/tags') || github.event_name == 'release' }}
upload_local: ${{ startsWith(github.event.ref, 'refs/tags') || github.event_name == 'release' }}
create_pr: ${{ startsWith(github.event.ref, 'refs/tags') || github.event_name == 'release' }}
secrets: inherit