Build all taipy packages and release them #85
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: Build all taipy packages and release them | |
on: | |
workflow_dispatch: | |
inputs: | |
internal_dep_on_pypi: | |
description: "Point taipy internal dependencies to Pypi? If false it will point to the github .tar.gz release file" | |
default: "false" | |
required: true | |
release_type: | |
description: "The type of release to be made (dev or production)" | |
default: "dev" | |
required: true | |
target_version: | |
description: "The version of the package to be released" | |
required: true | |
env: | |
NODE_OPTIONS: --max-old-space-size=4096 | |
permissions: | |
contents: write | |
jobs: | |
fetch-versions: | |
runs-on: ubuntu-latest | |
outputs: | |
common_VERSION: ${{ steps.version-setup.outputs.common_VERSION }} | |
core_VERSION: ${{ steps.version-setup.outputs.core_VERSION }} | |
gui_VERSION: ${{ steps.version-setup.outputs.gui_VERSION }} | |
rest_VERSION: ${{ steps.version-setup.outputs.rest_VERSION }} | |
templates_VERSION: ${{ steps.version-setup.outputs.templates_VERSION }} | |
VERSION: ${{ steps.version-setup.outputs.VERSION }} | |
NEW_VERSION: ${{ steps.version-setup.outputs.NEW_VERSION }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Extract branch name | |
shell: bash | |
run: echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT | |
id: extract_branch | |
- name: Setup Version | |
id: version-setup | |
run: | | |
python tools/release/setup_version.py ALL ${{ github.event.inputs.release_type }} ${{ github.event.inputs.target_version }} ${{ steps.extract_branch.outputs.branch }} >> $GITHUB_OUTPUT | |
build-and-release-taipy-packages: | |
needs: [fetch-versions] | |
timeout-minutes: 20 | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
package: [common, core, gui, rest, templates] | |
max-parallel: 1 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ssh-key: ${{secrets.DEPLOY_KEY}} | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: 3.9 | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: '20' | |
- name: Extract commit hash | |
shell: bash | |
run: echo "HASH=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT | |
id: extract_hash | |
- name: Set Build Variables | |
id: set-variables | |
run: | | |
if [ "${{ matrix.package }}" == "common" ]; then | |
echo "package_version=${{needs.fetch-versions.outputs.common_VERSION}}" >> $GITHUB_OUTPUT | |
echo "package_dir=./taipy/common" >> $GITHUB_OUTPUT | |
echo "release_name=${{needs.fetch-versions.outputs.common_VERSION}}-common" >> $GITHUB_OUTPUT | |
echo "tar_path=./dist/${{ github.event.repository.name }}-common-${{needs.fetch-versions.outputs.common_VERSION}}.tar.gz" >> $GITHUB_OUTPUT | |
elif [ "${{ matrix.package }}" == "core" ]; then | |
echo "package_version=${{needs.fetch-versions.outputs.core_VERSION}}" >> $GITHUB_OUTPUT | |
echo "package_dir=./taipy/core" >> $GITHUB_OUTPUT | |
echo "release_name=${{needs.fetch-versions.outputs.core_VERSION}}-core" >> $GITHUB_OUTPUT | |
echo "tar_path=./dist/${{ github.event.repository.name }}-core-${{needs.fetch-versions.outputs.core_VERSION}}.tar.gz" >> $GITHUB_OUTPUT | |
elif [ "${{ matrix.package }}" == "gui" ]; then | |
echo "package_version=${{needs.fetch-versions.outputs.gui_VERSION}}" >> $GITHUB_OUTPUT | |
echo "package_dir=./taipy/gui" >> $GITHUB_OUTPUT | |
echo "release_name=${{needs.fetch-versions.outputs.gui_VERSION}}-gui" >> $GITHUB_OUTPUT | |
echo "tar_path=./dist/${{ github.event.repository.name }}-gui-${{needs.fetch-versions.outputs.gui_VERSION}}.tar.gz" >> $GITHUB_OUTPUT | |
elif [ "${{ matrix.package }}" == "rest" ]; then | |
echo "package_version=${{needs.fetch-versions.outputs.rest_VERSION}}" >> $GITHUB_OUTPUT | |
echo "package_dir=./taipy/rest" >> $GITHUB_OUTPUT | |
echo "release_name=${{needs.fetch-versions.outputs.rest_VERSION}}-rest" >> $GITHUB_OUTPUT | |
echo "tar_path=./dist/${{ github.event.repository.name }}-rest-${{needs.fetch-versions.outputs.rest_VERSION}}.tar.gz" >> $GITHUB_OUTPUT | |
elif [ "${{ matrix.package }}" == "templates" ]; then | |
echo "package_version=${{needs.fetch-versions.outputs.templates_VERSION}}" >> $GITHUB_OUTPUT | |
echo "package_dir=./taipy/templates" >> $GITHUB_OUTPUT | |
echo "release_name=${{needs.fetch-versions.outputs.templates_VERSION}}-templates" >> $GITHUB_OUTPUT | |
echo "tar_path=./dist/${{ github.event.repository.name }}-templates-${{needs.fetch-versions.outputs.templates_VERSION}}.tar.gz" >> $GITHUB_OUTPUT | |
fi | |
shell: bash | |
- name: Update setup.requirements.txt | |
run: | | |
python tools/release/update_setup_requirements.py taipy-${{ matrix.package }} \ | |
${{needs.fetch-versions.outputs.common_VERSION}} \ | |
${{needs.fetch-versions.outputs.core_VERSION}} \ | |
${{needs.fetch-versions.outputs.gui_VERSION}} \ | |
${{needs.fetch-versions.outputs.rest_VERSION}} \ | |
${{needs.fetch-versions.outputs.templates_VERSION}} \ | |
${{ github.event.inputs.internal_dep_on_pypi }} | |
- name: Copy tools | |
run: | | |
cp -r tools ${{ steps.set-variables.outputs.package_dir }} | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install build wheel pipenv mypy black isort | |
- name: Install GUI dependencies | |
if: matrix.package == 'gui' | |
run: | | |
pipenv install --dev | |
- name: Generate GUI pyi file | |
if: matrix.package == 'gui' | |
run: | | |
pipenv run python tools/gui/generate_pyi.py | |
- name: Build frontends | |
if: matrix.package == 'gui' | |
run: | | |
python tools/frontend/bundle_build.py | |
- name: Copy files from tools | |
run: | | |
cp -r tools/packages/taipy-${{matrix.package}}/. ${{ steps.set-variables.outputs.package_dir }} | |
- name: Build Package Structure | |
working-directory: ${{ steps.set-variables.outputs.package_dir }} | |
run: | | |
python tools/release/build_package_structure.py ${{ matrix.package }} | |
- name: Build package | |
working-directory: ${{ steps.set-variables.outputs.package_dir }} | |
run: | | |
python -m build | |
for file in ./dist/*; do mv "$file" "${file//_/-}"; done | |
- name: Create tag and release | |
working-directory: ${{ steps.set-variables.outputs.package_dir }} | |
run: | | |
if [ "${{ github.event.inputs.release_type }}" == "dev" ]; then | |
gh release create ${{ steps.set-variables.outputs.release_name }} ${{ steps.set-variables.outputs.tar_path }} --target ${{ steps.extract_hash.outputs.HASH }} --prerelease --title ${{ steps.set-variables.outputs.release_name }} --notes "Release Draft ${{ steps.set-variables.outputs.release_name }}" | |
else | |
gh release create ${{ steps.set-variables.outputs.release_name }} ${{ steps.set-variables.outputs.tar_path }} --target ${{ steps.extract_hash.outputs.HASH }} --title ${{ steps.set-variables.outputs.release_name }} --notes "Release ${{ steps.set-variables.outputs.release_name }}" | |
fi | |
shell: bash | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
build-and-release-taipy: | |
runs-on: ubuntu-latest | |
needs: [build-and-release-taipy-packages, fetch-versions] | |
timeout-minutes: 20 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ssh-key: ${{secrets.DEPLOY_KEY}} | |
- name: Extract commit hash | |
shell: bash | |
run: echo "HASH=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT | |
id: extract_hash | |
- name: Set Build Variables | |
id: set-variables | |
run: | | |
echo "package_version=${{needs.fetch-versions.outputs.VERSION}}" >> $GITHUB_OUTPUT | |
echo "release_name=${{needs.fetch-versions.outputs.VERSION}}" >> $GITHUB_OUTPUT | |
echo "tar_path=./dist/${{ github.event.repository.name }}-${{needs.fetch-versions.outputs.VERSION}}.tar.gz" >> $GITHUB_OUTPUT | |
- name: Update setup.requirements.txt | |
run: | | |
python tools/release/update_setup_requirements.py taipy \ | |
${{needs.fetch-versions.outputs.common_VERSION}} \ | |
${{needs.fetch-versions.outputs.core_VERSION}} \ | |
${{needs.fetch-versions.outputs.gui_VERSION}} \ | |
${{needs.fetch-versions.outputs.rest_VERSION}} \ | |
${{needs.fetch-versions.outputs.templates_VERSION}} \ | |
${{ github.event.inputs.internal_dep_on_pypi }} | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install build wheel | |
- name: Backup setup.py | |
run: | | |
mv setup.py setup.old.py | |
- name: Copy files from tools | |
run: | | |
cp -r tools/packages/taipy/. . | |
- name: Build Frontend | |
run: | | |
python tools/frontend/bundle_build.py | |
- name: Build Taipy package | |
run: | | |
python -m build | |
- name: Create tag and release Taipy | |
run: | | |
if [ "${{ github.event.inputs.release_type }}" == "dev" ]; then | |
gh release create ${{ steps.set-variables.outputs.release_name }} ${{ steps.set-variables.outputs.tar_path }} --target ${{ steps.extract_hash.outputs.HASH }} --prerelease --title ${{ steps.set-variables.outputs.release_name }} --notes "Release Draft ${{ steps.set-variables.outputs.release_name }}" | |
else | |
gh release create ${{ steps.set-variables.outputs.release_name }} ${{ steps.set-variables.outputs.tar_path }} --target ${{ steps.extract_hash.outputs.HASH }} --title ${{ steps.set-variables.outputs.release_name }} --notes "Release ${{ steps.set-variables.outputs.release_name }}" | |
fi | |
shell: bash | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Download packages | |
run: | | |
gh release download ${{ needs.fetch-versions.outputs.common_VERSION }}-common --skip-existing --dir dist | |
gh release download ${{ needs.fetch-versions.outputs.core_VERSION }}-core --skip-existing --dir dist | |
gh release download ${{ needs.fetch-versions.outputs.gui_VERSION }}-gui --skip-existing --dir dist | |
gh release download ${{ needs.fetch-versions.outputs.rest_VERSION }}-rest --skip-existing --dir dist | |
gh release download ${{ needs.fetch-versions.outputs.templates_VERSION }}-templates --skip-existing --dir dist | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Bundle all packages in main release tag | |
run: | | |
find dist -type f -print0 | xargs -r0 gh release upload ${{ needs.fetch-versions.outputs.VERSION }} --clobber | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- uses: stefanzweifel/git-auto-commit-action@v5 | |
with: | |
file_pattern: '*/version.json' | |
commit_message: Update version to ${{ needs.fetch-versions.outputs.NEW_VERSION }} | |
- name: Reset changes | |
run: | | |
git reset --hard HEAD | |
git clean -fdx |