From 6856ec4b4b05de70a20b777fd86d525e2dfe1d37 Mon Sep 17 00:00:00 2001 From: runora95 Date: Tue, 28 Oct 2025 14:58:17 -0400 Subject: [PATCH 1/6] Daily qml builds with RC environment --- .github/workflows/v2-build-rc-demos-daily.yml | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 .github/workflows/v2-build-rc-demos-daily.yml diff --git a/.github/workflows/v2-build-rc-demos-daily.yml b/.github/workflows/v2-build-rc-demos-daily.yml new file mode 100644 index 0000000000..14cf30597b --- /dev/null +++ b/.github/workflows/v2-build-rc-demos-daily.yml @@ -0,0 +1,110 @@ +name: Build Daily RC Demos +on: + schedule: + - cron: '0 11 * * 1-5' # Runs weekdays 6 am ET + workflow_dispatch: + +jobs: + check-for-rc-branches: + runs-on: ubuntu-latest + outputs: + branch_exists: ${{ steps.check-rc-branches.outputs.branch_exists }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + repository: PennyLaneAI/pennylane + + - name: Install latest setuptools + run: | + python -m pip install --upgrade pip + pip install --upgrade setuptools packaging + + - name: Check for RC branches + id: check-rc-branches + run: | + VERSION=$(python setup.py --version) + echo "Current version: $VERSION" + IFS=. read MAJ MIN PAT <<< "${VERSION%-dev[0-9]*}" + RC_BRANCH="v${MAJ}.$((MIN-2)).${PAT}-rc0" + if git ls-remote --exit-code origin "refs/heads/$RC_BRANCH"; then + echo "branch_exists=true" >> $GITHUB_OUTPUT + echo "rc_branch=$RC_BRANCH" >> $GITHUB_OUTPUT + else + echo "branch_exists=false" >> $GITHUB_OUTPUT + echo "No RC branch found." + fi + + build-demos-with-rc-branches: + runs-on: ubuntu-latest + needs: check-for-rc-branches + if: needs.check-for-rc-branches.outputs.branch_exists == 'true' + outputs: + pennylane-version: ${{ steps.setup-rc-versions.outputs.pennylane-version }} + lightning-version: ${{ steps.setup-rc-versions.outputs.lightning-version }} + catalyst-version: ${{ steps.setup-rc-versions.outputs.catalyst-version }} + rc-build-branch: ${{ steps.setup-rc-versions.outputs.rc-build-branch }} + steps: + - name: Checkout QML repository + uses: actions/checkout@v4 + + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: '3.11' + + - name: Set up rc versions + id: setup-rc-versions + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + rc_build_branch=rc-daily-build-$(date +'%Y-%m-%d-%H%M%S') + git checkout -b $rc_build_branch + python -m pip index versions pennylane 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1 || true + pennylane_version=$(python -m pip index versions pennylane 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1 || true) + lightning_version=$(python -m pip index versions pennylane-lightning 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1 ||true ) + catalyst_version=$(python -m pip index versions pennylane-catalyst 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1 || true) + echo "lightning-version=$lightning_version" >> $GITHUB_OUTPUT + echo "catalyst-version=$catalyst_version" >> $GITHUB_OUTPUT + echo "pennylane-version=$pennylane_version" >> $GITHUB_OUTPUT + echo "rc-build-branch=$rc_build_branch" >> $GITHUB_OUTPUT + echo "PennyLane version: $pennylane_version, PennyLane-Lightning version: $lightning_version, PennyLane-Catalyst version: $catalyst_version" + + - name: Update demo versions + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + sed -i -E "s#git\+https://github.com/PennyLaneAI/pennylane.git\#egg=pennylane\",#pennylane<=${{ steps.setup-rc-versions.outputs.pennylane-version }}\",\\n\\t\\t\\t\"—extra-index-url\",\\n\\t\\t\\t\"https://test.pypi.org/simple/\",\\n\\t\\t\\tpre=True,#" lib/qml/lib/demo.py + sed -i "s/PennyLane-Lightning/pennylane-lightning<=${{ steps.setup-rc-versions.outputs.lightning-version }}/" lib/qml/lib/demo.py + sed -i "s/PennyLane-Catalyst/pennylane-catalyst<=${{ steps.setup-rc-versions.outputs.catalyst-version }}/" lib/qml/lib/demo.py + git commit -am "Set up RC versions for demo builds" + git push --set-upstream origin ${{ steps.setup-rc-versions.outputs.rc-build-branch }} + + build-demos: + needs: build-demos-with-rc-branches + uses: ./.github/workflows/v2-build-demos.yml + with: + ref: '${{ needs.build-demos-with-rc-branches.outputs.rc-build-branch }}' + demo-names: '' + execute: true + dev: false + save-artifact: true + artifact-name: 'demo-build-use-rc' + artifact-retention: 10 + keep-going: false + quiet: false + batch_size: 10 + + cleanup: + runs-on: ubuntu-latest + needs: + - build-demos + - build-demos-with-rc-branches + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Cleanup branch + run: | + echo "Cleaning up branch '${{ needs.build-demos-with-rc-branches.outputs.rc-build-branch }}'" + git push origin --delete '${{ needs.build-demos-with-rc-branches.outputs.rc-build-branch }}'|| true From 26f8c8c4350402b09b35fcd7b267bf53102708be Mon Sep 17 00:00:00 2001 From: runora95 Date: Mon, 10 Nov 2025 17:39:24 -0500 Subject: [PATCH 2/6] input variables --- .github/workflows/v2-build-rc-demos-daily.yml | 11 +++-- lib/qml/lib/demo.py | 49 +++++++++++++++++-- 2 files changed, 54 insertions(+), 6 deletions(-) diff --git a/.github/workflows/v2-build-rc-demos-daily.yml b/.github/workflows/v2-build-rc-demos-daily.yml index 14cf30597b..af631ce1d2 100644 --- a/.github/workflows/v2-build-rc-demos-daily.yml +++ b/.github/workflows/v2-build-rc-demos-daily.yml @@ -15,6 +15,11 @@ jobs: with: repository: PennyLaneAI/pennylane + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: '3.11' + - name: Install latest setuptools run: | python -m pip install --upgrade pip @@ -31,7 +36,7 @@ jobs: echo "branch_exists=true" >> $GITHUB_OUTPUT echo "rc_branch=$RC_BRANCH" >> $GITHUB_OUTPUT else - echo "branch_exists=false" >> $GITHUB_OUTPUT + echo "branch_exists=true" >> $GITHUB_OUTPUT # TODO change to false echo "No RC branch found." fi @@ -78,7 +83,7 @@ jobs: sed -i "s/PennyLane-Lightning/pennylane-lightning<=${{ steps.setup-rc-versions.outputs.lightning-version }}/" lib/qml/lib/demo.py sed -i "s/PennyLane-Catalyst/pennylane-catalyst<=${{ steps.setup-rc-versions.outputs.catalyst-version }}/" lib/qml/lib/demo.py git commit -am "Set up RC versions for demo builds" - git push --set-upstream origin ${{ steps.setup-rc-versions.outputs.rc-build-branch }} + # git push --set-upstream origin ${{ steps.setup-rc-versions.outputs.rc-build-branch }} build-demos: needs: build-demos-with-rc-branches @@ -107,4 +112,4 @@ jobs: - name: Cleanup branch run: | echo "Cleaning up branch '${{ needs.build-demos-with-rc-branches.outputs.rc-build-branch }}'" - git push origin --delete '${{ needs.build-demos-with-rc-branches.outputs.rc-build-branch }}'|| true + # git push origin --delete '${{ needs.build-demos-with-rc-branches.outputs.rc-build-branch }}'|| true diff --git a/lib/qml/lib/demo.py b/lib/qml/lib/demo.py index d27b82909f..5d8cd07f60 100644 --- a/lib/qml/lib/demo.py +++ b/lib/qml/lib/demo.py @@ -15,10 +15,50 @@ import lxml.html from qml.context import Context import sphobjinv as soi +import argparse logger = getLogger("qml") +def parse_extra_args(): + parser = argparse.ArgumentParser() + parser.add_argument( + "--lightning-version", + type=str, + default="PennyLane-Lightning", + help="Specify the version of PennyLane-Lightning to install (default: PennyLane-Lightning)", + ) + parser.add_argument( + "--catalyst-version", + type=str, + default="PennyLane-Catalyst", + help="Specify the version of PennyLane-Catalyst to install (default: PennyLane-Catalyst)", + ) + parser.add_argument( + "--pennylane-version", + type=str, + default="git+https://github.com/PennyLaneAI/pennylane.git#egg=pennylane", + help="Specify the version of PennyLane to install (default: git+https://github.com/PennyLaneAI/pennylane.git#egg=pennylane)" + ) + parser.add_argument( + "--extra-index-url", + type=str, + default=None, + help="Specify an additional index URL for pip to use (default: None)", + ) + parser.add_argument( + "--testpypi", + type=str, + default=None, + help="Use TestPyPI as an additional package index (default: False)", + ) + parser.add_argument( + "--prerelease-packages", + type=bool, + default=False, + help="Allow installation of pre-release packages (default: False)", + ) + return parser.parse_args() class BuildTarget(Enum): """Sphinx-build targets.""" @@ -296,7 +336,7 @@ def _build_demo( "--upgrade", "--extra-index-url", "https://test.pypi.org/simple/", - "PennyLane-Catalyst", + parse_extra_args().catalyst_version, # TODO use_uv=False, quiet=False, pre=True, @@ -307,7 +347,7 @@ def _build_demo( "--upgrade", "--extra-index-url", "https://test.pypi.org/simple/", - "PennyLane-Lightning", + parse_extra_args().lightning_version, use_uv=False, quiet=False, pre=True, @@ -317,9 +357,12 @@ def _build_demo( cmds.pip_install( build_venv.python, "--upgrade", - "git+https://github.com/PennyLaneAI/pennylane.git#egg=pennylane", + parse_extra_args().pennylane_version, # TODO + parse_extra_args().testpypi, + parse_extra_args().extra_index_url, use_uv=False, quiet=False, + pre=parse_extra_args().prerelease_packages, ) stage_dir = ctx.build_dir / "demonstrations" From e5b85bb2c29ebc22524ae637f8e1c75c918eb5fd Mon Sep 17 00:00:00 2001 From: runora95 Date: Mon, 10 Nov 2025 17:43:19 -0500 Subject: [PATCH 3/6] run --- .github/workflows/v2-build-rc-demos-daily.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/v2-build-rc-demos-daily.yml b/.github/workflows/v2-build-rc-demos-daily.yml index af631ce1d2..fa8dcd6d88 100644 --- a/.github/workflows/v2-build-rc-demos-daily.yml +++ b/.github/workflows/v2-build-rc-demos-daily.yml @@ -3,6 +3,7 @@ on: schedule: - cron: '0 11 * * 1-5' # Runs weekdays 6 am ET workflow_dispatch: + push: jobs: check-for-rc-branches: @@ -43,7 +44,7 @@ jobs: build-demos-with-rc-branches: runs-on: ubuntu-latest needs: check-for-rc-branches - if: needs.check-for-rc-branches.outputs.branch_exists == 'true' + # if: needs.check-for-rc-branches.outputs.branch_exists == 'true' outputs: pennylane-version: ${{ steps.setup-rc-versions.outputs.pennylane-version }} lightning-version: ${{ steps.setup-rc-versions.outputs.lightning-version }} From 3b26909e6354df69e6c7e577d9e74aa1bbb3853e Mon Sep 17 00:00:00 2001 From: runora95 Date: Mon, 10 Nov 2025 17:50:34 -0500 Subject: [PATCH 4/6] push --- .github/workflows/v2-build-rc-demos-daily.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/v2-build-rc-demos-daily.yml b/.github/workflows/v2-build-rc-demos-daily.yml index fa8dcd6d88..ae0c17e3e4 100644 --- a/.github/workflows/v2-build-rc-demos-daily.yml +++ b/.github/workflows/v2-build-rc-demos-daily.yml @@ -84,7 +84,7 @@ jobs: sed -i "s/PennyLane-Lightning/pennylane-lightning<=${{ steps.setup-rc-versions.outputs.lightning-version }}/" lib/qml/lib/demo.py sed -i "s/PennyLane-Catalyst/pennylane-catalyst<=${{ steps.setup-rc-versions.outputs.catalyst-version }}/" lib/qml/lib/demo.py git commit -am "Set up RC versions for demo builds" - # git push --set-upstream origin ${{ steps.setup-rc-versions.outputs.rc-build-branch }} + git push --set-upstream origin ${{ steps.setup-rc-versions.outputs.rc-build-branch }} build-demos: needs: build-demos-with-rc-branches @@ -113,4 +113,4 @@ jobs: - name: Cleanup branch run: | echo "Cleaning up branch '${{ needs.build-demos-with-rc-branches.outputs.rc-build-branch }}'" - # git push origin --delete '${{ needs.build-demos-with-rc-branches.outputs.rc-build-branch }}'|| true + git push origin --delete '${{ needs.build-demos-with-rc-branches.outputs.rc-build-branch }}'|| true From f984654679b161996c185e387e63fdc9cfd35b22 Mon Sep 17 00:00:00 2001 From: runora95 Date: Tue, 11 Nov 2025 14:02:12 -0500 Subject: [PATCH 5/6] typo --- lib/qml/lib/demo.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/qml/lib/demo.py b/lib/qml/lib/demo.py index 5d8cd07f60..4c8d1c1e1f 100644 --- a/lib/qml/lib/demo.py +++ b/lib/qml/lib/demo.py @@ -27,36 +27,42 @@ def parse_extra_args(): type=str, default="PennyLane-Lightning", help="Specify the version of PennyLane-Lightning to install (default: PennyLane-Lightning)", + nargs='?' ) parser.add_argument( "--catalyst-version", type=str, default="PennyLane-Catalyst", help="Specify the version of PennyLane-Catalyst to install (default: PennyLane-Catalyst)", + nargs='?' ) parser.add_argument( "--pennylane-version", type=str, default="git+https://github.com/PennyLaneAI/pennylane.git#egg=pennylane", - help="Specify the version of PennyLane to install (default: git+https://github.com/PennyLaneAI/pennylane.git#egg=pennylane)" + help="Specify the version of PennyLane to install (default: git+https://github.com/PennyLaneAI/pennylane.git#egg=pennylane)", + nargs='?' ) parser.add_argument( "--extra-index-url", type=str, default=None, help="Specify an additional index URL for pip to use (default: None)", + nargs='?' ) parser.add_argument( "--testpypi", type=str, default=None, help="Use TestPyPI as an additional package index (default: False)", + nargs='?' ) parser.add_argument( "--prerelease-packages", type=bool, default=False, help="Allow installation of pre-release packages (default: False)", + nargs='?' ) return parser.parse_args() From 8adf3c905aa396415635840d44f46f09d2df272b Mon Sep 17 00:00:00 2001 From: runora95 Date: Tue, 11 Nov 2025 16:34:38 -0500 Subject: [PATCH 6/6] rmv todo --- lib/qml/lib/demo.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/qml/lib/demo.py b/lib/qml/lib/demo.py index 4c8d1c1e1f..350b1351aa 100644 --- a/lib/qml/lib/demo.py +++ b/lib/qml/lib/demo.py @@ -342,7 +342,7 @@ def _build_demo( "--upgrade", "--extra-index-url", "https://test.pypi.org/simple/", - parse_extra_args().catalyst_version, # TODO + parse_extra_args().catalyst_version, use_uv=False, quiet=False, pre=True, @@ -363,7 +363,7 @@ def _build_demo( cmds.pip_install( build_venv.python, "--upgrade", - parse_extra_args().pennylane_version, # TODO + parse_extra_args().pennylane_version, parse_extra_args().testpypi, parse_extra_args().extra_index_url, use_uv=False,