From 931e88884ba4c9650ea14011d3f969ac90f1b955 Mon Sep 17 00:00:00 2001 From: Paillat-dev Date: Wed, 3 Sep 2025 23:06:43 +0200 Subject: [PATCH 01/13] :construction_worker: Create a reusable workflow for UV and make UV lockfile frozen --- .github/workflows/docs-checks.yml | 8 +-- .../workflows/docs-localization-download.yml | 9 ++- .../workflows/docs-localization-upload.yml | 9 ++- .github/workflows/lib-checks.yml | 28 +++----- .github/workflows/sync-guild-features.yml | 8 +-- .github/workflows/sync-uv.yml | 68 +++++++++++++++++++ 6 files changed, 91 insertions(+), 39 deletions(-) create mode 100644 .github/workflows/sync-uv.yml diff --git a/.github/workflows/docs-checks.yml b/.github/workflows/docs-checks.yml index 99ceaff68a..27bf5d5b67 100644 --- a/.github/workflows/docs-checks.yml +++ b/.github/workflows/docs-checks.yml @@ -41,12 +41,10 @@ jobs: uses: actions/setup-python@v5 with: python-version: "3.13" - - name: "Install uv" - uses: astral-sh/setup-uv@v6 + - name: "Setup UV" + uses: ./.github/workflows/sync-uv.yml with: - enable-cache: true - - name: Sync dependencies - run: uv sync --no-python-downloads --group dev --group docs + groups: 'dev,docs' - name: "Check Links" env: SPHINXBUILD: ${{ github.workspace }}/.venv/bin/sphinx-build diff --git a/.github/workflows/docs-localization-download.yml b/.github/workflows/docs-localization-download.yml index fba2960946..bc8c193eb2 100644 --- a/.github/workflows/docs-localization-download.yml +++ b/.github/workflows/docs-localization-download.yml @@ -20,12 +20,11 @@ jobs: uses: actions/setup-python@v5 with: python-version: "3.13" - - name: "Install uv" - uses: astral-sh/setup-uv@v6 + - name: "Setup UV" + uses: ./.github/workflows/sync-uv.yml with: - enable-cache: true - - name: Sync dependencies - run: uv sync --no-python-downloads --group dev --group docs --extra speed --extra voice + groups: 'dev,docs' + extras: 'speed,voice' - name: "Get locales" env: SPHINXBUILD: ${{ github.workspace }}/.venv/bin/sphinx-build diff --git a/.github/workflows/docs-localization-upload.yml b/.github/workflows/docs-localization-upload.yml index d7f4917203..b1d26b6f6a 100644 --- a/.github/workflows/docs-localization-upload.yml +++ b/.github/workflows/docs-localization-upload.yml @@ -25,12 +25,11 @@ jobs: uses: actions/setup-python@v5 with: python-version: "3.13" - - name: "Install uv" - uses: astral-sh/setup-uv@v6 + - name: "Setup UV" + uses: ./.github/workflows/sync-uv.yml with: - enable-cache: true - - name: Sync dependencies - run: uv sync --no-python-downloads --group dev --group docs --extra speed --extra voice + groups: 'dev,docs' + extras: 'speed,voice' - name: "Get locales" env: SPHINXBUILD: ${{ github.workspace }}/.venv/bin/sphinx-build diff --git a/.github/workflows/lib-checks.yml b/.github/workflows/lib-checks.yml index ac69ab06b0..56c7a8c4c4 100644 --- a/.github/workflows/lib-checks.yml +++ b/.github/workflows/lib-checks.yml @@ -33,16 +33,10 @@ jobs: steps: - name: "Checkout Repository" uses: actions/checkout@v5 - - name: "Setup Python" - uses: actions/setup-python@v5 - with: - python-version: "3.13" - - name: "Install uv" - uses: astral-sh/setup-uv@v6 + - name: "Setup UV" + uses: ./.github/workflows/sync-uv.yml with: - enable-cache: true - - name: Sync dependencies - run: uv sync --no-python-downloads --group dev + groups: 'dev' - name: "Run codespell" run: uv run codespell --ignore-words-list="groupt,nd,ot,ro,falsy,BU" \ @@ -56,12 +50,10 @@ jobs: uses: actions/setup-python@v5 with: python-version: "3.13" - - name: "Install uv" - uses: astral-sh/setup-uv@v6 + - name: "Setup UV" + uses: ./.github/workflows/sync-uv.yml with: - enable-cache: true - - name: Sync dependencies - run: uv sync --no-python-downloads --group dev + groups: 'dev' - name: "Run ruff linter check" run: uv run ruff check discord/ - name: "Run ruff formatter check" @@ -76,12 +68,10 @@ jobs: uses: actions/setup-python@v5 with: python-version: "3.13" - - name: "Install uv" - uses: astral-sh/setup-uv@v6 + - name: "Setup UV" + uses: ./.github/workflows/sync-uv.yml with: - enable-cache: true - - name: Sync dependencies - run: uv sync --no-python-downloads --group dev + groups: 'dev' - name: "Setup cache" id: cache-mypy uses: actions/cache@v4 diff --git a/.github/workflows/sync-guild-features.yml b/.github/workflows/sync-guild-features.yml index e29d2cd99a..da63698330 100644 --- a/.github/workflows/sync-guild-features.yml +++ b/.github/workflows/sync-guild-features.yml @@ -24,12 +24,10 @@ jobs: uses: actions/setup-python@v5 with: python-version: "3.13" - - name: "Install uv" - uses: astral-sh/setup-uv@v6 + - name: "Setup UV" + uses: ./.github/workflows/sync-uv.yml with: - enable-cache: true - - name: Sync dependencies - run: uv sync --no-python-downloads --group dev --group ci + groups: 'dev,ci' - name: "Run guild features sync" run: uv run python -m scripts.sync_guild_features env: diff --git a/.github/workflows/sync-uv.yml b/.github/workflows/sync-uv.yml new file mode 100644 index 0000000000..02b8a9cf3a --- /dev/null +++ b/.github/workflows/sync-uv.yml @@ -0,0 +1,68 @@ +name: Sync UV +on: + workflow_call: + inputs: + groups: + description: "Comma-separated list of groups to sync" + required: false + type: string + default: '' + extras: + description: "Comma-separated list of extras to sync" + required: false + type: string + default: '' + frozen: + description: "Whether to sync with frozen dependencies" + required: false + type: boolean + default: true + no_python_downloads: + description: "Whether to avoid downloading Python versions" + required: false + type: boolean + default: true + +jobs: + sync: + runs-on: ubuntu-latest + steps: + - name: "Install uv" + uses: astral-sh/setup-uv@v6 + with: + enable-cache: true + + - name: "Build groups args" + id: groups + run: | + args="" + if [ -n "${{ inputs.groups }}" ]; then + IFS=',' read -ra GROUPS <<< "${{ inputs.groups }}" + for group in "${GROUPS[@]}"; do + group=$(echo "$group" | xargs) + [ -n "$group" ] && args="$args --group $(printf %q "$group")" + done + fi + echo "value=$args" >> $GITHUB_OUTPUT + + - name: "Build extras args" + id: extras + run: | + args="" + if [ -n "${{ inputs.extras }}" ]; then + IFS=',' read -ra EXTRAS <<< "${{ inputs.extras }}" + for extra in "${EXTRAS[@]}"; do + extra=$(echo "$extra" | xargs) + [ -n "$extra" ] && args="$args --extra $(printf %q "$extra")" + done + fi + echo "value=$args" >> $GITHUB_OUTPUT + + - name: "Run UV sync" + run: | + cmd="uv sync${{ steps.groups.outputs.value }}${{ steps.extras.outputs.value }}" + echo "Executing: $cmd" + eval "$cmd" + env: + UV_NO_PYTHON_DOWNLOADS: ${{ inputs.no_python_downloads && '1' || '' }} + UV_FROZEN: ${{ inputs.frozen && '1' || '' }} \ No newline at end of file From dd76114ffa8be5836b7f4353d3ce65811b339639 Mon Sep 17 00:00:00 2001 From: Lala Sabathil Date: Wed, 3 Sep 2025 23:37:50 +0200 Subject: [PATCH 02/13] Update lib-checks.yml Signed-off-by: Lala Sabathil --- .github/workflows/lib-checks.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lib-checks.yml b/.github/workflows/lib-checks.yml index 56c7a8c4c4..4f32ea5475 100644 --- a/.github/workflows/lib-checks.yml +++ b/.github/workflows/lib-checks.yml @@ -51,7 +51,7 @@ jobs: with: python-version: "3.13" - name: "Setup UV" - uses: ./.github/workflows/sync-uv.yml + uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@main with: groups: 'dev' - name: "Run ruff linter check" From 93ec750304cf0065e34dd7c892161a2e7889d220 Mon Sep 17 00:00:00 2001 From: Lala Sabathil Date: Wed, 3 Sep 2025 23:39:33 +0200 Subject: [PATCH 03/13] Update sync-uv workflow reference to pycord-next Signed-off-by: Lala Sabathil --- .github/workflows/lib-checks.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/lib-checks.yml b/.github/workflows/lib-checks.yml index 4f32ea5475..d2f26fa256 100644 --- a/.github/workflows/lib-checks.yml +++ b/.github/workflows/lib-checks.yml @@ -34,7 +34,7 @@ jobs: - name: "Checkout Repository" uses: actions/checkout@v5 - name: "Setup UV" - uses: ./.github/workflows/sync-uv.yml + uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@main with: groups: 'dev' - name: "Run codespell" @@ -69,7 +69,7 @@ jobs: with: python-version: "3.13" - name: "Setup UV" - uses: ./.github/workflows/sync-uv.yml + uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@main with: groups: 'dev' - name: "Setup cache" From ba0742f88b5bb882a4a2a5da328c96e3377b1820 Mon Sep 17 00:00:00 2001 From: Lala Sabathil Date: Wed, 3 Sep 2025 23:42:05 +0200 Subject: [PATCH 04/13] Update sync-uv workflow reference in CI configs Replaces local sync-uv.yml workflow references with remote workflow from pycord-development/pycord-next repository in all affected GitHub Actions YAML files. This ensures the latest shared workflow is used for setup steps. --- .github/workflows/docs-checks.yml | 2 +- .github/workflows/docs-localization-download.yml | 2 +- .github/workflows/docs-localization-upload.yml | 2 +- .github/workflows/sync-guild-features.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docs-checks.yml b/.github/workflows/docs-checks.yml index 27bf5d5b67..606f112d1b 100644 --- a/.github/workflows/docs-checks.yml +++ b/.github/workflows/docs-checks.yml @@ -42,7 +42,7 @@ jobs: with: python-version: "3.13" - name: "Setup UV" - uses: ./.github/workflows/sync-uv.yml + uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@main with: groups: 'dev,docs' - name: "Check Links" diff --git a/.github/workflows/docs-localization-download.yml b/.github/workflows/docs-localization-download.yml index bc8c193eb2..e58261b6a3 100644 --- a/.github/workflows/docs-localization-download.yml +++ b/.github/workflows/docs-localization-download.yml @@ -21,7 +21,7 @@ jobs: with: python-version: "3.13" - name: "Setup UV" - uses: ./.github/workflows/sync-uv.yml + uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@main with: groups: 'dev,docs' extras: 'speed,voice' diff --git a/.github/workflows/docs-localization-upload.yml b/.github/workflows/docs-localization-upload.yml index b1d26b6f6a..59b9d5cb9a 100644 --- a/.github/workflows/docs-localization-upload.yml +++ b/.github/workflows/docs-localization-upload.yml @@ -26,7 +26,7 @@ jobs: with: python-version: "3.13" - name: "Setup UV" - uses: ./.github/workflows/sync-uv.yml + uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@main with: groups: 'dev,docs' extras: 'speed,voice' diff --git a/.github/workflows/sync-guild-features.yml b/.github/workflows/sync-guild-features.yml index da63698330..afa8a644af 100644 --- a/.github/workflows/sync-guild-features.yml +++ b/.github/workflows/sync-guild-features.yml @@ -25,7 +25,7 @@ jobs: with: python-version: "3.13" - name: "Setup UV" - uses: ./.github/workflows/sync-uv.yml + uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@main with: groups: 'dev,ci' - name: "Run guild features sync" From 219bee181953fec808ec144da7eb8b21b6d8726c Mon Sep 17 00:00:00 2001 From: Lala Sabathil Date: Wed, 3 Sep 2025 23:44:59 +0200 Subject: [PATCH 05/13] Update sync-uv workflow ref to master branch Changed the reference for pycord-next/.github/workflows/sync-uv.yml from 'main' to 'master' in all relevant GitHub workflow files to ensure correct branch usage for setup steps. --- .github/workflows/docs-checks.yml | 2 +- .github/workflows/docs-localization-download.yml | 2 +- .github/workflows/docs-localization-upload.yml | 2 +- .github/workflows/lib-checks.yml | 6 +++--- .github/workflows/sync-guild-features.yml | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/docs-checks.yml b/.github/workflows/docs-checks.yml index 606f112d1b..da123daa62 100644 --- a/.github/workflows/docs-checks.yml +++ b/.github/workflows/docs-checks.yml @@ -42,7 +42,7 @@ jobs: with: python-version: "3.13" - name: "Setup UV" - uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@main + uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@master with: groups: 'dev,docs' - name: "Check Links" diff --git a/.github/workflows/docs-localization-download.yml b/.github/workflows/docs-localization-download.yml index e58261b6a3..98073fd104 100644 --- a/.github/workflows/docs-localization-download.yml +++ b/.github/workflows/docs-localization-download.yml @@ -21,7 +21,7 @@ jobs: with: python-version: "3.13" - name: "Setup UV" - uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@main + uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@master with: groups: 'dev,docs' extras: 'speed,voice' diff --git a/.github/workflows/docs-localization-upload.yml b/.github/workflows/docs-localization-upload.yml index 59b9d5cb9a..c222cfa205 100644 --- a/.github/workflows/docs-localization-upload.yml +++ b/.github/workflows/docs-localization-upload.yml @@ -26,7 +26,7 @@ jobs: with: python-version: "3.13" - name: "Setup UV" - uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@main + uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@master with: groups: 'dev,docs' extras: 'speed,voice' diff --git a/.github/workflows/lib-checks.yml b/.github/workflows/lib-checks.yml index d2f26fa256..ff66895a71 100644 --- a/.github/workflows/lib-checks.yml +++ b/.github/workflows/lib-checks.yml @@ -34,7 +34,7 @@ jobs: - name: "Checkout Repository" uses: actions/checkout@v5 - name: "Setup UV" - uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@main + uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@master with: groups: 'dev' - name: "Run codespell" @@ -51,7 +51,7 @@ jobs: with: python-version: "3.13" - name: "Setup UV" - uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@main + uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@master with: groups: 'dev' - name: "Run ruff linter check" @@ -69,7 +69,7 @@ jobs: with: python-version: "3.13" - name: "Setup UV" - uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@main + uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@master with: groups: 'dev' - name: "Setup cache" diff --git a/.github/workflows/sync-guild-features.yml b/.github/workflows/sync-guild-features.yml index afa8a644af..8ba9a2c95c 100644 --- a/.github/workflows/sync-guild-features.yml +++ b/.github/workflows/sync-guild-features.yml @@ -25,7 +25,7 @@ jobs: with: python-version: "3.13" - name: "Setup UV" - uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@main + uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@master with: groups: 'dev,ci' - name: "Run guild features sync" From 40ba971bfa87460592b2d69fd3d2b6c07bda7bb4 Mon Sep 17 00:00:00 2001 From: Lala Sabathil Date: Wed, 3 Sep 2025 23:58:44 +0200 Subject: [PATCH 06/13] Refactor UV sync to composite GitHub Action Replaces the workflow-based sync-uv implementation with a reusable composite action in .github/actions/sync-uv/action.yml. Updates all workflows to use the new action for dependency synchronization, improving maintainability and modularity. --- .github/actions/sync-uv/action.yml | 66 ++++++++++++++++++ .github/workflows/docs-checks.yml | 2 +- .../workflows/docs-localization-download.yml | 2 +- .../workflows/docs-localization-upload.yml | 2 +- .github/workflows/lib-checks.yml | 6 +- .github/workflows/sync-guild-features.yml | 2 +- .github/workflows/sync-uv.yml | 68 ------------------- 7 files changed, 73 insertions(+), 75 deletions(-) create mode 100644 .github/actions/sync-uv/action.yml delete mode 100644 .github/workflows/sync-uv.yml diff --git a/.github/actions/sync-uv/action.yml b/.github/actions/sync-uv/action.yml new file mode 100644 index 0000000000..1bf82c6b50 --- /dev/null +++ b/.github/actions/sync-uv/action.yml @@ -0,0 +1,66 @@ +name: 'Sync UV Action' +description: 'Sync UV with specified groups and extras' +author: 'Pycord Development ' +inputs: + groups: + description: "Comma-separated list of groups to sync" + required: false + default: '' + extras: + description: "Comma-separated list of extras to sync" + required: false + default: '' + frozen: + description: "Whether to sync with frozen dependencies" + required: false + default: 'true' + no_python_downloads: + description: "Whether to avoid downloading Python versions" + required: false + default: 'true' + +runs: + using: "composite" + steps: + - name: "Install uv" + uses: astral-sh/setup-uv@v6 + with: + enable-cache: true + + - name: "Build groups args" + shell: bash + id: groups + run: | + args="" + if [ -n "${{ inputs.groups }}" ]; then + IFS=',' read -ra GROUPS <<< "${{ inputs.groups }}" + for group in "${GROUPS[@]}"; do + group=$(echo "$group" | xargs) + [ -n "$group" ] && args="$args --group $(printf %q "$group")" + done + fi + echo "value=$args" >> $GITHUB_OUTPUT + + - name: "Build extras args" + shell: bash + id: extras + run: | + args="" + if [ -n "${{ inputs.extras }}" ]; then + IFS=',' read -ra EXTRAS <<< "${{ inputs.extras }}" + for extra in "${EXTRAS[@]}"; do + extra=$(echo "$extra" | xargs) + [ -n "$extra" ] && args="$args --extra $(printf %q "$extra")" + done + fi + echo "value=$args" >> $GITHUB_OUTPUT + + - name: "Run UV sync" + shell: bash + run: | + cmd="uv sync${{ steps.groups.outputs.value }}${{ steps.extras.outputs.value }}" + echo "Executing: $cmd" + eval "$cmd" + env: + UV_NO_PYTHON_DOWNLOADS: ${{ inputs.no_python_downloads && '1' || '' }} + UV_FROZEN: ${{ inputs.frozen && '1' || '' }} diff --git a/.github/workflows/docs-checks.yml b/.github/workflows/docs-checks.yml index da123daa62..d8b93aa27d 100644 --- a/.github/workflows/docs-checks.yml +++ b/.github/workflows/docs-checks.yml @@ -42,7 +42,7 @@ jobs: with: python-version: "3.13" - name: "Setup UV" - uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@master + uses: ./.github/actions/sync-uv with: groups: 'dev,docs' - name: "Check Links" diff --git a/.github/workflows/docs-localization-download.yml b/.github/workflows/docs-localization-download.yml index 98073fd104..fa60f7cf61 100644 --- a/.github/workflows/docs-localization-download.yml +++ b/.github/workflows/docs-localization-download.yml @@ -21,7 +21,7 @@ jobs: with: python-version: "3.13" - name: "Setup UV" - uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@master + uses: ./.github/actions/sync-uv with: groups: 'dev,docs' extras: 'speed,voice' diff --git a/.github/workflows/docs-localization-upload.yml b/.github/workflows/docs-localization-upload.yml index c222cfa205..3a202d455c 100644 --- a/.github/workflows/docs-localization-upload.yml +++ b/.github/workflows/docs-localization-upload.yml @@ -26,7 +26,7 @@ jobs: with: python-version: "3.13" - name: "Setup UV" - uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@master + uses: ./.github/actions/sync-uv with: groups: 'dev,docs' extras: 'speed,voice' diff --git a/.github/workflows/lib-checks.yml b/.github/workflows/lib-checks.yml index ff66895a71..f6be0eee57 100644 --- a/.github/workflows/lib-checks.yml +++ b/.github/workflows/lib-checks.yml @@ -34,7 +34,7 @@ jobs: - name: "Checkout Repository" uses: actions/checkout@v5 - name: "Setup UV" - uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@master + uses: ./.github/actions/sync-uv with: groups: 'dev' - name: "Run codespell" @@ -51,7 +51,7 @@ jobs: with: python-version: "3.13" - name: "Setup UV" - uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@master + uses: ./.github/actions/sync-uv with: groups: 'dev' - name: "Run ruff linter check" @@ -69,7 +69,7 @@ jobs: with: python-version: "3.13" - name: "Setup UV" - uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@master + uses: ./.github/actions/sync-uv with: groups: 'dev' - name: "Setup cache" diff --git a/.github/workflows/sync-guild-features.yml b/.github/workflows/sync-guild-features.yml index 8ba9a2c95c..a1c7939a5e 100644 --- a/.github/workflows/sync-guild-features.yml +++ b/.github/workflows/sync-guild-features.yml @@ -25,7 +25,7 @@ jobs: with: python-version: "3.13" - name: "Setup UV" - uses: pycord-development/pycord-next/.github/workflows/sync-uv.yml@master + uses: ./.github/actions/sync-uv with: groups: 'dev,ci' - name: "Run guild features sync" diff --git a/.github/workflows/sync-uv.yml b/.github/workflows/sync-uv.yml deleted file mode 100644 index 02b8a9cf3a..0000000000 --- a/.github/workflows/sync-uv.yml +++ /dev/null @@ -1,68 +0,0 @@ -name: Sync UV -on: - workflow_call: - inputs: - groups: - description: "Comma-separated list of groups to sync" - required: false - type: string - default: '' - extras: - description: "Comma-separated list of extras to sync" - required: false - type: string - default: '' - frozen: - description: "Whether to sync with frozen dependencies" - required: false - type: boolean - default: true - no_python_downloads: - description: "Whether to avoid downloading Python versions" - required: false - type: boolean - default: true - -jobs: - sync: - runs-on: ubuntu-latest - steps: - - name: "Install uv" - uses: astral-sh/setup-uv@v6 - with: - enable-cache: true - - - name: "Build groups args" - id: groups - run: | - args="" - if [ -n "${{ inputs.groups }}" ]; then - IFS=',' read -ra GROUPS <<< "${{ inputs.groups }}" - for group in "${GROUPS[@]}"; do - group=$(echo "$group" | xargs) - [ -n "$group" ] && args="$args --group $(printf %q "$group")" - done - fi - echo "value=$args" >> $GITHUB_OUTPUT - - - name: "Build extras args" - id: extras - run: | - args="" - if [ -n "${{ inputs.extras }}" ]; then - IFS=',' read -ra EXTRAS <<< "${{ inputs.extras }}" - for extra in "${EXTRAS[@]}"; do - extra=$(echo "$extra" | xargs) - [ -n "$extra" ] && args="$args --extra $(printf %q "$extra")" - done - fi - echo "value=$args" >> $GITHUB_OUTPUT - - - name: "Run UV sync" - run: | - cmd="uv sync${{ steps.groups.outputs.value }}${{ steps.extras.outputs.value }}" - echo "Executing: $cmd" - eval "$cmd" - env: - UV_NO_PYTHON_DOWNLOADS: ${{ inputs.no_python_downloads && '1' || '' }} - UV_FROZEN: ${{ inputs.frozen && '1' || '' }} \ No newline at end of file From 3e34cc1a2e703e7345b0c0c8375d8097dd3d84ed Mon Sep 17 00:00:00 2001 From: Lala Sabathil Date: Thu, 4 Sep 2025 00:01:49 +0200 Subject: [PATCH 07/13] Fix boolean input handling in sync-uv action Updates environment variable assignment to explicitly check for 'true' string values in inputs.no_python_downloads and inputs.frozen, ensuring correct behavior when setting UV_NO_PYTHON_DOWNLOADS and UV_FROZEN. --- .github/actions/sync-uv/action.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/sync-uv/action.yml b/.github/actions/sync-uv/action.yml index 1bf82c6b50..4fb55ebf71 100644 --- a/.github/actions/sync-uv/action.yml +++ b/.github/actions/sync-uv/action.yml @@ -62,5 +62,5 @@ runs: echo "Executing: $cmd" eval "$cmd" env: - UV_NO_PYTHON_DOWNLOADS: ${{ inputs.no_python_downloads && '1' || '' }} - UV_FROZEN: ${{ inputs.frozen && '1' || '' }} + UV_NO_PYTHON_DOWNLOADS: ${{ inputs.no_python_downloads == 'true' && '1' || '' }} + UV_FROZEN: ${{ inputs.frozen == 'true' && '1' || '' }} From cf1b60db68b7752ba42e957accbc2f700ce659a3 Mon Sep 17 00:00:00 2001 From: Lala Sabathil Date: Thu, 4 Sep 2025 00:04:45 +0200 Subject: [PATCH 08/13] Improve argument building in sync-uv action Refactored the scripts for building group and extra arguments to use explicit if statements for non-empty values and added 'set -x' for debugging. Also added '|| exit 0' to the output commands to prevent failures if output writing fails. --- .github/actions/sync-uv/action.yml | 42 +++++++++++++++++------------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/.github/actions/sync-uv/action.yml b/.github/actions/sync-uv/action.yml index 4fb55ebf71..1bb493e63d 100644 --- a/.github/actions/sync-uv/action.yml +++ b/.github/actions/sync-uv/action.yml @@ -31,29 +31,35 @@ runs: shell: bash id: groups run: | - args="" - if [ -n "${{ inputs.groups }}" ]; then - IFS=',' read -ra GROUPS <<< "${{ inputs.groups }}" - for group in "${GROUPS[@]}"; do - group=$(echo "$group" | xargs) - [ -n "$group" ] && args="$args --group $(printf %q "$group")" - done - fi - echo "value=$args" >> $GITHUB_OUTPUT + set -x + args="" + if [ -n "${{ inputs.groups }}" ]; then + IFS=',' read -ra GROUPS <<< "${{ inputs.groups }}" + for group in "${GROUPS[@]}"; do + group=$(echo "$group" | xargs) + if [ -n "$group" ]; then + args="$args --group $(printf %q "$group")" + fi + done + fi + echo "value=$args" >> $GITHUB_OUTPUT || exit 0 - name: "Build extras args" shell: bash id: extras run: | - args="" - if [ -n "${{ inputs.extras }}" ]; then - IFS=',' read -ra EXTRAS <<< "${{ inputs.extras }}" - for extra in "${EXTRAS[@]}"; do - extra=$(echo "$extra" | xargs) - [ -n "$extra" ] && args="$args --extra $(printf %q "$extra")" - done - fi - echo "value=$args" >> $GITHUB_OUTPUT + set -x + args="" + if [ -n "${{ inputs.extras }}" ]; then + IFS=',' read -ra EXTRAS <<< "${{ inputs.extras }}" + for extra in "${EXTRAS[@]}"; do + extra=$(echo "$extra" | xargs) + if [ -n "$extra" ]; then + args="$args --extra $(printf %q "$extra")" + fi + done + fi + echo "value=$args" >> $GITHUB_OUTPUT || exit 0 - name: "Run UV sync" shell: bash From a4b36afb8ec9a8162b45929a149bb20b1be34d6c Mon Sep 17 00:00:00 2001 From: Lala Sabathil Date: Thu, 4 Sep 2025 00:07:53 +0200 Subject: [PATCH 09/13] Update action.yml --- .github/actions/sync-uv/action.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/sync-uv/action.yml b/.github/actions/sync-uv/action.yml index 1bb493e63d..de739a864f 100644 --- a/.github/actions/sync-uv/action.yml +++ b/.github/actions/sync-uv/action.yml @@ -31,7 +31,7 @@ runs: shell: bash id: groups run: | - set -x + set +e args="" if [ -n "${{ inputs.groups }}" ]; then IFS=',' read -ra GROUPS <<< "${{ inputs.groups }}" @@ -48,7 +48,7 @@ runs: shell: bash id: extras run: | - set -x + set +e args="" if [ -n "${{ inputs.extras }}" ]; then IFS=',' read -ra EXTRAS <<< "${{ inputs.extras }}" From c1a0440f6dc8ee3f1475bace8b5f2adc9f3374c1 Mon Sep 17 00:00:00 2001 From: Paillat-dev Date: Thu, 4 Sep 2025 00:14:51 +0200 Subject: [PATCH 10/13] :green_heart: Use only one bash step so we can safely not use printf --- .github/actions/sync-uv/action.yml | 65 +++++++++++++----------------- 1 file changed, 28 insertions(+), 37 deletions(-) diff --git a/.github/actions/sync-uv/action.yml b/.github/actions/sync-uv/action.yml index de739a864f..ce7e9ab448 100644 --- a/.github/actions/sync-uv/action.yml +++ b/.github/actions/sync-uv/action.yml @@ -27,46 +27,37 @@ runs: with: enable-cache: true - - name: "Build groups args" - shell: bash - id: groups - run: | - set +e - args="" - if [ -n "${{ inputs.groups }}" ]; then - IFS=',' read -ra GROUPS <<< "${{ inputs.groups }}" - for group in "${GROUPS[@]}"; do - group=$(echo "$group" | xargs) - if [ -n "$group" ]; then - args="$args --group $(printf %q "$group")" - fi - done - fi - echo "value=$args" >> $GITHUB_OUTPUT || exit 0 - - - name: "Build extras args" - shell: bash - id: extras - run: | - set +e - args="" - if [ -n "${{ inputs.extras }}" ]; then - IFS=',' read -ra EXTRAS <<< "${{ inputs.extras }}" - for extra in "${EXTRAS[@]}"; do - extra=$(echo "$extra" | xargs) - if [ -n "$extra" ]; then - args="$args --extra $(printf %q "$extra")" - fi - done - fi - echo "value=$args" >> $GITHUB_OUTPUT || exit 0 - - name: "Run UV sync" shell: bash run: | - cmd="uv sync${{ steps.groups.outputs.value }}${{ steps.extras.outputs.value }}" - echo "Executing: $cmd" - eval "$cmd" + cmd_args=("uv" "sync") + + # groups + if [ -n "${{ inputs.groups }}" ]; then + IFS=',' read -ra GROUPS <<< "${{ inputs.groups }}" + for group in "${GROUPS[@]}"; do + group=$(echo "$group" | xargs) + if [ -n "$group" ]; then + cmd_args+=("--group" "$group") + fi + done + fi + echo "Groups: ${GROUPS[*]}" + + # extras + if [ -n "${{ inputs.extras }}" ]; then + IFS=',' read -ra EXTRAS <<< "${{ inputs.extras }}" + for extra in "${EXTRAS[@]}"; do + extra=$(echo "$extra" | xargs) + if [ -n "$extra" ]; then + cmd_args+=("--extra" "$extra") + fi + done + fi + echo "Extras: ${EXTRAS[*]}" + + echo "Executing: ${cmd_args[*]}" + "${cmd_args[@]}" env: UV_NO_PYTHON_DOWNLOADS: ${{ inputs.no_python_downloads == 'true' && '1' || '' }} UV_FROZEN: ${{ inputs.frozen == 'true' && '1' || '' }} From a8a4aefa01bc18895fcb0a7c53185c90b613aacf Mon Sep 17 00:00:00 2001 From: Paillat-dev Date: Thu, 4 Sep 2025 00:17:04 +0200 Subject: [PATCH 11/13] :green_heart: Forgot the set +e --- .github/actions/sync-uv/action.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/actions/sync-uv/action.yml b/.github/actions/sync-uv/action.yml index ce7e9ab448..f46afb6f6a 100644 --- a/.github/actions/sync-uv/action.yml +++ b/.github/actions/sync-uv/action.yml @@ -33,6 +33,7 @@ runs: cmd_args=("uv" "sync") # groups + set +e if [ -n "${{ inputs.groups }}" ]; then IFS=',' read -ra GROUPS <<< "${{ inputs.groups }}" for group in "${GROUPS[@]}"; do @@ -42,9 +43,11 @@ runs: fi done fi + set -e echo "Groups: ${GROUPS[*]}" # extras + set +e if [ -n "${{ inputs.extras }}" ]; then IFS=',' read -ra EXTRAS <<< "${{ inputs.extras }}" for extra in "${EXTRAS[@]}"; do @@ -54,6 +57,7 @@ runs: fi done fi + set -e echo "Extras: ${EXTRAS[*]}" echo "Executing: ${cmd_args[*]}" From fba292e5105d8402bcba4de4e7d462d8661bdee5 Mon Sep 17 00:00:00 2001 From: Paillat-dev Date: Thu, 4 Sep 2025 00:26:43 +0200 Subject: [PATCH 12/13] :green_heart: Use different variable names --- .github/actions/sync-uv/action.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/actions/sync-uv/action.yml b/.github/actions/sync-uv/action.yml index f46afb6f6a..ef14f72ea6 100644 --- a/.github/actions/sync-uv/action.yml +++ b/.github/actions/sync-uv/action.yml @@ -35,8 +35,8 @@ runs: # groups set +e if [ -n "${{ inputs.groups }}" ]; then - IFS=',' read -ra GROUPS <<< "${{ inputs.groups }}" - for group in "${GROUPS[@]}"; do + IFS=',' read -ra PARSED_GROUPS <<< "${{ inputs.groups }}" + for group in "${PARSED_GROUPS[@]}"; do group=$(echo "$group" | xargs) if [ -n "$group" ]; then cmd_args+=("--group" "$group") @@ -44,13 +44,13 @@ runs: done fi set -e - echo "Groups: ${GROUPS[*]}" + echo "Groups: ${PARSED_GROUPS[*]}" # extras set +e if [ -n "${{ inputs.extras }}" ]; then - IFS=',' read -ra EXTRAS <<< "${{ inputs.extras }}" - for extra in "${EXTRAS[@]}"; do + IFS=',' read -ra PARSED_EXTRAS <<< "${{ inputs.extras }}" + for extra in "${PARSED_EXTRAS[@]}"; do extra=$(echo "$extra" | xargs) if [ -n "$extra" ]; then cmd_args+=("--extra" "$extra") @@ -58,10 +58,10 @@ runs: done fi set -e - echo "Extras: ${EXTRAS[*]}" + echo "Extras: ${PARSED_EXTRAS[*]}" echo "Executing: ${cmd_args[*]}" "${cmd_args[@]}" env: UV_NO_PYTHON_DOWNLOADS: ${{ inputs.no_python_downloads == 'true' && '1' || '' }} - UV_FROZEN: ${{ inputs.frozen == 'true' && '1' || '' }} + UV_FROZEN: ${{ inputs.frozen == 'true' && '1' || '' }} \ No newline at end of file From d30604510a15c7db1f89fd9ed77439f4dd443217 Mon Sep 17 00:00:00 2001 From: Paillat-dev Date: Thu, 4 Sep 2025 00:33:25 +0200 Subject: [PATCH 13/13] :memo: Update description of sync-uv composite action --- .github/actions/sync-uv/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/sync-uv/action.yml b/.github/actions/sync-uv/action.yml index ef14f72ea6..8b063855a6 100644 --- a/.github/actions/sync-uv/action.yml +++ b/.github/actions/sync-uv/action.yml @@ -1,5 +1,5 @@ name: 'Sync UV Action' -description: 'Sync UV with specified groups and extras' +description: 'Install and sync UV with specified groups and extras' author: 'Pycord Development ' inputs: groups: