diff --git a/.github/workflows/cd.yaml b/.github/workflows/cd.yaml new file mode 100644 index 0000000000..b2b7bd3a26 --- /dev/null +++ b/.github/workflows/cd.yaml @@ -0,0 +1,77 @@ +name: CD # Continuous Delivery +on: + push: + branches: [develop] +concurrency: ${{ github.workflow }}-${{ github.ref_name }} + +permissions: {} +env: + NX_DEFAULT_OUTPUT_STYLE: static + +jobs: + docker: + name: Docker Bake + runs-on: ubuntu-24.04 + permissions: + id-token: write # needed for signing the images with GitHub OIDC Token + packages: write # needed for publishing packages to GHCR + # Needed for nx-set-shas + contents: read + actions: read + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6 + with: + # We need to fetch all branches and commits so that Nx affected has a base to compare against. + fetch-depth: 0 + # reduce the size of the checkout with tree filtering, + # see https://github.blog/open-source/git/get-up-to-speed-with-partial-clone-and-shallow-clone/ + filter: tree:0 + + - name: Prepare nx + uses: nrwl/nx-set-shas@3e9ad7370203c1e93d109be57f3b72eb0eb511b1 # v4 + with: + main-branch-name: develop + + - name: Install Cosign + uses: sigstore/cosign-installer@398d4b0eeef1380460a10c8013a76f728fb906ac # v3 + + - name: Set up QEMU + uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3 + + - name: Set up Docker Buildx + id: builder + uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3 + + - uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4 + - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6 + with: + node-version-file: package.json + cache: "pnpm" + + - name: Install Deps + run: "pnpm install --frozen-lockfile" + + - name: Login to GitHub Container Registry + uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - run: pnpm nx affected -t docker:build + env: + INPUT_PUSH: true + INPUT_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + INPUT_BUILDER: ${{ steps.builder.outputs.name }} + + - name: Sign the images with GitHub OIDC token + env: + PATTERN: "^ghcr.io/element-hq/element-web*" + run: | + docker image ls --digests --format '{{.Repository}}@{{.Digest}}' | grep "$PATTERN" | while read -r TARGET; do + # Check if digest is valid (not ) + if [[ "$TARGET" != *"@"* ]]; then + echo "Signing $TARGET..." + cosign sign --yes "$TARGET" + fi + done diff --git a/.gitignore b/.gitignore index 90b326d79d..13c5cd70d5 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,7 @@ electron/pub .vscode .vscode/ .env +.env.* /coverage # Auto-generated file /src/modules.js diff --git a/.prettierignore b/.prettierignore index f3f9d63a90..4b6991d3d9 100644 --- a/.prettierignore +++ b/.prettierignore @@ -51,3 +51,4 @@ packages/shared-components/src/i18n/i18nKeys.d.ts packages/shared-components/typedoc/ packages/shared-components/storybook-static/ +/.nx/ diff --git a/package.json b/package.json index 9e640c5816..9f77103e0f 100644 --- a/package.json +++ b/package.json @@ -153,6 +153,7 @@ "@element-hq/element-web-playwright-common-local": "workspace:*", "@fetch-mock/jest": "^0.2.20", "@jest/globals": "^30.2.0", + "@nx-tools/nx-container": "^7.2.1", "@nx/jest": "^22.5.0", "@peculiar/webcrypto": "^1.4.3", "@playwright/test": "catalog:", diff --git a/packages/playwright-common/package.json b/packages/playwright-common/package.json index 26b5447f70..be506ef6e6 100644 --- a/packages/playwright-common/package.json +++ b/packages/playwright-common/package.json @@ -16,6 +16,7 @@ "playwright-screenshots-experimental": "playwright-screenshots.sh" }, "devDependencies": { + "@playwright/test": "catalog:", "wait-on": "^9.0.4" } } diff --git a/packages/playwright-common/playwright-screenshots.sh b/packages/playwright-common/playwright-screenshots.sh index 8e2bb9306b..fc907c955d 100755 --- a/packages/playwright-common/playwright-screenshots.sh +++ b/packages/playwright-common/playwright-screenshots.sh @@ -2,19 +2,24 @@ set -e -# Handle symlinks here as we tend to be executed as an npm binary -SCRIPT_PATH=$(readlink -f "$0") -SCRIPT_DIR=$(dirname "$SCRIPT_PATH") +function build_image() { + local IMAGE_NAME="$1" + # Handle symlinks here as we tend to be executed as an npm binary + local SCRIPT_PATH=$(readlink -f "$0") + local SCRIPT_DIR=$(dirname "$SCRIPT_PATH") + + echo "Building $IMAGE_NAME image in $SCRIPT_DIR" + docker build -t "$IMAGE_NAME" --build-arg "PLAYWRIGHT_VERSION=${IMAGE_NAME#*:}" "$SCRIPT_DIR" +} -IMAGE_NAME="element-web-playwright-server" WS_PORT=3000 # Check the playwright version -PW_VERSION=$(npm exec --silent -- playwright --version | gcut -d" " -f2) -echo "Building $IMAGE_NAME:$PW_VERSION image in $SCRIPT_DIR" +PW_VERSION=$(pnpm --silent -- playwright --version | awk '{print $2}') +IMAGE_NAME="ghcr.io/element-hq/element-web/playwright-server:$PW_VERSION" -# Build the image -docker build -t "$IMAGE_NAME" --build-arg "PLAYWRIGHT_VERSION=$PW_VERSION" "$SCRIPT_DIR" +# Pull the image, failing that build the image +docker pull "$IMAGE_NAME" 2>/dev/null || build_image "$IMAGE_NAME" # Start the playwright-server in docker CONTAINER=$(docker run --network=host --rm -d -e PORT="$WS_PORT" "$IMAGE_NAME") diff --git a/packages/playwright-common/project.json b/packages/playwright-common/project.json new file mode 100644 index 0000000000..00db7a7534 --- /dev/null +++ b/packages/playwright-common/project.json @@ -0,0 +1,31 @@ +{ + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "root": "packages/playwright-common", + "targets": { + "docker:prebuild": { + "cache": true, + "command": "echo PLAYWRIGHT_VERSION=$(pnpm --silent -- playwright --version | awk '{print $2}') > .env.docker:build", + "inputs": [{ "runtime": "pnpm --silent -- playwright --version" }], + "outputs": ["{projectRoot}/.env.docker:build"], + "options": { "cwd": "packages/playwright-common" } + }, + "docker:build": { + "executor": "@nx-tools/nx-container:build", + "dependsOn": ["docker:prebuild"], + "options": { + "load": true, + "engine": "docker", + "platforms": ["linux/amd64", "linux/arm64"], + "provenance": "true", + "sbom": true, + "build-args": ["PLAYWRIGHT_VERSION=$PLAYWRIGHT_VERSION"], + "context": "packages/playwright-common", + "metadata": { + "images": ["ghcr.io/element-hq/element-web/playwright-server"], + "tags": ["type=raw,enable=true,value=$PLAYWRIGHT_VERSION"] + } + } + } + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bf1e820abc..936da2ebc3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -376,6 +376,9 @@ importers: '@jest/globals': specifier: ^30.2.0 version: 30.2.0 + '@nx-tools/nx-container': + specifier: ^7.2.1 + version: 7.2.1(@nx/devkit@22.5.1(nx@22.5.1))(@nx/js@22.5.1(@babel/traverse@7.29.0)(nx@22.5.1))(dotenv@17.3.1)(nx@22.5.1)(tslib@2.8.1) '@nx/jest': specifier: ^22.5.0 version: 22.5.1(@babel/traverse@7.29.0)(@types/node@22.19.11)(babel-plugin-macros@3.1.0)(nx@22.5.1)(typescript@5.9.3) @@ -724,6 +727,9 @@ importers: packages/playwright-common: devDependencies: + '@playwright/test': + specifier: 'catalog:' + version: 1.58.2 wait-on: specifier: ^9.0.4 version: 9.0.4 @@ -929,6 +935,15 @@ packages: '@action-validator/core@0.6.0': resolution: {integrity: sha512-tPglwCr8Mm8SWzwnVewwFmqRx91F0WvMsM0BRAqH4CLalyGndm53Xvp+UcUSzswpk1wkjIDYI7RyEhWMLyPkig==} + '@actions/github@6.0.1': + resolution: {integrity: sha512-xbZVcaqD4XnQAe35qSQqskb3SqIAfRyLBrHMd/8TuL7hJSz2QtbDwnNM8zWx4zO5l2fnGtseNE3MbEvD7BxVMw==} + + '@actions/http-client@2.2.3': + resolution: {integrity: sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA==} + + '@actions/io@1.1.3': + resolution: {integrity: sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==} + '@adobe/css-tools@4.4.4': resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} @@ -2205,6 +2220,10 @@ packages: resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@fastify/busboy@2.1.1': + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + '@fetch-mock/jest@0.2.20': resolution: {integrity: sha512-DGX2bhBInodaWPMV3+UZ530aVM3wDj16sAPjFzkrwb0JwNWIQK07CNbYprQ3Tmd2ixDJeaNx2E0aNb+hRb8FFA==} engines: {node: '>=18.11.0'} @@ -2707,6 +2726,36 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@nx-tools/ci-context@7.2.1': + resolution: {integrity: sha512-w1w3AYZbIM+yOcOqFQ2E5nzzg9GCgSZ5bFhVflL6o5UmucrW7Sb4LHeLqSFSa4gUaGN0kWnmDNH/dlF9u8Ngqg==} + engines: {node: '>=20.19.0 <21 || >=22.12.0 <23 || >=24.0.0'} + peerDependencies: + tslib: ^2.6.0 + + '@nx-tools/container-metadata@7.2.1': + resolution: {integrity: sha512-cXFJeVCwfeFlPZAoYgN013B6tf9b1P9wdVllHWTDn+v4gMHYcQ0DmySteZeD41ain1III3bHQZL+vc7Js3XHSA==} + engines: {node: '>=20.19.0 <21 || >=22.12.0 <23 || >=24.0.0'} + peerDependencies: + '@nx/devkit': '>=18.0.0 <23.0.0' + tslib: ^2.6.0 + + '@nx-tools/core@7.2.1': + resolution: {integrity: sha512-zuZJ2eQ9E8vCqPCO/M4gvGM5Pj2gdU5XvFXXVifFs1v5tKaC7ainayLoH2sdodMTMRMyzXl1E6F4OvVrrESEsg==} + engines: {node: '>=20.19.0 <21 || >=22.12.0 <23 || >=24.0.0'} + peerDependencies: + '@nx/devkit': '>=18.0.0 <23.0.0' + tslib: ^2.6.0 + + '@nx-tools/nx-container@7.2.1': + resolution: {integrity: sha512-S1IdAwPqCnPw1mj49QvpJAM350j/xug+VU/1xJ0f/Keq+9G3b1OnTi/EoB6PwhNLWM0QY6PXQ/enpGS5SFdbtQ==} + engines: {node: '>=20.19.0 <21 || >=22.12.0 <23 || >=24.0.0'} + peerDependencies: + '@nx/devkit': '>=18.0.0 <23.0.0' + '@nx/js': '>=18.0.0 <23.0.0' + dotenv: '>=16.0.0' + nx: '>=18.0.0 <23.0.0' + tslib: ^2.6.0 + '@nx/devkit@22.5.1': resolution: {integrity: sha512-1ZJ8pCB+6EWC8X6q8tfBweg92WzFAwliBhtBkOPP8Li8GQq71ulPWRdY4lDd5pH3Ea1zKqhOtBKWdOlyDPOKYA==} peerDependencies: @@ -2780,6 +2829,57 @@ packages: '@nx/workspace@22.5.1': resolution: {integrity: sha512-IZJ440ITiNpswacrTGGpo46adOszLAAZM9RYYvQg5ak8kZDmmrskTm0SWWVgZCuiJazw8s23vqDLQ07TN/t1NQ==} + '@octokit/auth-token@4.0.0': + resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} + engines: {node: '>= 18'} + + '@octokit/core@5.2.2': + resolution: {integrity: sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==} + engines: {node: '>= 18'} + + '@octokit/endpoint@9.0.6': + resolution: {integrity: sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==} + engines: {node: '>= 18'} + + '@octokit/graphql@7.1.1': + resolution: {integrity: sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==} + engines: {node: '>= 18'} + + '@octokit/openapi-types@20.0.0': + resolution: {integrity: sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==} + + '@octokit/openapi-types@22.2.0': + resolution: {integrity: sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==} + + '@octokit/openapi-types@24.2.0': + resolution: {integrity: sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==} + + '@octokit/plugin-paginate-rest@9.2.2': + resolution: {integrity: sha512-u3KYkGF7GcZnSD/3UP0S7K5XUFT2FkOQdcfXZGZQPGv3lm4F2Xbf71lvjldr8c1H3nNbF+33cLEkWYbokGWqiQ==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '5' + + '@octokit/plugin-rest-endpoint-methods@10.4.1': + resolution: {integrity: sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '5' + + '@octokit/request-error@5.1.1': + resolution: {integrity: sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==} + engines: {node: '>= 18'} + + '@octokit/request@8.4.1': + resolution: {integrity: sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==} + engines: {node: '>= 18'} + + '@octokit/types@12.6.0': + resolution: {integrity: sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==} + + '@octokit/types@13.10.0': + resolution: {integrity: sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==} + '@opentelemetry/api-logs@0.208.0': resolution: {integrity: sha512-CjruKY9V6NMssL/T1kAFgzosF1v9o6oeN+aX5JB/C/xPNtmgIJqcXHG7fA82Ou1zCpWGl4lROQUKwUNE1pMCyg==} engines: {node: '>=8.0.0'} @@ -3441,6 +3541,10 @@ packages: '@radix-ui/rect@1.1.1': resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + '@renovatebot/pep440@4.2.1': + resolution: {integrity: sha512-2FK1hF93Fuf1laSdfiEmJvSJPVIDHEUTz68D3Fi9s0IZrrpaEcj6pTFBTbYvsgC5du4ogrtf5re7yMMvrKNgkw==} + engines: {node: ^20.9.0 || ^22.11.0 || ^24, pnpm: ^10.0.0} + '@rolldown/pluginutils@1.0.0-rc.3': resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==} @@ -5084,6 +5188,9 @@ packages: bcrypt-pbkdf@1.0.2: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + before-after-hook@2.2.3: + resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} + big.js@5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} @@ -5687,6 +5794,9 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + csv-parse@5.6.0: + resolution: {integrity: sha512-l3nz3euub2QMg5ouu5U09Ew9Wf6/wQ8I++ch1loQ0ljmzhmfZYrH9fflS22i/PQEvsPvxCwxgz5q7UB8K1JO4Q==} + cuint@0.2.2: resolution: {integrity: sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==} @@ -5808,6 +5918,9 @@ packages: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} + deprecation@2.3.1: + resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} + dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -6705,6 +6818,11 @@ packages: handle-thing@2.0.1: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} + handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true + harmony-reflect@1.6.2: resolution: {integrity: sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==} @@ -7930,6 +8048,12 @@ packages: engines: {node: '>=8'} hasBin: true + moment-timezone@0.5.48: + resolution: {integrity: sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw==} + + moment@2.30.1: + resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} + moo-color@1.0.3: resolution: {integrity: sha512-i/+ZKXMDf6aqYtBhuOcej71YSlbjT3wCO/4H1j8rPvxDJEifdwgg5MaFyu6iYAT8GBZJg2z0dkgK4YMzvURALQ==} @@ -8814,6 +8938,9 @@ packages: proper-lockfile@4.1.2: resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} + properties-file@3.6.4: + resolution: {integrity: sha512-oRVnENV7YP9aYRrjSmYptqFiDpbPy4SuTvW1mKvs4ZCi4QWhJSvOOHIWsyScFsfOwTQ2fynFZ3uG8un2Hm1XjA==} + properties-reader@2.3.0: resolution: {integrity: sha512-z597WicA7nDZxK12kZqHr2TcvwNU1GCfA5UwfDY/HDp3hXPoPlb5rlEx9bwGTiJnc0OqbBTkU975jDToth8Gxw==} engines: {node: '>=14'} @@ -9953,6 +10080,10 @@ packages: tty-browserify@0.0.1: resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} + tunnel@0.0.6: + resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} + engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} + tweetnacl@0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} @@ -10048,6 +10179,11 @@ packages: ufo@1.6.3: resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} + uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} + engines: {node: '>=0.8.0'} + hasBin: true + unbox-primitive@1.1.0: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} @@ -10064,6 +10200,10 @@ packages: undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + undici@5.29.0: + resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} + engines: {node: '>=14.0'} + undici@7.20.0: resolution: {integrity: sha512-MJZrkjyd7DeC+uPZh+5/YaMDxFiiEEaDgbUSVMXayofAkDWF1088CDo+2RPg7B1BuS1qf1vgNE7xqwPxE0DuSQ==} engines: {node: '>=20.18.1'} @@ -10091,6 +10231,9 @@ packages: resolution: {integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==} engines: {node: '>=20'} + universal-user-agent@6.0.1: + resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} + universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} @@ -10520,6 +10663,9 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -10641,6 +10787,23 @@ snapshots: '@action-validator/core@0.6.0': {} + '@actions/github@6.0.1': + dependencies: + '@actions/http-client': 2.2.3 + '@octokit/core': 5.2.2 + '@octokit/plugin-paginate-rest': 9.2.2(@octokit/core@5.2.2) + '@octokit/plugin-rest-endpoint-methods': 10.4.1(@octokit/core@5.2.2) + '@octokit/request': 8.4.1 + '@octokit/request-error': 5.1.1 + undici: 5.29.0 + + '@actions/http-client@2.2.3': + dependencies: + tunnel: 0.0.6 + undici: 5.29.0 + + '@actions/io@1.1.3': {} + '@adobe/css-tools@4.4.4': {} '@asamuzakjp/css-color@3.2.0': @@ -12038,6 +12201,8 @@ snapshots: '@eslint/js@8.57.1': {} + '@fastify/busboy@2.1.1': {} + '@fetch-mock/jest@0.2.20(@jest/globals@30.2.0)(jest@30.2.0(@types/node@22.19.11)(babel-plugin-macros@3.1.0))': dependencies: '@jest/globals': 30.2.0 @@ -12708,6 +12873,53 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 + '@nx-tools/ci-context@7.2.1(@nx/devkit@22.5.1(nx@22.5.1))(tslib@2.8.1)': + dependencies: + '@actions/github': 6.0.1 + '@nx-tools/core': 7.2.1(@nx/devkit@22.5.1(nx@22.5.1))(tslib@2.8.1) + '@octokit/openapi-types': 22.2.0 + properties-file: 3.6.4 + std-env: 3.10.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@nx/devkit' + + '@nx-tools/container-metadata@7.2.1(@nx/devkit@22.5.1(nx@22.5.1))(tslib@2.8.1)': + dependencies: + '@nx-tools/ci-context': 7.2.1(@nx/devkit@22.5.1(nx@22.5.1))(tslib@2.8.1) + '@nx-tools/core': 7.2.1(@nx/devkit@22.5.1(nx@22.5.1))(tslib@2.8.1) + '@nx/devkit': 22.5.1(nx@22.5.1) + '@renovatebot/pep440': 4.2.1 + csv-parse: 5.6.0 + handlebars: 4.7.8 + moment-timezone: 0.5.48 + semver: 7.7.4 + tslib: 2.8.1 + + '@nx-tools/core@7.2.1(@nx/devkit@22.5.1(nx@22.5.1))(tslib@2.8.1)': + dependencies: + '@actions/io': 1.1.3 + '@nx/devkit': 22.5.1(nx@22.5.1) + csv-parse: 5.6.0 + std-env: 3.10.0 + tinyexec: 1.0.2 + tinyrainbow: 3.0.3 + tslib: 2.8.1 + + '@nx-tools/nx-container@7.2.1(@nx/devkit@22.5.1(nx@22.5.1))(@nx/js@22.5.1(@babel/traverse@7.29.0)(nx@22.5.1))(dotenv@17.3.1)(nx@22.5.1)(tslib@2.8.1)': + dependencies: + '@nx-tools/container-metadata': 7.2.1(@nx/devkit@22.5.1(nx@22.5.1))(tslib@2.8.1) + '@nx-tools/core': 7.2.1(@nx/devkit@22.5.1(nx@22.5.1))(tslib@2.8.1) + '@nx/devkit': 22.5.1(nx@22.5.1) + '@nx/js': 22.5.1(@babel/traverse@7.29.0)(nx@22.5.1) + csv-parse: 5.6.0 + dotenv: 17.3.1 + handlebars: 4.7.8 + nx: 22.5.1 + semver: 7.7.4 + tmp: 0.2.5 + tslib: 2.8.1 + '@nx/devkit@22.5.1(nx@22.5.1)': dependencies: '@zkochan/js-yaml': 0.0.7 @@ -12833,6 +13045,66 @@ snapshots: - '@swc/core' - debug + '@octokit/auth-token@4.0.0': {} + + '@octokit/core@5.2.2': + dependencies: + '@octokit/auth-token': 4.0.0 + '@octokit/graphql': 7.1.1 + '@octokit/request': 8.4.1 + '@octokit/request-error': 5.1.1 + '@octokit/types': 13.10.0 + before-after-hook: 2.2.3 + universal-user-agent: 6.0.1 + + '@octokit/endpoint@9.0.6': + dependencies: + '@octokit/types': 13.10.0 + universal-user-agent: 6.0.1 + + '@octokit/graphql@7.1.1': + dependencies: + '@octokit/request': 8.4.1 + '@octokit/types': 13.10.0 + universal-user-agent: 6.0.1 + + '@octokit/openapi-types@20.0.0': {} + + '@octokit/openapi-types@22.2.0': {} + + '@octokit/openapi-types@24.2.0': {} + + '@octokit/plugin-paginate-rest@9.2.2(@octokit/core@5.2.2)': + dependencies: + '@octokit/core': 5.2.2 + '@octokit/types': 12.6.0 + + '@octokit/plugin-rest-endpoint-methods@10.4.1(@octokit/core@5.2.2)': + dependencies: + '@octokit/core': 5.2.2 + '@octokit/types': 12.6.0 + + '@octokit/request-error@5.1.1': + dependencies: + '@octokit/types': 13.10.0 + deprecation: 2.3.1 + once: 1.4.0 + + '@octokit/request@8.4.1': + dependencies: + '@octokit/endpoint': 9.0.6 + '@octokit/request-error': 5.1.1 + '@octokit/types': 13.10.0 + universal-user-agent: 6.0.1 + + '@octokit/types@12.6.0': + dependencies: + '@octokit/openapi-types': 20.0.0 + + '@octokit/types@13.10.0': + dependencies: + '@octokit/openapi-types': 24.2.0 + '@opentelemetry/api-logs@0.208.0': dependencies: '@opentelemetry/api': 1.9.0 @@ -13464,6 +13736,8 @@ snapshots: '@radix-ui/rect@1.1.1': {} + '@renovatebot/pep440@4.2.1': {} + '@rolldown/pluginutils@1.0.0-rc.3': {} '@rollup/plugin-inject@5.0.5(rollup@4.57.1(patch_hash=603340e49399c6044e41a3998891667387d5ec1acbd38d4e5862f2ba3ef58de8))': @@ -15281,6 +15555,8 @@ snapshots: dependencies: tweetnacl: 0.14.5 + before-after-hook@2.2.3: {} + big.js@5.2.2: {} binary-extensions@2.3.0: {} @@ -15966,6 +16242,8 @@ snapshots: csstype@3.2.3: {} + csv-parse@5.6.0: {} + cuint@0.2.2: {} damerau-levenshtein@1.0.8: {} @@ -16058,6 +16336,8 @@ snapshots: depd@2.0.0: {} + deprecation@2.3.1: {} + dequal@2.0.3: {} des.js@1.1.0: @@ -17223,6 +17503,15 @@ snapshots: handle-thing@2.0.1: {} + handlebars@4.7.8: + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.19.3 + harmony-reflect@1.6.2: {} has-bigints@1.1.0: {} @@ -18739,6 +19028,12 @@ snapshots: requirejs: 2.3.8 yargs: 15.4.1 + moment-timezone@0.5.48: + dependencies: + moment: 2.30.1 + + moment@2.30.1: {} + moo-color@1.0.3: dependencies: color-name: 1.1.4 @@ -19750,6 +20045,8 @@ snapshots: retry: 0.12.0 signal-exit: 3.0.7 + properties-file@3.6.4: {} + properties-reader@2.3.0: dependencies: mkdirp: 1.0.4 @@ -21178,6 +21475,8 @@ snapshots: tty-browserify@0.0.1: {} + tunnel@0.0.6: {} + tweetnacl@0.14.5: {} type-check@0.4.0: @@ -21272,6 +21571,9 @@ snapshots: ufo@1.6.3: {} + uglify-js@3.19.3: + optional: true + unbox-primitive@1.1.0: dependencies: call-bound: 1.0.4 @@ -21288,6 +21590,10 @@ snapshots: undici-types@7.16.0: optional: true + undici@5.29.0: + dependencies: + '@fastify/busboy': 2.1.1 + undici@7.20.0: {} unhomoglyph@1.0.6: {} @@ -21305,6 +21611,8 @@ snapshots: unicorn-magic@0.4.0: {} + universal-user-agent@6.0.1: {} + universalify@2.0.1: {} unpartial@1.0.5: {} @@ -21876,6 +22184,8 @@ snapshots: word-wrap@1.2.5: {} + wordwrap@1.0.0: {} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0