Skip to content

Build all taipy packages and release them #85

Build all taipy packages and release them

Build all taipy packages and release them #85

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