diff --git a/.tekton/odh-workbench-codeserver-datascience-cpu-py312-ubi9-pull-request.yaml b/.tekton/odh-workbench-codeserver-datascience-cpu-py312-ubi9-pull-request.yaml index f0636c16a3..442cbd81be 100644 --- a/.tekton/odh-workbench-codeserver-datascience-cpu-py312-ubi9-pull-request.yaml +++ b/.tekton/odh-workbench-codeserver-datascience-cpu-py312-ubi9-pull-request.yaml @@ -87,8 +87,6 @@ spec: type: npm - path: codeserver/ubi9-python-3.12/prefetch-input/code-server/lib/vscode/extensions/debug-server-ready type: npm - - path: codeserver/ubi9-python-3.12/prefetch-input/code-server/lib/vscode/extensions/emmet - type: npm - path: codeserver/ubi9-python-3.12/prefetch-input/code-server/lib/vscode/extensions/extension-editing type: npm - path: codeserver/ubi9-python-3.12/prefetch-input/code-server/lib/vscode/extensions/git @@ -165,13 +163,39 @@ spec: type: npm - path: codeserver/ubi9-python-3.12/prefetch-input/code-server type: npm - # patches/ + # patches/ overlay (overwrites code-server at build); use these so Cachi2 prefetches registry-only lockfiles - path: codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode type: npm + - path: codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/remote + type: npm + - path: codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/extensions + type: npm + - path: codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/extensions/emmet + type: npm - path: codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/test type: npm - path: codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/extensions/microsoft-authentication type: npm + # Registry-only npm deps (ProdSec); @parcel/watcher, @emmetio/css-parser, @playwright/browser-chromium in custom-packages/package.json + - path: codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/custom-packages + type: npm + taskRunSpecs: + - pipelineTaskName: prefetch-dependencies + computeResources: + requests: + cpu: "8" + memory: "32Gi" + limits: + cpu: "8" + memory: "32Gi" + - pipelineTaskName: build-images + computeResources: + requests: + cpu: "8" + memory: "32Gi" + limits: + cpu: "8" + memory: "32Gi" pipelineRef: name: multiarch-combined-pipeline taskRunTemplate: diff --git a/.tekton/odh-workbench-codeserver-datascience-cpu-py312-ubi9-push.yaml b/.tekton/odh-workbench-codeserver-datascience-cpu-py312-ubi9-push.yaml index 113f4ad11d..d4a263f400 100644 --- a/.tekton/odh-workbench-codeserver-datascience-cpu-py312-ubi9-push.yaml +++ b/.tekton/odh-workbench-codeserver-datascience-cpu-py312-ubi9-push.yaml @@ -84,8 +84,6 @@ spec: type: npm - path: codeserver/ubi9-python-3.12/prefetch-input/code-server/lib/vscode/extensions/debug-server-ready type: npm - - path: codeserver/ubi9-python-3.12/prefetch-input/code-server/lib/vscode/extensions/emmet - type: npm - path: codeserver/ubi9-python-3.12/prefetch-input/code-server/lib/vscode/extensions/extension-editing type: npm - path: codeserver/ubi9-python-3.12/prefetch-input/code-server/lib/vscode/extensions/git @@ -162,14 +160,40 @@ spec: type: npm - path: codeserver/ubi9-python-3.12/prefetch-input/code-server type: npm - # patches/ + # patches/ overlay (codeserver/ubi9-python-3.12/prefetch-input/patches/) — Cachi2 prefetches registry-only lockfiles; keep in sync with patches that have package.json - path: codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode type: npm + - path: codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/remote + type: npm + - path: codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/extensions + type: npm + - path: codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/extensions/emmet + type: npm - path: codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/test type: npm - path: codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/extensions/microsoft-authentication type: npm + # Registry-only npm deps (ProdSec); @parcel/watcher, @emmetio/css-parser, @playwright/browser-chromium in custom-packages/package.json + - path: codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/custom-packages + type: npm + taskRunSpecs: + - pipelineTaskName: prefetch-dependencies + computeResources: + requests: + cpu: "8" + memory: "32Gi" + limits: + cpu: "8" + memory: "32Gi" + - pipelineTaskName: build-images + computeResources: + requests: + cpu: "8" + memory: "32Gi" + limits: + cpu: "8" + memory: "32Gi" pipelineRef: name: multiarch-combined-pipeline taskRunTemplate: diff --git a/Makefile b/Makefile index aaa7a893fd..e34dec2fa5 100644 --- a/Makefile +++ b/Makefile @@ -96,7 +96,7 @@ define build_image $(info # Building $(IMAGE_NAME) using $(DOCKERFILE_NAME) with $(CONF_FILE) and $(BUILD_ARGS)...) @if [ -d '$(BUILD_DIR)prefetch-input' ] && [ ! -d cachi2/output ]; then \ - echo "Prefetch required for hermetic build. Run: scripts/lockfile-generators/prefetch-all.sh --component-dir $(patsubst %/,%,$(BUILD_DIR)) — see scripts/lockfile-generators/README.md"; \ + echo "Prefetch required for hermetic build. Run: scripts/lockfile-generators/prefetch-all.sh --component-dir $(patsubst %/,%,$(BUILD_DIR)) -- see scripts/lockfile-generators/README.md"; \ exit 1; \ fi $(ROOT_DIR)/scripts/sandbox.py --dockerfile '$(2)' --platform '$(BUILD_ARCH)' -- \ diff --git a/codeserver/ubi9-python-3.12/Dockerfile.cpu b/codeserver/ubi9-python-3.12/Dockerfile.cpu index 7437726746..687082dea7 100644 --- a/codeserver/ubi9-python-3.12/Dockerfile.cpu +++ b/codeserver/ubi9-python-3.12/Dockerfile.cpu @@ -57,12 +57,11 @@ ARG CODESERVER_VERSION=v4.106.3 # [HERMETIC] Import GPG keys for prefetched RPM verification. # CentOS key needed because libX11-devel comes from CentOS Stream repos. -RUN rpm --import /cachi2/output/deps/generic/RPM-GPG-KEY-EPEL-9 RUN rpm --import /cachi2/output/deps/generic/RPM-GPG-KEY-CentOS-Official RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release # [HERMETIC] Configure package repos: local hermeto repos for testing, or enable nodejs:22 module for Konflux. -# Hermeto organises RPMs into per-arch sub-repos (baseos, epel, crb, ubi-*, …), each with +# Hermeto organises RPMs into per-arch sub-repos (baseos, crb, ubi-*, …), each with # its own repodata/. The generated hermeto.repo already points at the correct file:// paths. RUN if [ "${LOCAL_BUILD}" = "true" ]; then \ rm -f /etc/yum.repos.d/* && \ @@ -73,18 +72,12 @@ RUN if [ "${LOCAL_BUILD}" = "true" ]; then \ fi; # libxkbfile-devel = util-macros + libxkbfile (Previously built from source) -# [HERMETIC] Install nfpm (RPM packager) from prefetched RPM RUN dnf install -y \ nodejs nodejs-devel npm \ jq patch libtool rsync gettext gcc-toolset-14 gcc-toolset-14-libatomic-devel \ - krb5-devel libX11-devel libxkbfile-devel \ - /cachi2/output/deps/generic/nfpm-2.44.1-1.$(uname -m).rpm && \ + krb5-devel libX11-devel libxkbfile-devel && \ dnf clean all -# There was limitation on Hermeto, it can't fetch npm packages using git/ssh protocol. -# To work around this, need to fetch some npm packages as generic artifacts and copy to npm directory. -RUN cp /cachi2/output/deps/generic/npm/* /cachi2/output/deps/npm/ - # [HERMETIC] Git metadata needed by code-server's build scripts (version detection, submodules). COPY .git /root/.git # [HERMETIC] Rewrite script: used by setup-offline-binaries.sh to rewrite npm @@ -104,15 +97,16 @@ COPY ${CODESERVER_CONTEXT}/prefetch-input/patches/tweak-gha.sh ${CODESERVER_SOUR COPY ${CODESERVER_CONTEXT}/prefetch-input/patches/apply-patch.sh ${CODESERVER_SOURCE_CODE}/ # [HERMETIC] apply-patch.sh (formerly get_code_server_rpm.sh) was simplified: it now only -# enables gcc-toolset-14 and applies patches (nfpm is installed above). The actual -# npm ci/build/release steps are done below in separate RUN commands for better caching. +# enables gcc-toolset-14 and applies patches. The actual npm ci/build/release steps are +# done below in separate RUN commands for better caching. RUN cd ${CODESERVER_SOURCE_CODE} && GHA_BUILD="${GHA_BUILD}" ./apply-patch.sh # [HERMETIC] Step 1: npm ci --offline (install all npm dependencies from local cache). # setup-offline-binaries.sh does all offline preparation in one shot: # - sources codeserver-offline-env.sh (ELECTRON_SKIP_BINARY_DOWNLOAD, NPM_CONFIG_NODEDIR, etc.) -# - populates node-gyp header cache (22.20.0 for VS Code remote), ripgrep, VSCode extensions -# - pre-populates .build/node/ and .build/builtInExtensions/ so gulp skips network downloads +# - node-gyp uses system headers (NPM_CONFIG_NODEDIR=/usr from nodejs-devel RPM) +# - ripgrep, .vsix extensions from cachi2 generic; .build/node/ = system /usr/bin/node (per-arch) +# - pre-populates .build/builtInExtensions/ so gulp skips network downloads # - rewrites package-lock.json "resolved" URLs to file:///cachi2/... # CI=1 makes ci/dev/postinstall.sh run "npm ci" (not "npm install") in subdirs, # so resolved URLs stay absolute (file:///cachi2/...) and lockfiles are never modified. @@ -138,12 +132,6 @@ RUN . ${CODESERVER_SOURCE_CODE}/patches/codeserver-offline-env.sh && \ export KEEP_MODULES=1 && cd ${CODESERVER_SOURCE_PREFETCH} && \ npm run release:standalone -# [HERMETIC] Step 5: Package into RPM using nfpm (installed from prefetched RPM). -RUN . ${CODESERVER_SOURCE_CODE}/patches/codeserver-offline-env.sh && cd ${CODESERVER_SOURCE_PREFETCH} && \ - VERSION=${CODESERVER_VERSION/v/} npm run package && \ - ls -alh release-packages/ && \ - mv release-packages/code-server-${CODESERVER_VERSION/v/}-*.rpm /tmp/ - # Sentinel file: downstream stages use COPY --from=rpm-base /tmp/control to wait for this stage. RUN echo "done" > /tmp/control @@ -170,11 +158,10 @@ ARG LOCAL_BUILD ARG CODESERVER_SOURCE_CODE=codeserver/ubi9-python-3.12 ARG PYLOCK_FLAVOR -# [HERMETIC] Import GPG keys for EPEL, Red Hat, and CentOS repos (needed for dnf to verify prefetched RPMs). -# EPEL + CentOS keys are prefetched as generic artifacts (see artifacts.in.yaml). +# [HERMETIC] Import GPG keys for Red Hat and CentOS repos (needed for dnf to verify prefetched RPMs). +# CentOS key is prefetched as a generic artifact (see artifacts.in.yaml). # UBI9 images only ship the Red Hat key; CentOS key is needed for ppc64le/s390x packages # from CentOS Stream repos (mesa-libGL, etc.). -RUN rpm --import /cachi2/output/deps/generic/RPM-GPG-KEY-EPEL-9 RUN rpm --import /cachi2/output/deps/generic/RPM-GPG-KEY-CentOS-Official RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release @@ -254,12 +241,11 @@ USER 0 # [HERMETIC] Import GPG keys for prefetched RPM verification. # CentOS key needed because mesa-libGL comes from CentOS Stream repos. -RUN rpm --import /cachi2/output/deps/generic/RPM-GPG-KEY-EPEL-9 RUN rpm --import /cachi2/output/deps/generic/RPM-GPG-KEY-CentOS-Official RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release # [HERMETIC] Configure package repos: local hermeto repos for testing, or enable nodejs:22 module for Konflux. -# Hermeto organises RPMs into per-arch sub-repos (baseos, epel, crb, ubi-*, …), each with +# Hermeto organises RPMs into per-arch sub-repos (baseos, crb, ubi-*, …), each with # its own repodata/. The generated hermeto.repo already points at the correct file:// paths. RUN if [ "${LOCAL_BUILD}" = "true" ]; then \ rm -f /etc/yum.repos.d/* && \ @@ -330,7 +316,7 @@ USER 0 WORKDIR /opt/app-root/bin # [HERMETIC] Configure package repos: local hermeto repos for testing, or enable nodejs:22 module for Konflux. -# Hermeto organises RPMs into per-arch sub-repos (baseos, epel, crb, ubi-*, …), each with +# Hermeto organises RPMs into per-arch sub-repos (baseos, crb, ubi-*, …), each with # its own repodata/. The generated hermeto.repo already points at the correct file:// paths. RUN if [ "${LOCAL_BUILD}" = "true" ]; then \ rm -f /etc/yum.repos.d/* && \ @@ -341,9 +327,7 @@ RUN if [ "${LOCAL_BUILD}" = "true" ]; then \ fi; # [HERMETIC] Install useful OS packages from prefetched RPMs. -# nodejs: provides libnode.so needed at runtime by code-server's bundled node binary -# (installed via rpm2cpio which skips dependency resolution). -# cpio: required for rpm2cpio | cpio -idmv below (install here to avoid a second dnf call). +# nodejs: provides libnode.so needed at runtime by code-server's bundled node binary. RUN /bin/bash <<'EOF' set -Eeuxo pipefail PACKAGES=( @@ -353,26 +337,20 @@ PACKAGES=( gettext # nss_wrapper: required by generate_container_user (LD_PRELOAD=libnss_wrapper.so) nss_wrapper - cpio ) dnf install -y "${PACKAGES[@]}" dnf clean all rm -rf /var/cache/dnf EOF -# Wait for rpm-base stage (builds code-server RPM from source). +# Wait for rpm-base stage (builds code-server release-standalone). COPY --from=rpm-base /tmp/control /dev/null -# Copy the built RPM from rpm-base stage (COPY instead of bind mounts — bind mounts fail on Konflux). -# https://redhat-internal.slack.com/archives/C04PZ7H0VA8/p1755628065772589?thread_ts=1755597929.335999&cid=C04PZ7H0VA8 -COPY --from=rpm-base /tmp/code-server-*.rpm /tmp/ - -# Install code-server via rpm2cpio (dnf rejects unsigned RPMs built from source on Konflux/Conforma) -RUN /bin/bash <<'EOF' -set -Eeuxo pipefail -cd / -rpm2cpio /tmp/code-server-${CODESERVER_VERSION/v/}-*.rpm | cpio -idmv -EOF +# Install code-server from built tree (no RPM: avoids nfpm and unsigned-package issues on Konflux/Conforma). +# Path in rpm-base: /root/${CODESERVER_SOURCE_CODE}/prefetch-input/code-server/release-standalone +COPY --from=rpm-base /root/codeserver/ubi9-python-3.12/prefetch-input/code-server/release-standalone/. /usr/lib/code-server/ +COPY ${CODESERVER_SOURCE_CODE}/prefetch-input/code-server/ci/build/code-server-nfpm.sh /usr/bin/code-server +RUN chmod 755 /usr/bin/code-server COPY --chown=1001:0 ${CODESERVER_SOURCE_CODE}/utils utils/ diff --git a/codeserver/ubi9-python-3.12/Dockerfile.konflux.cpu b/codeserver/ubi9-python-3.12/Dockerfile.konflux.cpu index cedde06dc7..402c4b60b1 100644 --- a/codeserver/ubi9-python-3.12/Dockerfile.konflux.cpu +++ b/codeserver/ubi9-python-3.12/Dockerfile.konflux.cpu @@ -57,12 +57,11 @@ ARG CODESERVER_VERSION=v4.106.3 # [HERMETIC] Import GPG keys for prefetched RPM verification. # CentOS key needed because libX11-devel comes from CentOS Stream repos. -RUN rpm --import /cachi2/output/deps/generic/RPM-GPG-KEY-EPEL-9 RUN rpm --import /cachi2/output/deps/generic/RPM-GPG-KEY-CentOS-Official RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release # [HERMETIC] Configure package repos: local hermeto repos for testing, or enable nodejs:22 module for Konflux. -# Hermeto organises RPMs into per-arch sub-repos (baseos, epel, crb, ubi-*, …), each with +# Hermeto organises RPMs into per-arch sub-repos (baseos, crb, ubi-*, …), each with # its own repodata/. The generated hermeto.repo already points at the correct file:// paths. RUN if [ "${LOCAL_BUILD}" = "true" ]; then \ rm -f /etc/yum.repos.d/* && \ @@ -73,18 +72,12 @@ RUN if [ "${LOCAL_BUILD}" = "true" ]; then \ fi; # libxkbfile-devel = util-macros + libxkbfile (Previously built from source) -# [HERMETIC] Install nfpm (RPM packager) from prefetched RPM RUN dnf install -y \ nodejs nodejs-devel npm \ jq patch libtool rsync gettext gcc-toolset-14 gcc-toolset-14-libatomic-devel \ - krb5-devel libX11-devel libxkbfile-devel \ - /cachi2/output/deps/generic/nfpm-2.44.1-1.$(uname -m).rpm && \ + krb5-devel libX11-devel libxkbfile-devel && \ dnf clean all -# There was limitation on Hermeto, it can't fetch npm packages using git/ssh protocol. -# To work around this, need to fetch some npm packages as generic artifacts and copy to npm directory. -RUN cp /cachi2/output/deps/generic/npm/* /cachi2/output/deps/npm/ - # [HERMETIC] Git metadata needed by code-server's build scripts (version detection, submodules). COPY .git /root/.git # [HERMETIC] Rewrite script: used by setup-offline-binaries.sh to rewrite npm @@ -104,15 +97,16 @@ COPY ${CODESERVER_CONTEXT}/prefetch-input/patches/tweak-gha.sh ${CODESERVER_SOUR COPY ${CODESERVER_CONTEXT}/prefetch-input/patches/apply-patch.sh ${CODESERVER_SOURCE_CODE}/ # [HERMETIC] apply-patch.sh (formerly get_code_server_rpm.sh) was simplified: it now only -# enables gcc-toolset-14 and applies patches (nfpm is installed above). The actual -# npm ci/build/release steps are done below in separate RUN commands for better caching. +# enables gcc-toolset-14 and applies patches. The actual npm ci/build/release steps are +# done below in separate RUN commands for better caching. RUN cd ${CODESERVER_SOURCE_CODE} && GHA_BUILD="${GHA_BUILD}" ./apply-patch.sh # [HERMETIC] Step 1: npm ci --offline (install all npm dependencies from local cache). # setup-offline-binaries.sh does all offline preparation in one shot: # - sources codeserver-offline-env.sh (ELECTRON_SKIP_BINARY_DOWNLOAD, NPM_CONFIG_NODEDIR, etc.) -# - populates node-gyp header cache (22.20.0 for VS Code remote), ripgrep, VSCode extensions -# - pre-populates .build/node/ and .build/builtInExtensions/ so gulp skips network downloads +# - node-gyp uses system headers (NPM_CONFIG_NODEDIR=/usr from nodejs-devel RPM) +# - ripgrep, .vsix extensions from cachi2 generic; .build/node/ = system /usr/bin/node (per-arch) +# - pre-populates .build/builtInExtensions/ so gulp skips network downloads # - rewrites package-lock.json "resolved" URLs to file:///cachi2/... # CI=1 makes ci/dev/postinstall.sh run "npm ci" (not "npm install") in subdirs, # so resolved URLs stay absolute (file:///cachi2/...) and lockfiles are never modified. @@ -138,12 +132,6 @@ RUN . ${CODESERVER_SOURCE_CODE}/patches/codeserver-offline-env.sh && \ export KEEP_MODULES=1 && cd ${CODESERVER_SOURCE_PREFETCH} && \ npm run release:standalone -# [HERMETIC] Step 5: Package into RPM using nfpm (installed from prefetched RPM). -RUN . ${CODESERVER_SOURCE_CODE}/patches/codeserver-offline-env.sh && cd ${CODESERVER_SOURCE_PREFETCH} && \ - VERSION=${CODESERVER_VERSION/v/} npm run package && \ - ls -alh release-packages/ && \ - mv release-packages/code-server-${CODESERVER_VERSION/v/}-*.rpm /tmp/ - # Sentinel file: downstream stages use COPY --from=rpm-base /tmp/control to wait for this stage. RUN echo "done" > /tmp/control @@ -170,11 +158,10 @@ ARG LOCAL_BUILD ARG CODESERVER_SOURCE_CODE=codeserver/ubi9-python-3.12 ARG PYLOCK_FLAVOR -# [HERMETIC] Import GPG keys for EPEL, Red Hat, and CentOS repos (needed for dnf to verify prefetched RPMs). -# EPEL + CentOS keys are prefetched as generic artifacts (see artifacts.in.yaml). +# [HERMETIC] Import GPG keys for Red Hat and CentOS repos (needed for dnf to verify prefetched RPMs). +# CentOS key is prefetched as a generic artifact (see artifacts.in.yaml). # UBI9 images only ship the Red Hat key; CentOS key is needed for ppc64le/s390x packages # from CentOS Stream repos (mesa-libGL, etc.). -RUN rpm --import /cachi2/output/deps/generic/RPM-GPG-KEY-EPEL-9 RUN rpm --import /cachi2/output/deps/generic/RPM-GPG-KEY-CentOS-Official RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release @@ -254,12 +241,11 @@ USER 0 # [HERMETIC] Import GPG keys for prefetched RPM verification. # CentOS key needed because mesa-libGL comes from CentOS Stream repos. -RUN rpm --import /cachi2/output/deps/generic/RPM-GPG-KEY-EPEL-9 RUN rpm --import /cachi2/output/deps/generic/RPM-GPG-KEY-CentOS-Official RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release # [HERMETIC] Configure package repos: local hermeto repos for testing, or enable nodejs:22 module for Konflux. -# Hermeto organises RPMs into per-arch sub-repos (baseos, epel, crb, ubi-*, …), each with +# Hermeto organises RPMs into per-arch sub-repos (baseos, crb, ubi-*, …), each with # its own repodata/. The generated hermeto.repo already points at the correct file:// paths. RUN if [ "${LOCAL_BUILD}" = "true" ]; then \ rm -f /etc/yum.repos.d/* && \ @@ -328,7 +314,7 @@ USER 0 WORKDIR /opt/app-root/bin # [HERMETIC] Configure package repos: local hermeto repos for testing, or enable nodejs:22 module for Konflux. -# Hermeto organises RPMs into per-arch sub-repos (baseos, epel, crb, ubi-*, …), each with +# Hermeto organises RPMs into per-arch sub-repos (baseos, crb, ubi-*, …), each with # its own repodata/. The generated hermeto.repo already points at the correct file:// paths. RUN if [ "${LOCAL_BUILD}" = "true" ]; then \ rm -f /etc/yum.repos.d/* && \ @@ -339,9 +325,7 @@ RUN if [ "${LOCAL_BUILD}" = "true" ]; then \ fi; # [HERMETIC] Install useful OS packages from prefetched RPMs. -# nodejs: provides libnode.so needed at runtime by code-server's bundled node binary -# (installed via rpm2cpio which skips dependency resolution). -# cpio: required for rpm2cpio | cpio -idmv below (install here to avoid a second dnf call). +# nodejs: provides libnode.so needed at runtime by code-server's bundled node binary. RUN /bin/bash <<'EOF' set -Eeuxo pipefail PACKAGES=( @@ -351,26 +335,20 @@ PACKAGES=( gettext # nss_wrapper: required by generate_container_user (LD_PRELOAD=libnss_wrapper.so) nss_wrapper - cpio ) dnf install -y "${PACKAGES[@]}" dnf clean all rm -rf /var/cache/dnf EOF -# Wait for rpm-base stage (builds code-server RPM from source). +# Wait for rpm-base stage (builds code-server release-standalone). COPY --from=rpm-base /tmp/control /dev/null -# Copy the built RPM from rpm-base stage (COPY instead of bind mounts — bind mounts fail on Konflux). -# https://redhat-internal.slack.com/archives/C04PZ7H0VA8/p1755628065772589?thread_ts=1755597929.335999&cid=C04PZ7H0VA8 -COPY --from=rpm-base /tmp/code-server-*.rpm /tmp/ - -# Install code-server via rpm2cpio (dnf rejects unsigned RPMs built from source on Konflux/Conforma) -RUN /bin/bash <<'EOF' -set -Eeuxo pipefail -cd / -rpm2cpio /tmp/code-server-${CODESERVER_VERSION/v/}-*.rpm | cpio -idmv -EOF +# Install code-server from built tree (no RPM: avoids nfpm and unsigned-package issues on Konflux/Conforma). +# Path in rpm-base: /root/${CODESERVER_SOURCE_CODE}/prefetch-input/code-server/release-standalone +COPY --from=rpm-base /root/codeserver/ubi9-python-3.12/prefetch-input/code-server/release-standalone/. /usr/lib/code-server/ +COPY ${CODESERVER_SOURCE_CODE}/prefetch-input/code-server/ci/build/code-server-nfpm.sh /usr/bin/code-server +RUN chmod 755 /usr/bin/code-server COPY --chown=1001:0 ${CODESERVER_SOURCE_CODE}/utils utils/ diff --git a/codeserver/ubi9-python-3.12/README.md b/codeserver/ubi9-python-3.12/README.md index ec0a76aa57..9f3251a8a3 100644 --- a/codeserver/ubi9-python-3.12/README.md +++ b/codeserver/ubi9-python-3.12/README.md @@ -55,7 +55,7 @@ scripts/lockfile-generators/prefetch-all.sh \ ``` This single command orchestrates all four lockfile generators: -1. Generic artifacts (GPG keys, node headers, nfpm, oc client, VS Code extensions) +1. Generic artifacts (GPG keys, node headers, oc client, VS Code extensions) 2. Pip wheels (numpy, scipy, pandas, scikit-learn, etc. via RHOAI index) 3. NPM packages (code-server + VS Code extensions) 4. RPMs (gcc, nodejs, nginx, openblas, etc. via Hermeto) @@ -81,7 +81,7 @@ After running, dependencies are in: ``` cachi2/output/deps/ -├── generic/ # GPG keys, tarballs, nfpm RPM, oc client, VS Code extensions +├── generic/ # GPG keys, tarballs, oc client, VS Code extensions ├── rpm/ # RPM packages + repodata/ ├── npm/ # npm tarballs └── pip/ # Python wheels @@ -255,7 +255,7 @@ the container at `/cachi2`. This gives the Dockerfile the same | `/cachi2/output/deps/rpm/` | All RPM packages plus `repodata/` metadata. The Dockerfile points dnf at this directory as a local repo | | `/cachi2/output/deps/pip/` | Python wheels prefetched from the RHOAI index. Installed with `uv pip install --no-index --find-links /cachi2/output/deps/pip` | | `/cachi2/output/deps/npm/` | npm tarballs. `package-lock.json` resolved URLs are rewritten to `file:///cachi2/output/deps/npm/` so `npm ci --offline` finds them | -| `/cachi2/output/deps/generic/` | Everything else: GPG keys, node-gyp headers, Electron binaries, ripgrep, nfpm RPM, the oc client tarball, VS Code extensions, etc. | +| `/cachi2/output/deps/generic/` | Everything else: GPG keys, node-gyp headers, Electron binaries, ripgrep, the oc client tarball, VS Code extensions, etc. | The `:z` suffix is a SELinux relabel flag for podman — it allows the container process to read the bind-mounted directory on SELinux-enabled hosts (Fedora, diff --git a/codeserver/ubi9-python-3.12/prefetch-input/odh/artifacts.in.yaml b/codeserver/ubi9-python-3.12/prefetch-input/odh/artifacts.in.yaml index 978154d792..bb25398d0e 100644 --- a/codeserver/ubi9-python-3.12/prefetch-input/odh/artifacts.in.yaml +++ b/codeserver/ubi9-python-3.12/prefetch-input/odh/artifacts.in.yaml @@ -6,40 +6,22 @@ # is auto-generated and contains integrity hashes for each URL. input: - # GPG keys for verifying prefetched RPM packages - - url: https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-9 # CentOS Stream 9 GPG key (needed in whl-cache stage for ppc64le/s390x dnf install # from CentOS baseos/appstream/crb repos; UBI9 images only ship the Red Hat key) - url: https://www.centos.org/keys/RPM-GPG-KEY-CentOS-Official - - url: https://github.com/goreleaser/nfpm/releases/download/v2.44.1/nfpm-2.44.1-1.x86_64.rpm - - url: https://github.com/goreleaser/nfpm/releases/download/v2.44.1/nfpm-2.44.1-1.s390x.rpm - - url: https://github.com/goreleaser/nfpm/releases/download/v2.44.1/nfpm-2.44.1-1.aarch64.rpm - - url: https://github.com/goreleaser/nfpm/releases/download/v2.44.1/nfpm-2.44.1-1.ppc64le.rpm - # node-gyp headers for VS Code remote native modules (targets Node.js 22.20.0). - # System Node.js headers come from nodejs-devel RPM (NPM_CONFIG_NODEDIR=/usr); - # Electron headers are no longer needed (ELECTRON_SKIP_BINARY_DOWNLOAD=1). - - url: https://nodejs.org/download/release/v22.20.0/node-v22.20.0-headers.tar.gz - # Node.js runtime binaries for bundling with VSCode server (one per target arch) - - url: https://nodejs.org/download/release/v22.20.0/node-v22.20.0-linux-x64.tar.gz - - url: https://nodejs.org/download/release/v22.20.0/node-v22.20.0-linux-arm64.tar.gz - - url: https://nodejs.org/download/release/v22.20.0/node-v22.20.0-linux-ppc64le.tar.gz + # Node: system Node from nodejs RPM is used (like che-code). ppc64le/s390x use + # native gulp task (BUILD_TARGETS patched in setup-offline-binaries.sh); no extra tarball. + # ripgrep: one version (v13.0.0-13) for all 4 arches; @vscode/ripgrep postinstall patched to use it (see apply-patch.sh). - url: https://github.com/microsoft/ripgrep-prebuilt/releases/download/v13.0.0-13/ripgrep-v13.0.0-13-x86_64-unknown-linux-musl.tar.gz filename: ripgrep-v13.0.0-13-x86_64-unknown-linux-musl.tar.gz - # aarch64/ppc64le: no musl builds exist; download GNU builds aliased to musl filenames - # so @vscode/ripgrep postinstall finds them in its expected cache path + # aarch64: no musl build upstream; GNU build aliased to musl filename (postinstall expects aarch64-unknown-linux-musl). - url: https://github.com/microsoft/ripgrep-prebuilt/releases/download/v13.0.0-13/ripgrep-v13.0.0-13-aarch64-unknown-linux-gnu.tar.gz filename: ripgrep-v13.0.0-13-aarch64-unknown-linux-musl.tar.gz - url: https://github.com/microsoft/ripgrep-prebuilt/releases/download/v13.0.0-13/ripgrep-v13.0.0-13-powerpc64le-unknown-linux-gnu.tar.gz - filename: ripgrep-v13.0.0-13-powerpc64le-unknown-linux-musl.tar.gz - # s390x: same pattern — GNU build aliased to musl for the regular v13.0.0-13 code path + filename: ripgrep-v13.0.0-13-powerpc64le-unknown-linux-gnu.tar.gz - url: https://github.com/microsoft/ripgrep-prebuilt/releases/download/v13.0.0-13/ripgrep-v13.0.0-13-s390x-unknown-linux-gnu.tar.gz - filename: ripgrep-v13.0.0-13-s390x-unknown-linux-musl.tar.gz - # @vscode/ripgrep postinstall uses MULTI_ARCH_LINUX_VERSION v13.0.0-4 for ppc64le/s390x; must be in cache - - url: https://github.com/microsoft/ripgrep-prebuilt/releases/download/v13.0.0-4/ripgrep-v13.0.0-4-powerpc64le-unknown-linux-gnu.tar.gz - filename: ripgrep-v13.0.0-4-powerpc64le-unknown-linux-gnu.tar.gz - - url: https://github.com/microsoft/ripgrep-prebuilt/releases/download/v13.0.0-4/ripgrep-v13.0.0-4-s390x-unknown-linux-gnu.tar.gz - filename: ripgrep-v13.0.0-4-s390x-unknown-linux-gnu.tar.gz + filename: ripgrep-v13.0.0-13-s390x-unknown-linux-gnu.tar.gz # node-argon2 prebuilts — two versions required because separate transitive # dependencies in the npm tree pin v0.31.2 and v0.28.7 respectively. # NOTE: Only x86_64 prebuilts are provided. On arm64/ppc64le, argon2 falls @@ -59,16 +41,6 @@ input: - url: https://mirror.openshift.com/pub/openshift-v4/s390x/clients/ocp/4.18.33/openshift-client-linux.tar.gz filename: openshift-client-linux-s390x.tar.gz - # GitHub tarball dependency for @emmetio/css-parser (used by VSCode emmet extension) - # Filename must use .tgz to match rewrite-npm-urls.sh and download-npm.sh conventions. - - url: https://codeload.github.com/ramya-rao-a/css-parser/tar.gz/370c480ac103bd17c7bcfb34bf5d577dc40d3660 - filename: npm/ramya-rao-a-css-parser-370c480ac103bd17c7bcfb34bf5d577dc40d3660.tgz - - # GitHub tarball dependency for @parcel/watcher (v4.106.3 uses git ref instead of npm registry) - # Filename must use .tgz to match rewrite-npm-urls.sh and download-npm.sh conventions. - - url: https://codeload.github.com/parcel-bundler/watcher/tar.gz/1ca032aa8339260a8a3bcf825c3a1a71e3e43542 - filename: npm/parcel-bundler-watcher-1ca032aa8339260a8a3bcf825c3a1a71e3e43542.tgz - # VSCode marketplace extensions (built-in extensions bundled with code-server) - url: https://github.com/microsoft/vscode-js-debug-companion/releases/download/v1.1.3/ms-vscode.js-debug-companion.1.1.3.vsix filename: ms-vscode.js-debug-companion.1.1.3.vsix diff --git a/codeserver/ubi9-python-3.12/prefetch-input/odh/artifacts.lock.yaml b/codeserver/ubi9-python-3.12/prefetch-input/odh/artifacts.lock.yaml index 3a24cd80f5..c5298c01e4 100644 --- a/codeserver/ubi9-python-3.12/prefetch-input/odh/artifacts.lock.yaml +++ b/codeserver/ubi9-python-3.12/prefetch-input/odh/artifacts.lock.yaml @@ -2,36 +2,9 @@ metadata: version: '1.0' artifacts: - - download_url: https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-9 - checksum: sha256:fcf0eab4f05a1c0de6363ac4b707600a27a9d774e9b491059e59e6921b255a84 - filename: RPM-GPG-KEY-EPEL-9 - download_url: https://www.centos.org/keys/RPM-GPG-KEY-CentOS-Official checksum: sha256:146059788b214d7ba0dd70c1cf21111e594c6cfde201da8a9a88fe7101be8a78 filename: RPM-GPG-KEY-CentOS-Official - - download_url: https://github.com/goreleaser/nfpm/releases/download/v2.44.1/nfpm-2.44.1-1.x86_64.rpm - checksum: sha256:74f9d1c5f13b6661940472d96be2b819c326f2793afb096e4d98e9d4ec2e9d1f - filename: nfpm-2.44.1-1.x86_64.rpm - - download_url: https://github.com/goreleaser/nfpm/releases/download/v2.44.1/nfpm-2.44.1-1.s390x.rpm - checksum: sha256:f2a77bccc22fdf2e14f6dd545ac90393ed75481f8075620f8706d08f702b7aef - filename: nfpm-2.44.1-1.s390x.rpm - - download_url: https://github.com/goreleaser/nfpm/releases/download/v2.44.1/nfpm-2.44.1-1.aarch64.rpm - checksum: sha256:45585140b10502db4b29833215977f82ed3eaa463137a7aead8ab15d259ae0d2 - filename: nfpm-2.44.1-1.aarch64.rpm - - download_url: https://github.com/goreleaser/nfpm/releases/download/v2.44.1/nfpm-2.44.1-1.ppc64le.rpm - checksum: sha256:9814d43163c32de1974e72e2679032216da7dea64a0054ce85f4d1fd39f39cd6 - filename: nfpm-2.44.1-1.ppc64le.rpm - - download_url: https://nodejs.org/download/release/v22.20.0/node-v22.20.0-headers.tar.gz - checksum: sha256:22ba4692576442821f70156219752835a920e9ea2c0113a50fd9ebecb0ea6bbd - filename: node-v22.20.0-headers.tar.gz - - download_url: https://nodejs.org/download/release/v22.20.0/node-v22.20.0-linux-x64.tar.gz - checksum: sha256:eeaccb0378b79406f2208e8b37a62479c70595e20be6b659125eb77dd1ab2a29 - filename: node-v22.20.0-linux-x64.tar.gz - - download_url: https://nodejs.org/download/release/v22.20.0/node-v22.20.0-linux-arm64.tar.gz - checksum: sha256:4181609e03dcb9880e7e5bf956061ecc0503c77a480c6631d868cb1f65a2c7dd - filename: node-v22.20.0-linux-arm64.tar.gz - - download_url: https://nodejs.org/download/release/v22.20.0/node-v22.20.0-linux-ppc64le.tar.gz - checksum: sha256:f96e25a3ef6cbaa992c9bdccaf18684d12fbcbc9751bf0a85407715641f1930e - filename: node-v22.20.0-linux-ppc64le.tar.gz - download_url: https://github.com/microsoft/ripgrep-prebuilt/releases/download/v13.0.0-13/ripgrep-v13.0.0-13-x86_64-unknown-linux-musl.tar.gz checksum: sha256:324cd645481db1ceda8621409c9151fc58d182b90cc5c428db80edb21fb26df3 filename: ripgrep-v13.0.0-13-x86_64-unknown-linux-musl.tar.gz @@ -40,16 +13,10 @@ artifacts: filename: ripgrep-v13.0.0-13-aarch64-unknown-linux-musl.tar.gz - download_url: https://github.com/microsoft/ripgrep-prebuilt/releases/download/v13.0.0-13/ripgrep-v13.0.0-13-powerpc64le-unknown-linux-gnu.tar.gz checksum: sha256:a3fdb2c6ef9d4ff927ca1cb1e56f7aed7913d1be4dd4546aec400118c26452ab - filename: ripgrep-v13.0.0-13-powerpc64le-unknown-linux-musl.tar.gz + filename: ripgrep-v13.0.0-13-powerpc64le-unknown-linux-gnu.tar.gz - download_url: https://github.com/microsoft/ripgrep-prebuilt/releases/download/v13.0.0-13/ripgrep-v13.0.0-13-s390x-unknown-linux-gnu.tar.gz checksum: sha256:555983c74789d553b107c5a2de90b883727b3e43d680f0cd289a07407efb2755 - filename: ripgrep-v13.0.0-13-s390x-unknown-linux-musl.tar.gz - - download_url: https://github.com/microsoft/ripgrep-prebuilt/releases/download/v13.0.0-4/ripgrep-v13.0.0-4-powerpc64le-unknown-linux-gnu.tar.gz - checksum: sha256:3ddd7c0797c14cefd3ee61f13f15ac219bfecee8e6f6e27fd15c102ef229653a - filename: ripgrep-v13.0.0-4-powerpc64le-unknown-linux-gnu.tar.gz - - download_url: https://github.com/microsoft/ripgrep-prebuilt/releases/download/v13.0.0-4/ripgrep-v13.0.0-4-s390x-unknown-linux-gnu.tar.gz - checksum: sha256:61fa877688b721897cee33d572b64d8217ef16fe2cecf5f6f899f5ce55870e28 - filename: ripgrep-v13.0.0-4-s390x-unknown-linux-gnu.tar.gz + filename: ripgrep-v13.0.0-13-s390x-unknown-linux-gnu.tar.gz - download_url: https://github.com/ranisalt/node-argon2/releases/download/v0.31.2/argon2-v0.31.2-napi-v3-linux-x64-glibc.tar.gz checksum: sha256:255e7b6b13bd373e9714f05b4b137262a4362f9e4cc2a86a162e461c611fe17c filename: v0.31.2/argon2-v0.31.2-napi-v3-linux-x64-glibc.tar.gz @@ -68,12 +35,6 @@ artifacts: - download_url: https://mirror.openshift.com/pub/openshift-v4/s390x/clients/ocp/4.18.33/openshift-client-linux.tar.gz checksum: sha256:2162b0a596f5f29fbd290382b52ccf60bf6e9739346b52698a55ac77396989d9 filename: openshift-client-linux-s390x.tar.gz - - download_url: https://codeload.github.com/ramya-rao-a/css-parser/tar.gz/370c480ac103bd17c7bcfb34bf5d577dc40d3660 - checksum: sha256:6004ae05ad17931a62a72b27ebf1dab54fca6e72c0a9f0b7925a8b315bbe776d - filename: npm/ramya-rao-a-css-parser-370c480ac103bd17c7bcfb34bf5d577dc40d3660.tgz - - download_url: https://codeload.github.com/parcel-bundler/watcher/tar.gz/1ca032aa8339260a8a3bcf825c3a1a71e3e43542 - checksum: sha256:2d22d1ade4bc4d7bc96c1b61888a2b9b7e50d01740d75c92a865834ce7c4359e - filename: npm/parcel-bundler-watcher-1ca032aa8339260a8a3bcf825c3a1a71e3e43542.tgz - download_url: https://github.com/microsoft/vscode-js-debug-companion/releases/download/v1.1.3/ms-vscode.js-debug-companion.1.1.3.vsix checksum: sha256:7380a890787452f14b2db7835dfa94de538caf358ebc263f9d46dd68ac52de93 filename: ms-vscode.js-debug-companion.1.1.3.vsix diff --git a/codeserver/ubi9-python-3.12/prefetch-input/patches/apply-patch.sh b/codeserver/ubi9-python-3.12/prefetch-input/patches/apply-patch.sh index 1b9108c452..2dc47d1989 100755 --- a/codeserver/ubi9-python-3.12/prefetch-input/patches/apply-patch.sh +++ b/codeserver/ubi9-python-3.12/prefetch-input/patches/apply-patch.sh @@ -72,6 +72,28 @@ if [[ "$ARCH" == "amd64" || "$ARCH" == "arm64" || "$ARCH" == "ppc64le" || "$ARCH # Both steps are belt-and-suspenders — the lockfile flag alone is sufficient per # npm documentation (see github.com/npm/cli/issues/2606), but patching the tarball # adds defence in depth. + # + # [RIPGREP] Overwrite @vscode/ripgrep postinstall in the cached npm tarball with our + # patched version (ripgrep/postinstall.js) so a single v13.0.0-13 is used for all arches. + RIPGREP_PATCHED="${CODESERVER_SOURCE_PREFETCH}/ripgrep/postinstall.js" + RIPGREP_TGZ=$(find /cachi2/output/deps/npm -name "*ripgrep*.tgz" -type f 2>/dev/null | head -1) + if [[ -n "${RIPGREP_TGZ}" && -f "${RIPGREP_PATCHED}" ]]; then + echo "Patching @vscode/ripgrep: overwrite with ${RIPGREP_PATCHED}" + tmpdir=$(mktemp -d) + tar xzf "${RIPGREP_TGZ}" -C "$tmpdir" + cp "${RIPGREP_PATCHED}" "$tmpdir/package/lib/postinstall.js" + tar czf "${RIPGREP_TGZ}" -C "$tmpdir" package + rm -rf "$tmpdir" + # Strip integrity so npm accepts the modified tarball (lib/vscode, remote, and build all depend on @vscode/ripgrep). + for lock in lib/vscode/package-lock.json lib/vscode/remote/package-lock.json lib/vscode/build/package-lock.json; do + jq 'del(.packages["node_modules/@vscode/ripgrep"].integrity)' "$lock" > /tmp/lock-ripgrep.json && mv /tmp/lock-ripgrep.json "$lock" + done + elif [[ -z "${RIPGREP_TGZ}" ]]; then + echo "WARNING: @vscode/ripgrep tarball not found in /cachi2/output/deps/npm/" + elif [[ ! -f "${RIPGREP_PATCHED}" ]]; then + echo "WARNING: ripgrep postinstall not found at ${RIPGREP_PATCHED}" + fi + if [[ "$ARCH" == "ppc64le" || "$ARCH" == "s390x" ]]; then # Try to patch the cached tarball (remove postinstall from its package.json) VSCE_TGZ=$(find /cachi2/output/deps/npm -name "*vsce-sign*.tgz" -type f 2>/dev/null | head -1) diff --git a/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/README.md b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/README.md new file mode 100644 index 0000000000..6b5be75572 --- /dev/null +++ b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/README.md @@ -0,0 +1,48 @@ +# Patches for code-server (v4.106.3) — overlay onto prefetch-input/code-server + +This directory is **copied over** the read-only `prefetch-input/code-server` submodule during the build (see `apply-patch.sh` and the Dockerfile `COPY`). Files here overwrite the corresponding paths under the code-server source. **Do not modify `prefetch-input/code-server`**; all editable changes belong in this patches tree. + +--- + +## Registry-only npm deps (ProdSec / Cachi2) + +**Why:** ProdSec requires that npm dependencies be declared only in `package.json` / `package-lock.json` and fetched as npm packages (registry). Cachi2/Hermeto prefetches **registry** `.tgz` URLs but does **not** prefetch `codeload.github.com` or git-ref URLs. So we use **registry versions only** for everything that must be prefetched in Konflux. + +**What changed:** + +1. **custom-packages/** + - Pins deps that are prefetched and then consumed at build by `rewrite-npm-urls.sh`. Lockfiles in the repo use **https://registry.npmjs.org/...** URLs only so Konflux/Hermeto Prefetch-dependencies can fetch them (file:// is not accessible at prefetch time). At build time the script rewrites resolved URLs to the cache (file:// or https mirror per CACHI2_BASE). + - **@parcel/watcher**: was `codeload.github.com/parcel-bundler/watcher/tar.gz/` → now **registry** `@parcel/watcher@2.5.6` (tarball URL in package.json). + - **@emmetio/css-parser**: was `codeload.github.com/ramya-rao-a/css-parser/tar.gz/` (fork) → now **registry** `@emmetio/css-parser@0.4.1` (official package). + - **@playwright/browser-chromium**: unchanged (already registry). + +2. **lib/vscode/package.json** and **lib/vscode/package-lock.json** + - **@parcel/watcher**: upstream had `parcel-bundler/watcher#`. Overridden to **`2.5.6`** with registry `resolved` URL so Cachi2 prefetches it and the rewrite script points npm at the same tarball. + - **Lockfile must include nested picomatch 4.0.3:** `@parcel/watcher@2.5.6` depends on `picomatch ^4.0.3`; the lockfile has a top-level `picomatch` at 2.3.1 (for other deps), so we **must** have an entry for `node_modules/@parcel/watcher/node_modules/picomatch` with version `4.0.3` and `resolved` to the registry tarball. Without it, `npm ci --offline` tries to fetch the packument for picomatch@^4.0.3 and fails with ENOTCACHED. When **regenerating** this lockfile, run `npm install` in `lib/vscode` (with network) so npm resolves the full tree and the generated lockfile contains this nested entry; then commit the updated lockfile. + +3. **lib/vscode/remote/package.json** and **package-lock.json** + - Same **@parcel/watcher** override: dependency and lockfile entry set to **`2.5.6`** with registry URL (remote extension host / vscode-reh). + - **Lockfile must include nested picomatch 4.0.3:** postinstall.js runs `npm ci` in **lib/vscode/remote** as well; add `node_modules/@parcel/watcher/node_modules/picomatch` with version `4.0.3` and `resolved` as for lib/vscode. When regenerating, run `npm install` in `lib/vscode/remote` (with network). + +4. **lib/vscode/extensions/package.json** and **package-lock.json** + - **@parcel/watcher** (devDependency) overridden to **`2.5.6`** with registry URL so all code-server npm trees use the same version. + - **Lockfile must include nested picomatch 4.0.3:** same as `lib/vscode/` — the root postinstall runs `node build/npm/postinstall.js`, which runs `npm ci` in **lib/vscode/extensions**. That run needs `node_modules/@parcel/watcher/node_modules/picomatch` with version `4.0.3` and `resolved` in the lockfile, or npm will try to fetch the packument and fail with ENOTCACHED. When regenerating, run `npm install` in `lib/vscode/extensions` (with network) so the lockfile gets the nested entry. + +5. **lib/vscode/extensions/emmet/package.json** and **package-lock.json** + - Upstream emmet extension may depend on the **ramya-rao-a/css-parser** fork (or a file/codeload URL). This overlay switches it to **@emmetio/css-parser@0.4.1** from the registry so Cachi2 can prefetch it and ProdSec sees only npm packages. + +6. **ci/dev/postinstall.sh** + - Runs `install-deps custom-packages` **before** `install-deps lib/vscode`. That way, during the single root `npm ci --offline`, postinstall installs custom-packages first (from rewritten file:// URLs), filling `~/.npm/_cacache` with @parcel/watcher and picomatch, so lib/vscode’s `npm ci` finds them and does not hit ENOTCACHED. + +7. **lib/vscode/build/gulpfile.reh.js** + - Adds **ppc64** and **s390x** to `BUILD_TARGETS` so we can run the native gulp task (`vscode-reh-web-linux-ppc64-min` etc.) with system Node only (like che-code). Without this overlay, VS Code only defines tasks for linux x64, armhf, arm64, alpine. + - On ppc64le, Node reports `process.arch` as **"ppc64"** (not ppc64le), so the cache dir is `.build/node/.../linux-ppc64/` and the gulp task is `vscode-reh-web-linux-ppc64-min`. On s390x, `process.arch` is **"s390x"**. + +8. **ci/build/build-vscode.sh** + - Builds for current arch (no x64 fallback on ppc64le/s390x). Uses system Node from `setup-offline-binaries.sh` cache. + +All of the above are **overlays**: at build time the Dockerfile copies this patches tree on top of the read-only `prefetch-input/code-server` submodule, so every `package.json` / `package-lock.json` that referenced the old git/codeload refs is replaced by these files and thus uses the registry versions we define here. + +**Version notes (compatibility):** +- **@parcel/watcher 2.5.6**: The old ref was commit `1ca032aa` (Aug 2025) — “Don’t show error messages when checking if watchman is available” (#198). That commit is **included in 2.5.6** (released Jan 2026); the 2.5.x line is linear after it. So 2.5.6 is a **safe upgrade** and keeps the same watchman behavior. +- **@emmetio/css-parser 0.4.1**: The ramya-rao-a fork ref `370c480ac` (2017) only added **pre-built dist/** so GitHub-URL installs work without a build. The official npm package **already ships dist/**; there are no API or behavior changes. 0.4.1 is the **same parser**, properly versioned — safe to use. If you ever need the exact fork, publish it to an internal registry and point the dependency there. diff --git a/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/ci/build/build-vscode.sh b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/ci/build/build-vscode.sh new file mode 100755 index 0000000000..c381c91f8d --- /dev/null +++ b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/ci/build/build-vscode.sh @@ -0,0 +1,166 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Builds vscode into lib/vscode/out-vscode. +# [ODH PATCH] Build for current architecture (like che-code) so we can use +# system Node (/usr/bin/node) instead of prefetched node tarballs. + +# MINIFY controls whether a minified version of vscode is built. +MINIFY=${MINIFY-true} + +delete-bin-script() { + rm -f "${VSCODE_REH_DIR}/bin/$1" +} + +copy-bin-script() { + local script="$1" + local dest="${VSCODE_REH_DIR}/bin/$script" + cp "lib/vscode/resources/server/bin/$script" "$dest" + sed -i.bak "s/@@VERSION@@/$(vscode_version)/g" "$dest" + sed -i.bak "s/@@COMMIT@@/$BUILD_SOURCEVERSION/g" "$dest" + sed -i.bak "s/@@APPNAME@@/code-server/g" "$dest" + + # Fix Node path on Darwin and Linux. + # We do not want expansion here; this text should make it to the file as-is. + # shellcheck disable=SC2016 + sed -i.bak 's/^ROOT=\(.*\)$/VSROOT=\1\nROOT="$(dirname "$(dirname "$VSROOT")")"/g' "$dest" + sed -i.bak 's/ROOT\/out/VSROOT\/out/g' "$dest" + # We do not want expansion here; this text should make it to the file as-is. + # shellcheck disable=SC2016 + sed -i.bak 's/$ROOT\/node/${NODE_EXEC_PATH:-$ROOT\/lib\/node}/g' "$dest" + + # Fix Node path on Windows. + sed -i.bak 's/^set ROOT_DIR=\(.*\)$/set ROOT_DIR=%~dp0..\\..\\..\\..\r\nset VSROOT_DIR=\1/g' "$dest" + sed -i.bak 's/%ROOT_DIR%\\out/%VSROOT_DIR%\\out/g' "$dest" + + chmod +x "$dest" + rm "$dest.bak" +} + +main() { + cd "$(dirname "${0}")/../.." + + source ./ci/lib.sh + + # Build for current arch (like che-code): use native gulp task and system Node. + # setup-offline-binaries.sh adds ppc64/s390x to BUILD_TARGETS so the native task exists. + export NODE_ARCH + NODE_ARCH=$(node -p "process.arch") + export VSCODE_REH_DIR="lib/vscode-reh-web-linux-${NODE_ARCH}" + GULP_ARCH="${NODE_ARCH}" + # VS Code uses 'armhf' not 'armv7l' for the task name + case "${NODE_ARCH}" in + armv7l) GULP_ARCH="armhf" ;; + esac + echo "Building VS Code for linux-${NODE_ARCH} (gulp task: linux-${GULP_ARCH})" + + # Set the commit Code will embed into the product.json. We need to do this + # since Code tries to get the commit from the `.git` directory which will fail + # as it is a submodule. + # + # Also, we use code-server's commit rather than VS Code's otherwise it would + # not update when only our patch files change, and that will cause caching + # issues where the browser keeps using outdated code. + export BUILD_SOURCEVERSION + BUILD_SOURCEVERSION=$(git rev-parse HEAD) + + pushd lib/vscode + + if [[ ! ${VERSION-} ]]; then + echo "VERSION not set. Please set before running this script:" + echo "VERSION='0.0.0' npm run build:vscode" + exit 1 + fi + + # Add the date, our name, links, enable telemetry (this just makes telemetry + # available; telemetry can still be disabled by flag or setting), and + # configure trusted extensions (since some, like github.copilot-chat, never + # ask to be trusted and this is the only way to get auth working). + # + # This needs to be done before building as Code will read this file and embed + # it into the client-side code. + git checkout product.json # Reset in case the script exited early. + cp product.json product.original.json # Since jq has no inline edit. + jq --slurp '.[0] * .[1]' product.original.json <( + cat << EOF + { + "enableTelemetry": true, + "quality": "stable", + "codeServerVersion": "$VERSION", + "nameShort": "code-server", + "nameLong": "code-server", + "applicationName": "code-server", + "dataFolderName": ".code-server", + "win32MutexName": "codeserver", + "licenseUrl": "https://github.com/coder/code-server/blob/main/LICENSE", + "win32DirName": "code-server", + "win32NameVersion": "code-server", + "win32AppUserModelId": "coder.code.server", + "win32ShellNameShort": "c&ode-server", + "darwinBundleIdentifier": "com.coder.code.server", + "linuxIconName": "com.coder.code.server", + "reportIssueUrl": "https://github.com/coder/code-server/issues/new", + "documentationUrl": "https://go.microsoft.com/fwlink/?LinkID=533484#vscode", + "keyboardShortcutsUrlMac": "https://go.microsoft.com/fwlink/?linkid=832143", + "keyboardShortcutsUrlLinux": "https://go.microsoft.com/fwlink/?linkid=832144", + "keyboardShortcutsUrlWin": "https://go.microsoft.com/fwlink/?linkid=832145", + "introductoryVideosUrl": "https://go.microsoft.com/fwlink/?linkid=832146", + "tipsAndTricksUrl": "https://go.microsoft.com/fwlink/?linkid=852118", + "newsletterSignupUrl": "https://www.research.net/r/vsc-newsletter", + "linkProtectionTrustedDomains": [ + "https://open-vsx.org" + ], + "trustedExtensionAuthAccess": [ + "vscode.git", "vscode.github", + "github.vscode-pull-request-github", + "github.copilot", "github.copilot-chat" + ], + "aiConfig": { + "ariaKey": "code-server" + } + } +EOF + ) > product.json + + # Build for current architecture so we can use system Node (see setup-offline-binaries.sh). + node --max-old-space-size=16384 --optimize-for-size \ + ./node_modules/gulp/bin/gulp.js \ + "vscode-reh-web-linux-${GULP_ARCH}${MINIFY:+-min}" + + # If gulp uses a different arch name (e.g. armv7l -> armhf), move output to NODE_ARCH dir. + if [[ "${GULP_ARCH}" != "${NODE_ARCH}" ]]; then + rm -rf "../vscode-reh-web-linux-${NODE_ARCH}" + mv "../vscode-reh-web-linux-${GULP_ARCH}" "../vscode-reh-web-linux-${NODE_ARCH}" + fi + + # Reset so if you develop after building you will not be stuck with the wrong + # commit (the dev client will use `oss-dev` but the dev server will still use + # product.json which will have `stable-$commit`). + git checkout product.json + + popd + + pushd "${VSCODE_REH_DIR}" + # Make sure Code took the version we set in the environment variable. Not + # having a version will break display languages. + if ! jq -e .commit product.json; then + echo "'commit' is missing from product.json" + exit 1 + fi + popd + + # These provide a `code-server` command in the integrated terminal to open + # files in the current instance. + delete-bin-script remote-cli/code-server + copy-bin-script remote-cli/code-darwin.sh + copy-bin-script remote-cli/code-linux.sh + copy-bin-script remote-cli/code.cmd + + # These provide a way for terminal applications to open browser windows. + delete-bin-script helpers/browser.sh + copy-bin-script helpers/browser-darwin.sh + copy-bin-script helpers/browser-linux.sh + copy-bin-script helpers/browser.cmd +} + +main "$@" diff --git a/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/ci/dev/postinstall.sh b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/ci/dev/postinstall.sh new file mode 100755 index 0000000000..42d6e53313 --- /dev/null +++ b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/ci/dev/postinstall.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Install dependencies in $1. +install-deps() { + local args=() + if [[ ${CI-} ]]; then + args+=(ci) + else + args+=(install) + fi + # If there is no package.json then npm will look upward and end up installing + # from the root resulting in an infinite loop (this can happen if you have not + # checked out the submodule yet for example). + if [[ ! -f "$1/package.json" ]]; then + echo "$1/package.json is missing; did you run git submodule update --init?" + exit 1 + fi + pushd "$1" + echo "Installing dependencies for $PWD" + npm "${args[@]}" + popd +} + +main() { + cd "$(dirname "$0")/../.." + source ./ci/lib.sh + + # [ODH] Install custom-packages first (same install-deps as test). Uses version ranges + # in package.json so npm ci uses the lockfile and populates the cache for lib/vscode. + if [[ -f custom-packages/package.json ]]; then + install-deps custom-packages + fi + install-deps test + install-deps test/e2e/extensions/test-extension + # We don't need these when running the integration tests + # so you can pass SKIP_SUBMODULE_DEPS + if [[ ! ${SKIP_SUBMODULE_DEPS-} ]]; then + install-deps lib/vscode + fi +} + +main "$@" diff --git a/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/custom-packages/package-lock.json b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/custom-packages/package-lock.json new file mode 100644 index 0000000000..aaaa497a3e --- /dev/null +++ b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/custom-packages/package-lock.json @@ -0,0 +1,407 @@ +{ + "name": "code-server-hermetic-git-deps", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "code-server-hermetic-git-deps", + "version": "1.0.0", + "dependencies": { + "@emmetio/css-parser": "0.4.1", + "@parcel/watcher": "2.5.6", + "@playwright/browser-chromium": "1.47.2" + } + }, + "node_modules/@emmetio/css-parser": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@emmetio/css-parser/-/css-parser-0.4.1.tgz", + "integrity": "sha512-2bC6m0MV/voF4CTZiAbG5MWKbq5EBmDPKu9Sb7s7nVcEzNQlrZP6mFFFlIaISM8X6514H9shWMme1fCm8cWAfQ==", + "license": "MIT", + "dependencies": { + "@emmetio/stream-reader": "^2.2.0", + "@emmetio/stream-reader-utils": "^0.1.0" + } + }, + "node_modules/@emmetio/stream-reader": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@emmetio/stream-reader/-/stream-reader-2.2.0.tgz", + "integrity": "sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==", + "license": "MIT" + }, + "node_modules/@emmetio/stream-reader-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@emmetio/stream-reader-utils/-/stream-reader-utils-0.1.0.tgz", + "integrity": "sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A==", + "license": "MIT" + }, + "node_modules/@parcel/watcher": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", + "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.6", + "@parcel/watcher-darwin-arm64": "2.5.6", + "@parcel/watcher-darwin-x64": "2.5.6", + "@parcel/watcher-freebsd-x64": "2.5.6", + "@parcel/watcher-linux-arm-glibc": "2.5.6", + "@parcel/watcher-linux-arm-musl": "2.5.6", + "@parcel/watcher-linux-arm64-glibc": "2.5.6", + "@parcel/watcher-linux-arm64-musl": "2.5.6", + "@parcel/watcher-linux-x64-glibc": "2.5.6", + "@parcel/watcher-linux-x64-musl": "2.5.6", + "@parcel/watcher-win32-arm64": "2.5.6", + "@parcel/watcher-win32-ia32": "2.5.6", + "@parcel/watcher-win32-x64": "2.5.6" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", + "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", + "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", + "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", + "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", + "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", + "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", + "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", + "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", + "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", + "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", + "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", + "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", + "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@playwright/browser-chromium": { + "version": "1.47.2", + "resolved": "https://registry.npmjs.org/@playwright/browser-chromium/-/browser-chromium-1.47.2.tgz", + "integrity": "sha512-tsk9bLcGzIu4k4xI2ixlwDrdJhMqCalUCsSj7TRI8VuvK7cLiJIa5SR0dprKbX+wkku/JMR4EN6g9DMHvfna+Q==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.47.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/playwright-core": { + "version": "1.47.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.47.2.tgz", + "integrity": "sha512-3JvMfF+9LJfe16l7AbSmU555PaTl2tPyQsVInqm3id16pdDfvZ8TTZ/pyzmkbDrZTQefyzU7AIHlZqQnxpqHVQ==", + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + } + } +} diff --git a/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/custom-packages/package.json b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/custom-packages/package.json new file mode 100644 index 0000000000..b2354e6696 --- /dev/null +++ b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/custom-packages/package.json @@ -0,0 +1,11 @@ +{ + "name": "code-server-hermetic-git-deps", + "version": "1.0.0", + "description": "Pins npm deps for hermetic/Konflux builds. All deps use registry.npmjs.org tarball URLs only (no codeload.github.com or git refs) so Cachi2/Hermeto can prefetch them and ProdSec allows them as npm packages. Prefetched into deps/npm/ and consumed by rewrite-npm-urls.sh when building code-server/VSCode. @parcel/watcher and @emmetio/css-parser were switched from GitHub refs to registry versions; lib/vscode and extensions/emmet patches align those lockfiles.", + "private": true, + "dependencies": { + "@emmetio/css-parser": "0.4.1", + "@parcel/watcher": "2.5.6", + "@playwright/browser-chromium": "1.47.2" + } +} diff --git a/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/build/gulpfile.reh.js b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/build/gulpfile.reh.js new file mode 100644 index 0000000000..cb63d31f2c --- /dev/null +++ b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/build/gulpfile.reh.js @@ -0,0 +1,490 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +'use strict'; + +const gulp = require('gulp'); +const path = require('path'); +const es = require('event-stream'); +const util = require('./lib/util'); +const { getVersion } = require('./lib/getVersion'); +const task = require('./lib/task'); +const optimize = require('./lib/optimize'); +const { inlineMeta } = require('./lib/inlineMeta'); +const product = require('../product.json'); +const rename = require('gulp-rename'); +const replace = require('gulp-replace'); +const filter = require('gulp-filter'); +const { getProductionDependencies } = require('./lib/dependencies'); +const { readISODate } = require('./lib/date'); +const vfs = require('vinyl-fs'); +const packageJson = require('../package.json'); +const flatmap = require('gulp-flatmap'); +const gunzip = require('gulp-gunzip'); +const File = require('vinyl'); +const fs = require('fs'); +const glob = require('glob'); +const { compileBuildWithManglingTask } = require('./gulpfile.compile'); +const { cleanExtensionsBuildTask, compileNonNativeExtensionsBuildTask, compileNativeExtensionsBuildTask, compileExtensionMediaBuildTask } = require('./gulpfile.extensions'); +const { vscodeWebResourceIncludes, createVSCodeWebFileContentMapper } = require('./gulpfile.vscode.web'); +const cp = require('child_process'); +const log = require('fancy-log'); +const buildfile = require('./buildfile'); + +const REPO_ROOT = path.dirname(__dirname); +const commit = getVersion(REPO_ROOT); +const BUILD_ROOT = path.dirname(REPO_ROOT); +const REMOTE_FOLDER = path.join(REPO_ROOT, 'remote'); + +// Targets + +const BUILD_TARGETS = [ + { platform: 'win32', arch: 'x64' }, + { platform: 'win32', arch: 'arm64' }, + { platform: 'darwin', arch: 'x64' }, + { platform: 'darwin', arch: 'arm64' }, + { platform: 'linux', arch: 'x64' }, + { platform: 'linux', arch: 'armhf' }, + { platform: 'linux', arch: 'arm64' }, + { platform: 'alpine', arch: 'arm64' }, + // legacy: we use to ship only one alpine so it was put in the arch, but now we ship + // multiple alpine images and moved to a better model (alpine as the platform) + { platform: 'linux', arch: 'alpine' }, + // ODH: add ppc64/s390x so we can run native gulp task with system Node (like che-code) + { platform: 'linux', arch: 'ppc64' }, + { platform: 'linux', arch: 's390x' }, +]; + +const serverResourceIncludes = [ + + // NLS + 'out-build/nls.messages.json', + 'out-build/nls.keys.json', + + // Process monitor + 'out-build/vs/base/node/cpuUsage.sh', + 'out-build/vs/base/node/ps.sh', + + // External Terminal + 'out-build/vs/workbench/contrib/externalTerminal/**/*.scpt', + + // Terminal shell integration + 'out-build/vs/workbench/contrib/terminal/common/scripts/shellIntegration.ps1', + 'out-build/vs/workbench/contrib/terminal/common/scripts/CodeTabExpansion.psm1', + 'out-build/vs/workbench/contrib/terminal/common/scripts/GitTabExpansion.psm1', + 'out-build/vs/workbench/contrib/terminal/common/scripts/shellIntegration-bash.sh', + 'out-build/vs/workbench/contrib/terminal/common/scripts/shellIntegration-env.zsh', + 'out-build/vs/workbench/contrib/terminal/common/scripts/shellIntegration-profile.zsh', + 'out-build/vs/workbench/contrib/terminal/common/scripts/shellIntegration-rc.zsh', + 'out-build/vs/workbench/contrib/terminal/common/scripts/shellIntegration-login.zsh', + 'out-build/vs/workbench/contrib/terminal/common/scripts/shellIntegration.fish', + +]; + +const serverResourceExcludes = [ + '!out-build/vs/**/{electron-browser,electron-main,electron-utility}/**', + '!out-build/vs/editor/standalone/**', + '!out-build/vs/workbench/**/*-tb.png', + '!**/test/**' +]; + +const serverResources = [ + ...serverResourceIncludes, + ...serverResourceExcludes +]; + +const serverWithWebResourceIncludes = [ + ...serverResourceIncludes, + 'out-build/vs/code/browser/workbench/*.html', + ...vscodeWebResourceIncludes +]; + +const serverWithWebResourceExcludes = [ + ...serverResourceExcludes, + '!out-build/vs/code/**/*-dev.html' +]; + +const serverWithWebResources = [ + ...serverWithWebResourceIncludes, + ...serverWithWebResourceExcludes +]; +const serverEntryPoints = buildfile.codeServer; + +const webEntryPoints = [ + buildfile.workerEditor, + buildfile.workerExtensionHost, + buildfile.workerNotebook, + buildfile.workerLanguageDetection, + buildfile.workerLocalFileSearch, + buildfile.workerOutputLinks, + buildfile.workerBackgroundTokenization, + buildfile.keyboardMaps, + buildfile.codeWeb +].flat(); + +const serverWithWebEntryPoints = [ + + // Include all of server + ...serverEntryPoints, + + // Include all of web + ...webEntryPoints, +].flat(); + +const bootstrapEntryPoints = [ + 'out-build/server-main.js', + 'out-build/server-cli.js', + 'out-build/bootstrap-fork.js' +]; + +function getNodeVersion() { + const npmrc = fs.readFileSync(path.join(REPO_ROOT, 'remote', '.npmrc'), 'utf8'); + const nodeVersion = /^target="(.*)"$/m.exec(npmrc)[1]; + const internalNodeVersion = /^ms_build_id="(.*)"$/m.exec(npmrc)[1]; + return { nodeVersion, internalNodeVersion }; +} + +function getNodeChecksum(expectedName) { + const nodeJsChecksums = fs.readFileSync(path.join(REPO_ROOT, 'build', 'checksums', 'nodejs.txt'), 'utf8'); + for (const line of nodeJsChecksums.split('\n')) { + const [checksum, name] = line.split(/\s+/); + if (name === expectedName) { + return checksum; + } + } + return undefined; +} + +function extractAlpinefromDocker(nodeVersion, platform, arch) { + const imageName = arch === 'arm64' ? 'arm64v8/node' : 'node'; + log(`Downloading node.js ${nodeVersion} ${platform} ${arch} from docker image ${imageName}`); + const contents = cp.execSync(`docker run --rm ${imageName}:${nodeVersion}-alpine /bin/sh -c 'cat \`which node\`'`, { maxBuffer: 100 * 1024 * 1024, encoding: 'buffer' }); + return es.readArray([new File({ path: 'node', contents, stat: { mode: parseInt('755', 8) } })]); +} + +const { nodeVersion, internalNodeVersion } = getNodeVersion(); + +BUILD_TARGETS.forEach(({ platform, arch }) => { + gulp.task(task.define(`node-${platform}-${arch}`, () => { + const nodePath = path.join('.build', 'node', `v${nodeVersion}`, `${platform}-${arch}`); + + if (!fs.existsSync(nodePath)) { + util.rimraf(nodePath); + + return nodejs(platform, arch) + .pipe(vfs.dest(nodePath)); + } + + return Promise.resolve(null); + })); +}); + +const defaultNodeTask = gulp.task(`node-${process.platform}-${process.arch}`); + +if (defaultNodeTask) { + gulp.task(task.define('node', defaultNodeTask)); +} + +function nodejs(platform, arch) { + const { fetchUrls, fetchGithub } = require('./lib/fetch'); + const untar = require('gulp-untar'); + + if (arch === 'armhf') { + arch = 'armv7l'; + } else if (arch === 'alpine') { + platform = 'alpine'; + arch = 'x64'; + } + + log(`Downloading node.js ${nodeVersion} ${platform} ${arch} from ${product.nodejsRepository}...`); + + const glibcPrefix = process.env['VSCODE_NODE_GLIBC'] ?? ''; + let expectedName; + switch (platform) { + case 'win32': + expectedName = product.nodejsRepository !== 'https://nodejs.org' ? + `win-${arch}-node.exe` : `win-${arch}/node.exe`; + break; + + case 'darwin': + expectedName = `node-v${nodeVersion}-${platform}-${arch}.tar.gz`; + break; + case 'linux': + expectedName = `node-v${nodeVersion}${glibcPrefix}-${platform}-${arch}.tar.gz`; + break; + case 'alpine': + expectedName = `node-v${nodeVersion}-linux-${arch}-musl.tar.gz`; + break; + } + const checksumSha256 = getNodeChecksum(expectedName); + + if (checksumSha256) { + log(`Using SHA256 checksum for checking integrity: ${checksumSha256}`); + } else { + log.warn(`Unable to verify integrity of downloaded node.js binary because no SHA256 checksum was found!`); + } + + switch (platform) { + case 'win32': + return (product.nodejsRepository !== 'https://nodejs.org' ? + fetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: expectedName, checksumSha256 }) : + fetchUrls(`/dist/v${nodeVersion}/win-${arch}/node.exe`, { base: 'https://nodejs.org', checksumSha256 })) + .pipe(rename('node.exe')); + case 'darwin': + case 'linux': + return (product.nodejsRepository !== 'https://nodejs.org' ? + fetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: expectedName, checksumSha256 }) : + fetchUrls(`/dist/v${nodeVersion}/node-v${nodeVersion}-${platform}-${arch}.tar.gz`, { base: 'https://nodejs.org', checksumSha256 }) + ).pipe(flatmap(stream => stream.pipe(gunzip()).pipe(untar()))) + .pipe(filter('**/node')) + .pipe(util.setExecutableBit('**')) + .pipe(rename('node')); + case 'alpine': + return product.nodejsRepository !== 'https://nodejs.org' ? + fetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: expectedName, checksumSha256 }) + .pipe(flatmap(stream => stream.pipe(gunzip()).pipe(untar()))) + .pipe(filter('**/node')) + .pipe(util.setExecutableBit('**')) + .pipe(rename('node')) + : extractAlpinefromDocker(nodeVersion, platform, arch); + } +} + +function packageTask(type, platform, arch, sourceFolderName, destinationFolderName) { + const destination = path.join(BUILD_ROOT, destinationFolderName); + + return () => { + const json = require('gulp-json-editor'); + + const src = gulp.src(sourceFolderName + '/**', { base: '.' }) + .pipe(rename(function (path) { path.dirname = path.dirname.replace(new RegExp('^' + sourceFolderName), 'out'); })) + .pipe(util.setExecutableBit(['**/*.sh'])) + .pipe(filter(['**', '!**/*.{js,css}.map'])); + + const workspaceExtensionPoints = ['debuggers', 'jsonValidation']; + const isUIExtension = (manifest) => { + switch (manifest.extensionKind) { + case 'ui': return true; + case 'workspace': return false; + default: { + if (manifest.main) { + return false; + } + if (manifest.contributes && Object.keys(manifest.contributes).some(key => workspaceExtensionPoints.indexOf(key) !== -1)) { + return false; + } + // Default is UI Extension + return true; + } + } + }; + const localWorkspaceExtensions = glob.sync('extensions/*/package.json') + .filter((extensionPath) => { + if (type === 'reh-web') { + return true; // web: ship all extensions for now + } + + // Skip shipping UI extensions because the client side will have them anyways + // and they'd just increase the download without being used + const manifest = JSON.parse(fs.readFileSync(path.join(REPO_ROOT, extensionPath)).toString()); + return !isUIExtension(manifest); + }).map((extensionPath) => path.basename(path.dirname(extensionPath))) + .filter(name => name !== 'vscode-api-tests' && name !== 'vscode-test-resolver'); // Do not ship the test extensions + const marketplaceExtensions = JSON.parse(fs.readFileSync(path.join(REPO_ROOT, 'product.json'), 'utf8')).builtInExtensions + .filter(entry => !entry.platforms || new Set(entry.platforms).has(platform)) + .filter(entry => !entry.clientOnly) + .map(entry => entry.name); + const extensionPaths = [...localWorkspaceExtensions, ...marketplaceExtensions] + .map(name => `.build/extensions/${name}/**`); + + const extensions = gulp.src(extensionPaths, { base: '.build', dot: true }); + const extensionsCommonDependencies = gulp.src('.build/extensions/node_modules/**', { base: '.build', dot: true }); + const sources = es.merge(src, extensions, extensionsCommonDependencies) + .pipe(filter(['**', '!**/*.{js,css}.map'], { dot: true })); + + let version = packageJson.version; + const quality = product.quality; + + if (quality && quality !== 'stable') { + version += '-' + quality; + } + + const name = product.nameShort; + + let packageJsonContents; + const packageJsonStream = gulp.src(['remote/package.json'], { base: 'remote' }) + .pipe(json({ name, version, dependencies: undefined, optionalDependencies: undefined, type: 'module' })) + .pipe(es.through(function (file) { + packageJsonContents = file.contents.toString(); + this.emit('data', file); + })); + + let productJsonContents; + const productJsonStream = gulp.src(['product.json'], { base: '.' }) + .pipe(json({ commit, date: readISODate('out-build'), version })) + .pipe(es.through(function (file) { + productJsonContents = file.contents.toString(); + this.emit('data', file); + })); + + const license = gulp.src(['remote/LICENSE'], { base: 'remote', allowEmpty: true }); + + const jsFilter = util.filter(data => !data.isDirectory() && /\.js$/.test(data.path)); + + const productionDependencies = getProductionDependencies(REMOTE_FOLDER); + const dependenciesSrc = productionDependencies.map(d => path.relative(REPO_ROOT, d)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`, `!${d}/.bin/**`]).flat(); + const deps = gulp.src(dependenciesSrc, { base: 'remote', dot: true }) + // filter out unnecessary files, no source maps in server build + .pipe(filter(['**', '!**/package-lock.json', '!**/*.{js,css}.map'])) + .pipe(util.cleanNodeModules(path.join(__dirname, '.moduleignore'))) + .pipe(util.cleanNodeModules(path.join(__dirname, `.moduleignore.${process.platform}`))) + .pipe(jsFilter) + .pipe(util.stripSourceMappingURL()) + .pipe(jsFilter.restore); + + const nodePath = `.build/node/v${nodeVersion}/${platform}-${arch}`; + const node = gulp.src(`${nodePath}/**`, { base: nodePath, dot: true }); + + let web = []; + if (type === 'reh-web') { + web = [ + 'resources/server/favicon.ico', + 'resources/server/code-192.png', + 'resources/server/code-512.png', + 'resources/server/manifest.json' + ].map(resource => gulp.src(resource, { base: '.' }).pipe(rename(resource))); + } + + const all = es.merge( + packageJsonStream, + productJsonStream, + license, + sources, + deps, + node, + ...web + ); + + let result = all + .pipe(util.skipDirectories()) + .pipe(util.fixWin32DirectoryPermissions()); + + if (platform === 'win32') { + result = es.merge(result, + gulp.src('resources/server/bin/remote-cli/code.cmd', { base: '.' }) + .pipe(replace('@@VERSION@@', version)) + .pipe(replace('@@COMMIT@@', commit)) + .pipe(replace('@@APPNAME@@', product.applicationName)) + .pipe(rename(`bin/remote-cli/${product.applicationName}.cmd`)), + gulp.src('resources/server/bin/helpers/browser.cmd', { base: '.' }) + .pipe(replace('@@VERSION@@', version)) + .pipe(replace('@@COMMIT@@', commit)) + .pipe(replace('@@APPNAME@@', product.applicationName)) + .pipe(rename(`bin/helpers/browser.cmd`)), + gulp.src('resources/server/bin/code-server.cmd', { base: '.' }) + .pipe(rename(`bin/${product.serverApplicationName}.cmd`)), + ); + } else if (platform === 'linux' || platform === 'alpine' || platform === 'darwin') { + result = es.merge(result, + gulp.src(`resources/server/bin/remote-cli/${platform === 'darwin' ? 'code-darwin.sh' : 'code-linux.sh'}`, { base: '.' }) + .pipe(replace('@@VERSION@@', version)) + .pipe(replace('@@COMMIT@@', commit)) + .pipe(replace('@@APPNAME@@', product.applicationName)) + .pipe(rename(`bin/remote-cli/${product.applicationName}`)) + .pipe(util.setExecutableBit()), + gulp.src(`resources/server/bin/helpers/${platform === 'darwin' ? 'browser-darwin.sh' : 'browser-linux.sh'}`, { base: '.' }) + .pipe(replace('@@VERSION@@', version)) + .pipe(replace('@@COMMIT@@', commit)) + .pipe(replace('@@APPNAME@@', product.applicationName)) + .pipe(rename(`bin/helpers/browser.sh`)) + .pipe(util.setExecutableBit()), + gulp.src(`resources/server/bin/${platform === 'darwin' ? 'code-server-darwin.sh' : 'code-server-linux.sh'}`, { base: '.' }) + .pipe(rename(`bin/${product.serverApplicationName}`)) + .pipe(util.setExecutableBit()) + ); + } + + if (platform === 'linux' || platform === 'alpine') { + result = es.merge(result, + gulp.src(`resources/server/bin/helpers/check-requirements-linux.sh`, { base: '.' }) + .pipe(rename(`bin/helpers/check-requirements.sh`)) + .pipe(util.setExecutableBit()) + ); + } + + result = inlineMeta(result, { + targetPaths: bootstrapEntryPoints, + packageJsonFn: () => packageJsonContents, + productJsonFn: () => productJsonContents + }); + + return result.pipe(vfs.dest(destination)); + }; +} + +/** + * @param {object} product The parsed product.json file contents + */ +function tweakProductForServerWeb(product) { + const result = { ...product }; + delete result.webEndpointUrlTemplate; + return result; +} + +['reh', 'reh-web'].forEach(type => { + const bundleTask = task.define(`bundle-vscode-${type}`, task.series( + util.rimraf(`out-vscode-${type}`), + optimize.bundleTask( + { + out: `out-vscode-${type}`, + esm: { + src: 'out-build', + entryPoints: [ + ...(type === 'reh' ? serverEntryPoints : serverWithWebEntryPoints), + ...bootstrapEntryPoints + ], + resources: type === 'reh' ? serverResources : serverWithWebResources, + fileContentMapper: createVSCodeWebFileContentMapper('.build/extensions', type === 'reh-web' ? tweakProductForServerWeb(product) : product) + } + } + ) + )); + + const minifyTask = task.define(`minify-vscode-${type}`, task.series( + bundleTask, + util.rimraf(`out-vscode-${type}-min`), + optimize.minifyTask(`out-vscode-${type}`, `https://main.vscode-cdn.net/sourcemaps/${commit}/core`) + )); + gulp.task(minifyTask); + + BUILD_TARGETS.forEach(buildTarget => { + const dashed = (str) => (str ? `-${str}` : ``); + const platform = buildTarget.platform; + const arch = buildTarget.arch; + + ['', 'min'].forEach(minified => { + const sourceFolderName = `out-vscode-${type}${dashed(minified)}`; + const destinationFolderName = `vscode-${type}${dashed(platform)}${dashed(arch)}`; + + const serverTaskCI = task.define(`vscode-${type}${dashed(platform)}${dashed(arch)}${dashed(minified)}-ci`, task.series( + compileNativeExtensionsBuildTask, + gulp.task(`node-${platform}-${arch}`), + util.rimraf(path.join(BUILD_ROOT, destinationFolderName)), + packageTask(type, platform, arch, sourceFolderName, destinationFolderName) + )); + gulp.task(serverTaskCI); + + const serverTask = task.define(`vscode-${type}${dashed(platform)}${dashed(arch)}${dashed(minified)}`, task.series( + compileBuildWithManglingTask, + cleanExtensionsBuildTask, + compileNonNativeExtensionsBuildTask, + compileExtensionMediaBuildTask, + minified ? minifyTask : bundleTask, + serverTaskCI + )); + gulp.task(serverTask); + }); + }); +}); diff --git a/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/extensions/emmet/package-lock.json b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/extensions/emmet/package-lock.json new file mode 100644 index 0000000000..bbd320cc99 --- /dev/null +++ b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/extensions/emmet/package-lock.json @@ -0,0 +1,182 @@ +{ + "name": "emmet", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "emmet", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@emmetio/css-parser": "0.4.1", + "@emmetio/html-matcher": "^0.3.3", + "@emmetio/math-expression": "^1.0.5", + "@vscode/emmet-helper": "^2.8.8", + "image-size": "~1.0.0", + "vscode-languageserver-textdocument": "^1.0.1" + }, + "devDependencies": { + "@types/node": "22.x" + }, + "engines": { + "vscode": "^1.13.0" + } + }, + "node_modules/@emmetio/abbreviation": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.3.3.tgz", + "integrity": "sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==", + "dependencies": { + "@emmetio/scanner": "^1.0.4" + } + }, + "node_modules/@emmetio/css-abbreviation": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@emmetio/css-abbreviation/-/css-abbreviation-2.1.8.tgz", + "integrity": "sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==", + "dependencies": { + "@emmetio/scanner": "^1.0.4" + } + }, + "node_modules/@emmetio/css-parser": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@emmetio/css-parser/-/css-parser-0.4.1.tgz", + "integrity": "sha512-2bC6m0MV/voF4CTZiAbG5MWKbq5EBmDPKu9Sb7s7nVcEzNQlrZP6mFFFlIaISM8X6514H9shWMme1fCm8cWAfQ==", + "license": "MIT", + "dependencies": { + "@emmetio/stream-reader": "^2.2.0", + "@emmetio/stream-reader-utils": "^0.1.0" + } + }, + "node_modules/@emmetio/html-matcher": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@emmetio/html-matcher/-/html-matcher-0.3.3.tgz", + "integrity": "sha512-+aeGmFXoR36nk2qzqPhBnWjnB38BV+dreTh/tsfbWP9kHv7fqRa9XuG1BSQFbPtKzsjUsBvGXkgGU3G8MkMw6A==", + "license": "ISC", + "dependencies": { + "@emmetio/stream-reader": "^2.0.0", + "@emmetio/stream-reader-utils": "^0.1.0" + } + }, + "node_modules/@emmetio/math-expression": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@emmetio/math-expression/-/math-expression-1.0.5.tgz", + "integrity": "sha512-qf5SXD/ViS04rXSeDg9CRGM10xLC9dVaKIbMHrrwxYr5LNB/C0rOfokhGSBwnVQKcidLmdRJeNWH1V1tppZ84Q==", + "dependencies": { + "@emmetio/scanner": "^1.0.4" + } + }, + "node_modules/@emmetio/scanner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@emmetio/scanner/-/scanner-1.0.4.tgz", + "integrity": "sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==" + }, + "node_modules/@emmetio/stream-reader": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@emmetio/stream-reader/-/stream-reader-2.2.0.tgz", + "integrity": "sha1-Rs/+oRmgoAMxKiHC2bVijLX81EI= sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==" + }, + "node_modules/@emmetio/stream-reader-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@emmetio/stream-reader-utils/-/stream-reader-utils-0.1.0.tgz", + "integrity": "sha1-JEywLHfsLnT3ipvTGCGKvJxQCmE= sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A==" + }, + "node_modules/@types/node": { + "version": "22.13.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz", + "integrity": "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@vscode/emmet-helper": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.11.0.tgz", + "integrity": "sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw==", + "license": "MIT", + "dependencies": { + "emmet": "^2.4.3", + "jsonc-parser": "^2.3.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-languageserver-types": "^3.15.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/emmet": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/emmet/-/emmet-2.4.11.tgz", + "integrity": "sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==", + "license": "MIT", + "workspaces": [ + "./packages/scanner", + "./packages/abbreviation", + "./packages/css-abbreviation", + "./" + ], + "dependencies": { + "@emmetio/abbreviation": "^2.3.3", + "@emmetio/css-abbreviation": "^2.1.8" + } + }, + "node_modules/image-size": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.0.tgz", + "integrity": "sha512-JLJ6OwBfO1KcA+TvJT+v8gbE6iWbj24LyDNFgFEN0lzegn6cC6a/p3NIDaepMsJjQjlUWqIC7wJv8lBFxPNjcw==", + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/jsonc-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz", + "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==" + }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dependencies": { + "inherits": "~2.0.3" + } + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", + "license": "MIT" + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "license": "MIT" + }, + "node_modules/vscode-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", + "license": "MIT" + } + } +} diff --git a/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/extensions/emmet/package.json b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/extensions/emmet/package.json new file mode 100644 index 0000000000..9017773807 --- /dev/null +++ b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/extensions/emmet/package.json @@ -0,0 +1,498 @@ +{ + "name": "emmet", + "displayName": "Emmet", + "description": "%description%", + "version": "1.0.0", + "publisher": "vscode", + "license": "MIT", + "engines": { + "vscode": "^1.13.0" + }, + "icon": "images/icon.png", + "categories": [ + "Other" + ], + "repository": { + "type": "git", + "url": "https://github.com/microsoft/vscode.git" + }, + "activationEvents": [ + "onCommand:emmet.expandAbbreviation", + "onLanguage" + ], + "main": "./out/node/emmetNodeMain", + "browser": "./dist/browser/emmetBrowserMain", + "contributes": { + "configuration": { + "type": "object", + "title": "Emmet", + "properties": { + "emmet.showExpandedAbbreviation": { + "type": [ + "string" + ], + "enum": [ + "never", + "always", + "inMarkupAndStylesheetFilesOnly" + ], + "default": "always", + "markdownDescription": "%emmetShowExpandedAbbreviation%" + }, + "emmet.showAbbreviationSuggestions": { + "type": "boolean", + "default": true, + "scope": "language-overridable", + "markdownDescription": "%emmetShowAbbreviationSuggestions%" + }, + "emmet.includeLanguages": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "default": {}, + "markdownDescription": "%emmetIncludeLanguages%" + }, + "emmet.variables": { + "type": "object", + "properties": { + "lang": { + "type": "string", + "default": "en" + }, + "charset": { + "type": "string", + "default": "UTF-8" + } + }, + "additionalProperties": { + "type": "string" + }, + "default": {}, + "markdownDescription": "%emmetVariables%" + }, + "emmet.syntaxProfiles": { + "type": "object", + "default": {}, + "markdownDescription": "%emmetSyntaxProfiles%" + }, + "emmet.excludeLanguages": { + "type": "array", + "items": { + "type": "string" + }, + "default": [ + "markdown" + ], + "markdownDescription": "%emmetExclude%" + }, + "emmet.extensionsPath": { + "type": "array", + "items": { + "type": "string", + "markdownDescription": "%emmetExtensionsPathItem%" + }, + "default": [], + "scope": "machine-overridable", + "markdownDescription": "%emmetExtensionsPath%" + }, + "emmet.triggerExpansionOnTab": { + "type": "boolean", + "default": false, + "scope": "language-overridable", + "markdownDescription": "%emmetTriggerExpansionOnTab%" + }, + "emmet.useInlineCompletions": { + "type": "boolean", + "default": false, + "markdownDescription": "%emmetUseInlineCompletions%" + }, + "emmet.preferences": { + "type": "object", + "default": {}, + "markdownDescription": "%emmetPreferences%", + "properties": { + "css.intUnit": { + "type": "string", + "default": "px", + "markdownDescription": "%emmetPreferencesIntUnit%" + }, + "css.floatUnit": { + "type": "string", + "default": "em", + "markdownDescription": "%emmetPreferencesFloatUnit%" + }, + "css.propertyEnd": { + "type": "string", + "default": ";", + "markdownDescription": "%emmetPreferencesCssAfter%" + }, + "sass.propertyEnd": { + "type": "string", + "default": "", + "markdownDescription": "%emmetPreferencesSassAfter%" + }, + "stylus.propertyEnd": { + "type": "string", + "default": "", + "markdownDescription": "%emmetPreferencesStylusAfter%" + }, + "css.valueSeparator": { + "type": "string", + "default": ": ", + "markdownDescription": "%emmetPreferencesCssBetween%" + }, + "sass.valueSeparator": { + "type": "string", + "default": ": ", + "markdownDescription": "%emmetPreferencesSassBetween%" + }, + "stylus.valueSeparator": { + "type": "string", + "default": " ", + "markdownDescription": "%emmetPreferencesStylusBetween%" + }, + "bem.elementSeparator": { + "type": "string", + "default": "__", + "markdownDescription": "%emmetPreferencesBemElementSeparator%" + }, + "bem.modifierSeparator": { + "type": "string", + "default": "_", + "markdownDescription": "%emmetPreferencesBemModifierSeparator%" + }, + "filter.commentBefore": { + "type": "string", + "default": "", + "markdownDescription": "%emmetPreferencesFilterCommentBefore%" + }, + "filter.commentAfter": { + "type": "string", + "default": "\n", + "markdownDescription": "%emmetPreferencesFilterCommentAfter%" + }, + "filter.commentTrigger": { + "type": "array", + "default": [ + "id", + "class" + ], + "markdownDescription": "%emmetPreferencesFilterCommentTrigger%" + }, + "format.noIndentTags": { + "type": "array", + "default": [ + "html" + ], + "markdownDescription": "%emmetPreferencesFormatNoIndentTags%" + }, + "format.forceIndentationForTags": { + "type": "array", + "default": [ + "body" + ], + "markdownDescription": "%emmetPreferencesFormatForceIndentTags%" + }, + "profile.allowCompactBoolean": { + "type": "boolean", + "default": false, + "markdownDescription": "%emmetPreferencesAllowCompactBoolean%" + }, + "css.webkitProperties": { + "type": "string", + "default": null, + "markdownDescription": "%emmetPreferencesCssWebkitProperties%" + }, + "css.mozProperties": { + "type": "string", + "default": null, + "markdownDescription": "%emmetPreferencesCssMozProperties%" + }, + "css.oProperties": { + "type": "string", + "default": null, + "markdownDescription": "%emmetPreferencesCssOProperties%" + }, + "css.msProperties": { + "type": "string", + "default": null, + "markdownDescription": "%emmetPreferencesCssMsProperties%" + }, + "css.fuzzySearchMinScore": { + "type": "number", + "default": 0.3, + "markdownDescription": "%emmetPreferencesCssFuzzySearchMinScore%" + }, + "output.inlineBreak": { + "type": "number", + "default": 0, + "markdownDescription": "%emmetPreferencesOutputInlineBreak%" + }, + "output.reverseAttributes": { + "type": "boolean", + "default": false, + "markdownDescription": "%emmetPreferencesOutputReverseAttributes%" + }, + "output.selfClosingStyle": { + "type": "string", + "enum": [ + "html", + "xhtml", + "xml" + ], + "default": "html", + "markdownDescription": "%emmetPreferencesOutputSelfClosingStyle%" + }, + "css.color.short": { + "type": "boolean", + "default": true, + "markdownDescription": "%emmetPreferencesCssColorShort%" + } + } + }, + "emmet.showSuggestionsAsSnippets": { + "type": "boolean", + "default": false, + "markdownDescription": "%emmetShowSuggestionsAsSnippets%" + }, + "emmet.optimizeStylesheetParsing": { + "type": "boolean", + "default": true, + "markdownDescription": "%emmetOptimizeStylesheetParsing%" + } + } + }, + "commands": [ + { + "command": "editor.emmet.action.wrapWithAbbreviation", + "title": "%command.wrapWithAbbreviation%", + "category": "Emmet" + }, + { + "command": "editor.emmet.action.removeTag", + "title": "%command.removeTag%", + "category": "Emmet" + }, + { + "command": "editor.emmet.action.updateTag", + "title": "%command.updateTag%", + "category": "Emmet" + }, + { + "command": "editor.emmet.action.matchTag", + "title": "%command.matchTag%", + "category": "Emmet" + }, + { + "command": "editor.emmet.action.balanceIn", + "title": "%command.balanceIn%", + "category": "Emmet" + }, + { + "command": "editor.emmet.action.balanceOut", + "title": "%command.balanceOut%", + "category": "Emmet" + }, + { + "command": "editor.emmet.action.prevEditPoint", + "title": "%command.prevEditPoint%", + "category": "Emmet" + }, + { + "command": "editor.emmet.action.nextEditPoint", + "title": "%command.nextEditPoint%", + "category": "Emmet" + }, + { + "command": "editor.emmet.action.mergeLines", + "title": "%command.mergeLines%", + "category": "Emmet" + }, + { + "command": "editor.emmet.action.selectPrevItem", + "title": "%command.selectPrevItem%", + "category": "Emmet" + }, + { + "command": "editor.emmet.action.selectNextItem", + "title": "%command.selectNextItem%", + "category": "Emmet" + }, + { + "command": "editor.emmet.action.splitJoinTag", + "title": "%command.splitJoinTag%", + "category": "Emmet" + }, + { + "command": "editor.emmet.action.toggleComment", + "title": "%command.toggleComment%", + "category": "Emmet" + }, + { + "command": "editor.emmet.action.evaluateMathExpression", + "title": "%command.evaluateMathExpression%", + "category": "Emmet" + }, + { + "command": "editor.emmet.action.updateImageSize", + "title": "%command.updateImageSize%", + "category": "Emmet" + }, + { + "command": "editor.emmet.action.incrementNumberByOneTenth", + "title": "%command.incrementNumberByOneTenth%", + "category": "Emmet" + }, + { + "command": "editor.emmet.action.incrementNumberByOne", + "title": "%command.incrementNumberByOne%", + "category": "Emmet" + }, + { + "command": "editor.emmet.action.incrementNumberByTen", + "title": "%command.incrementNumberByTen%", + "category": "Emmet" + }, + { + "command": "editor.emmet.action.decrementNumberByOneTenth", + "title": "%command.decrementNumberByOneTenth%", + "category": "Emmet" + }, + { + "command": "editor.emmet.action.decrementNumberByOne", + "title": "%command.decrementNumberByOne%", + "category": "Emmet" + }, + { + "command": "editor.emmet.action.decrementNumberByTen", + "title": "%command.decrementNumberByTen%", + "category": "Emmet" + }, + { + "command": "editor.emmet.action.reflectCSSValue", + "title": "%command.reflectCSSValue%", + "category": "Emmet" + }, + { + "command": "workbench.action.showEmmetCommands", + "title": "%command.showEmmetCommands%", + "category": "" + } + ], + "menus": { + "commandPalette": [ + { + "command": "editor.emmet.action.wrapWithAbbreviation", + "when": "!activeEditorIsReadonly" + }, + { + "command": "editor.emmet.action.removeTag", + "when": "!activeEditorIsReadonly" + }, + { + "command": "editor.emmet.action.updateTag", + "when": "!activeEditorIsReadonly" + }, + { + "command": "editor.emmet.action.matchTag", + "when": "!activeEditorIsReadonly" + }, + { + "command": "editor.emmet.action.balanceIn", + "when": "!activeEditorIsReadonly" + }, + { + "command": "editor.emmet.action.balanceOut", + "when": "!activeEditorIsReadonly" + }, + { + "command": "editor.emmet.action.prevEditPoint", + "when": "!activeEditorIsReadonly" + }, + { + "command": "editor.emmet.action.nextEditPoint", + "when": "!activeEditorIsReadonly" + }, + { + "command": "editor.emmet.action.mergeLines", + "when": "!activeEditorIsReadonly" + }, + { + "command": "editor.emmet.action.selectPrevItem", + "when": "!activeEditorIsReadonly" + }, + { + "command": "editor.emmet.action.selectNextItem", + "when": "!activeEditorIsReadonly" + }, + { + "command": "editor.emmet.action.splitJoinTag", + "when": "!activeEditorIsReadonly" + }, + { + "command": "editor.emmet.action.toggleComment", + "when": "!activeEditorIsReadonly" + }, + { + "command": "editor.emmet.action.evaluateMathExpression", + "when": "!activeEditorIsReadonly" + }, + { + "command": "editor.emmet.action.updateImageSize", + "when": "!activeEditorIsReadonly" + }, + { + "command": "editor.emmet.action.incrementNumberByOneTenth", + "when": "!activeEditorIsReadonly" + }, + { + "command": "editor.emmet.action.incrementNumberByOne", + "when": "!activeEditorIsReadonly" + }, + { + "command": "editor.emmet.action.incrementNumberByTen", + "when": "!activeEditorIsReadonly" + }, + { + "command": "editor.emmet.action.decrementNumberByOneTenth", + "when": "!activeEditorIsReadonly" + }, + { + "command": "editor.emmet.action.decrementNumberByOne", + "when": "!activeEditorIsReadonly" + }, + { + "command": "editor.emmet.action.decrementNumberByTen", + "when": "!activeEditorIsReadonly" + }, + { + "command": "editor.emmet.action.reflectCSSValue", + "when": "!activeEditorIsReadonly" + } + ] + } + }, + "scripts": { + "watch": "gulp watch-extension:emmet", + "compile": "gulp compile-extension:emmet", + "deps": "npm install @vscode/emmet-helper" + }, + "devDependencies": { + "@types/node": "22.x" + }, + "dependencies": { + "@emmetio/css-parser": "0.4.1", + "@emmetio/html-matcher": "^0.3.3", + "@emmetio/math-expression": "^1.0.5", + "@vscode/emmet-helper": "^2.8.8", + "image-size": "~1.0.0", + "vscode-languageserver-textdocument": "^1.0.1" + }, + "capabilities": { + "virtualWorkspaces": true, + "untrustedWorkspaces": { + "supported": true + } + } +} diff --git a/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/extensions/package-lock.json b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/extensions/package-lock.json new file mode 100644 index 0000000000..895a8129bd --- /dev/null +++ b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/extensions/package-lock.json @@ -0,0 +1,688 @@ +{ + "name": "vscode-extensions", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "vscode-extensions", + "version": "0.0.1", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "typescript": "^5.9.3" + }, + "devDependencies": { + "@parcel/watcher": "2.5.6", + "esbuild": "0.25.0", + "vscode-grammar-updater": "^1.1.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz", + "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz", + "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz", + "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz", + "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz", + "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz", + "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz", + "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz", + "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz", + "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz", + "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz", + "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz", + "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz", + "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz", + "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz", + "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz", + "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz", + "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz", + "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz", + "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz", + "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz", + "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz", + "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz", + "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz", + "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz", + "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", + "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/coffeescript": { + "version": "1.12.7", + "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.12.7.tgz", + "integrity": "sha512-pLXHFxQMPklVoEekowk8b3erNynC+DVJzChxS/LCBBgR6/8AJkHivkm//zbowcfc7BTCAjryuhx6gPqPRfsFoA==", + "dev": true, + "bin": { + "cake": "bin/cake", + "coffee": "bin/coffee" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/cson-parser": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/cson-parser/-/cson-parser-4.0.9.tgz", + "integrity": "sha512-I79SAcCYquWnEfXYj8hBqOOWKj6eH6zX1hhX3yqmS4K3bYp7jME3UFpHPzu3rUew0oyfc0s8T6IlWGXRAheHag==", + "dev": true, + "dependencies": { + "coffeescript": "1.12.7" + }, + "engines": { + "node": ">=10.13" + } + }, + "node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/esbuild": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz", + "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.0", + "@esbuild/android-arm": "0.25.0", + "@esbuild/android-arm64": "0.25.0", + "@esbuild/android-x64": "0.25.0", + "@esbuild/darwin-arm64": "0.25.0", + "@esbuild/darwin-x64": "0.25.0", + "@esbuild/freebsd-arm64": "0.25.0", + "@esbuild/freebsd-x64": "0.25.0", + "@esbuild/linux-arm": "0.25.0", + "@esbuild/linux-arm64": "0.25.0", + "@esbuild/linux-ia32": "0.25.0", + "@esbuild/linux-loong64": "0.25.0", + "@esbuild/linux-mips64el": "0.25.0", + "@esbuild/linux-ppc64": "0.25.0", + "@esbuild/linux-riscv64": "0.25.0", + "@esbuild/linux-s390x": "0.25.0", + "@esbuild/linux-x64": "0.25.0", + "@esbuild/netbsd-arm64": "0.25.0", + "@esbuild/netbsd-x64": "0.25.0", + "@esbuild/openbsd-arm64": "0.25.0", + "@esbuild/openbsd-x64": "0.25.0", + "@esbuild/sunos-x64": "0.25.0", + "@esbuild/win32-arm64": "0.25.0", + "@esbuild/win32-ia32": "0.25.0", + "@esbuild/win32-x64": "0.25.0" + } + }, + "node_modules/fast-plist": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/fast-plist/-/fast-plist-0.1.2.tgz", + "integrity": "sha1-pFr/NFGWAG1AbKbNzQX2kFHvNbg= sha512-2HxzrqJhmMoxVzARjYFvkzkL2dCBB8sogU5sD8gqcZWv5UCivK9/cXM9KIPDRwU+eD3mbRDN/GhW8bO/4dtMfg==", + "dev": true + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.0.tgz", + "integrity": "sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16 || ^18 || >= 20" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/vscode-grammar-updater": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vscode-grammar-updater/-/vscode-grammar-updater-1.1.0.tgz", + "integrity": "sha512-rWcJXyEFK27Mh9bxfBTLaul0KiGQk0GMXj2qTDH9cy3UZVx5MrF035B03os1w4oIXwl/QDhdLnsBK0j2SNiL1A==", + "dev": true, + "dependencies": { + "cson-parser": "^4.0.9", + "fast-plist": "0.1.2" + }, + "bin": { + "vscode-grammar-updater": "bin.js" + } + } + } +} diff --git a/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/extensions/package.json b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/extensions/package.json new file mode 100644 index 0000000000..57b5d5d0a3 --- /dev/null +++ b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/extensions/package.json @@ -0,0 +1,20 @@ +{ + "name": "vscode-extensions", + "version": "0.0.1", + "license": "MIT", + "description": "Dependencies shared by all extensions", + "dependencies": { + "typescript": "^5.9.3" + }, + "scripts": { + "postinstall": "node ./postinstall.mjs" + }, + "devDependencies": { + "@parcel/watcher": "2.5.6", + "esbuild": "0.25.0", + "vscode-grammar-updater": "^1.1.0" + }, + "overrides": { + "node-gyp-build": "4.8.1" + } +} diff --git a/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/package-lock.json b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/package-lock.json index f4cab8fe82..9b9f4e43b8 100644 --- a/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/package-lock.json +++ b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/package-lock.json @@ -12,7 +12,7 @@ "dependencies": { "@microsoft/1ds-core-js": "^3.2.13", "@microsoft/1ds-post-js": "^3.2.13", - "@parcel/watcher": "parcel-bundler/watcher#1ca032aa8339260a8a3bcf825c3a1a71e3e43542", + "@parcel/watcher": "2.5.6", "@types/semver": "^7.5.8", "@vscode/deviceid": "^0.1.1", "@vscode/iconv-lite-umd": "0.7.1", @@ -1665,25 +1665,34 @@ } }, "node_modules/@parcel/watcher": { - "version": "2.5.1", - "resolved": "git+ssh://git@github.com/parcel-bundler/watcher.git#1ca032aa8339260a8a3bcf825c3a1a71e3e43542", - "integrity": "sha512-Z0lk8pM5vwuOJU6pfheRXHrOpQYIIEnVl/z8DY6370D4+ZnrOTvFa5BUdf3pGxahT5ILbPWwQSm2Wthy4q1OTg==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", + "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", "hasInstallScript": true, "license": "MIT", "dependencies": { "detect-libc": "^2.0.3", "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "node-addon-api": "^7.0.0" + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" }, "engines": { - "node": ">= 10.0.0" + "node": ">=10.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" } }, + "node_modules/@parcel/watcher/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", diff --git a/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/package.json b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/package.json index a179c2794d..2802d034a3 100644 --- a/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/package.json +++ b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/package.json @@ -74,7 +74,7 @@ "dependencies": { "@microsoft/1ds-core-js": "^3.2.13", "@microsoft/1ds-post-js": "^3.2.13", - "@parcel/watcher": "parcel-bundler/watcher#1ca032aa8339260a8a3bcf825c3a1a71e3e43542", + "@parcel/watcher": "2.5.6", "@types/semver": "^7.5.8", "@vscode/deviceid": "^0.1.1", "@vscode/iconv-lite-umd": "0.7.1", diff --git a/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/remote/package-lock.json b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/remote/package-lock.json new file mode 100644 index 0000000000..d278ac609f --- /dev/null +++ b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/remote/package-lock.json @@ -0,0 +1,1257 @@ +{ + "name": "vscode-reh", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "vscode-reh", + "version": "0.0.0", + "dependencies": { + "@microsoft/1ds-core-js": "^3.2.13", + "@microsoft/1ds-post-js": "^3.2.13", + "@parcel/watcher": "2.5.6", + "@vscode/deviceid": "^0.1.1", + "@vscode/iconv-lite-umd": "0.7.1", + "@vscode/proxy-agent": "^0.36.0", + "@vscode/ripgrep": "^1.15.13", + "@vscode/spdlog": "^0.15.2", + "@vscode/tree-sitter-wasm": "^0.2.0", + "@vscode/vscode-languagedetection": "1.0.21", + "@vscode/windows-process-tree": "^0.6.0", + "@vscode/windows-registry": "^1.1.0", + "@xterm/addon-clipboard": "^0.2.0-beta.119", + "@xterm/addon-image": "^0.9.0-beta.136", + "@xterm/addon-ligatures": "^0.10.0-beta.136", + "@xterm/addon-progress": "^0.2.0-beta.42", + "@xterm/addon-search": "^0.16.0-beta.136", + "@xterm/addon-serialize": "^0.14.0-beta.136", + "@xterm/addon-unicode11": "^0.9.0-beta.136", + "@xterm/addon-webgl": "^0.19.0-beta.136", + "@xterm/headless": "^5.6.0-beta.136", + "@xterm/xterm": "^5.6.0-beta.136", + "cookie": "^0.7.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "jschardet": "3.1.4", + "katex": "^0.16.22", + "kerberos": "2.1.1", + "minimist": "^1.2.8", + "native-watchdog": "^1.4.1", + "node-pty": "1.1.0-beta35", + "tas-client-umd": "0.2.0", + "vscode-oniguruma": "1.7.0", + "vscode-regexpp": "^3.1.0", + "vscode-textmate": "^9.2.1", + "yauzl": "^3.0.0", + "yazl": "^2.4.3" + } + }, + "node_modules/@microsoft/1ds-core-js": { + "version": "3.2.13", + "resolved": "https://registry.npmjs.org/@microsoft/1ds-core-js/-/1ds-core-js-3.2.13.tgz", + "integrity": "sha512-CluYTRWcEk0ObG5EWFNWhs87e2qchJUn0p2D21ZUa3PWojPZfPSBs4//WIE0MYV8Qg1Hdif2ZTwlM7TbYUjfAg==", + "dependencies": { + "@microsoft/applicationinsights-core-js": "2.8.15", + "@microsoft/applicationinsights-shims": "^2.0.2", + "@microsoft/dynamicproto-js": "^1.1.7" + } + }, + "node_modules/@microsoft/1ds-post-js": { + "version": "3.2.13", + "resolved": "https://registry.npmjs.org/@microsoft/1ds-post-js/-/1ds-post-js-3.2.13.tgz", + "integrity": "sha512-HgS574fdD19Bo2vPguyznL4eDw7Pcm1cVNpvbvBLWiW3x4e1FCQ3VMXChWnAxCae8Hb0XqlA2sz332ZobBavTA==", + "dependencies": { + "@microsoft/1ds-core-js": "3.2.13", + "@microsoft/applicationinsights-shims": "^2.0.2", + "@microsoft/dynamicproto-js": "^1.1.7" + } + }, + "node_modules/@microsoft/applicationinsights-core-js": { + "version": "2.8.15", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-core-js/-/applicationinsights-core-js-2.8.15.tgz", + "integrity": "sha512-yYAs9MyjGr2YijQdUSN9mVgT1ijI1FPMgcffpaPmYbHAVbQmF7bXudrBWHxmLzJlwl5rfep+Zgjli2e67lwUqQ==", + "dependencies": { + "@microsoft/applicationinsights-shims": "2.0.2", + "@microsoft/dynamicproto-js": "^1.1.9" + }, + "peerDependencies": { + "tslib": "*" + } + }, + "node_modules/@microsoft/applicationinsights-shims": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-shims/-/applicationinsights-shims-2.0.2.tgz", + "integrity": "sha512-PoHEgsnmcqruLNHZ/amACqdJ6YYQpED0KSRe6J7gIJTtpZC1FfFU9b1fmDKDKtFoUSrPzEh1qzO3kmRZP0betg==" + }, + "node_modules/@microsoft/dynamicproto-js": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@microsoft/dynamicproto-js/-/dynamicproto-js-1.1.9.tgz", + "integrity": "sha512-n1VPsljTSkthsAFYdiWfC+DKzK2WwcRp83Y1YAqdX552BstvsDjft9YXppjUzp11BPsapDoO1LDgrDB0XVsfNQ==" + }, + "node_modules/@parcel/watcher": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", + "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/@tootallnate/once": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-3.0.0.tgz", + "integrity": "sha512-OAdBVB7rlwvLD+DiecSAyVKzKVmSfXbouCyM5I6wHGi4MGXIyFqErg1IvyJ7PI1e+GYZuZh7cCHV/c4LA8SKMw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@vscode/deviceid": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@vscode/deviceid/-/deviceid-0.1.1.tgz", + "integrity": "sha512-ErpoMeKKNYAkR1IT3zxB5RtiTqEECdh8fxggupWvzuxpTAX77hwOI2NdJ7um+vupnXRBZVx4ugo0+dVHJWUkag==", + "hasInstallScript": true, + "dependencies": { + "fs-extra": "^11.2.0", + "uuid": "^9.0.1" + } + }, + "node_modules/@vscode/iconv-lite-umd": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@vscode/iconv-lite-umd/-/iconv-lite-umd-0.7.1.tgz", + "integrity": "sha512-tK6k0DXFHW7q5+GGuGZO+phpAqpxO4WXl+BLc/8/uOk3RsM2ssAL3CQUQDb1TGfwltjsauhN6S4ghYZzs4sPFw==", + "license": "MIT" + }, + "node_modules/@vscode/proxy-agent": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/@vscode/proxy-agent/-/proxy-agent-0.36.0.tgz", + "integrity": "sha512-W4mls/+zErqTYcKC41utdmoYnBWZRH1dRF9U4cBAyKU5EhcnWfVsPBvUnXXw1CffI3djmMWnu9JrF/Ynw7lkcg==", + "license": "MIT", + "dependencies": { + "@tootallnate/once": "^3.0.0", + "agent-base": "^7.0.1", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "socks-proxy-agent": "^8.0.1", + "undici": "^7.2.0" + }, + "engines": { + "node": ">=22.15.0" + }, + "optionalDependencies": { + "@vscode/windows-ca-certs": "^0.3.1" + } + }, + "node_modules/@vscode/ripgrep": { + "version": "1.15.14", + "resolved": "https://registry.npmjs.org/@vscode/ripgrep/-/ripgrep-1.15.14.tgz", + "integrity": "sha512-/G1UJPYlm+trBWQ6cMO3sv6b8D1+G16WaJH1/DSqw32JOVlzgZbLkDxRyzIpTpv30AcYGMkCf5tUqGlW6HbDWw==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "https-proxy-agent": "^7.0.2", + "proxy-from-env": "^1.1.0", + "yauzl": "^2.9.2" + } + }, + "node_modules/@vscode/ripgrep/node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/@vscode/spdlog": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@vscode/spdlog/-/spdlog-0.15.2.tgz", + "integrity": "sha512-8RQ7JEs81x5IFONYGtFhYtaF2a3IPtNtgMdp+MFLxTDokJQBAVittx0//EN38BYhlzeVqEPgusRsOA8Yulaysg==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "bindings": "^1.5.0", + "mkdirp": "^1.0.4", + "node-addon-api": "7.1.0" + } + }, + "node_modules/@vscode/tree-sitter-wasm": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@vscode/tree-sitter-wasm/-/tree-sitter-wasm-0.2.0.tgz", + "integrity": "sha512-abvLfKwmriqgdS4WrIzFK7mzdPUVqIIW1UWarp2lA8lpOZ1EDPL1snRBKe7g+5R5ri173mNJEuPLnG/NlpMp4w==", + "license": "MIT" + }, + "node_modules/@vscode/vscode-languagedetection": { + "version": "1.0.21", + "resolved": "https://registry.npmjs.org/@vscode/vscode-languagedetection/-/vscode-languagedetection-1.0.21.tgz", + "integrity": "sha512-zSUH9HYCw5qsCtd7b31yqkpaCU6jhtkKLkvOOA8yTrIRfBSOFb8PPhgmMicD7B/m+t4PwOJXzU1XDtrM9Fd3/g==", + "bin": { + "vscode-languagedetection": "cli/index.js" + } + }, + "node_modules/@vscode/windows-ca-certs": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@vscode/windows-ca-certs/-/windows-ca-certs-0.3.3.tgz", + "integrity": "sha512-C0Iq5RcH+H31GUZ8bsMORsX3LySVkGAqe4kQfUSVcCqJ0QOhXkhgwUMU7oCiqYLXaQWyXFp6Fj6eMdt05uK7VA==", + "hasInstallScript": true, + "license": "BSD", + "optional": true, + "os": [ + "win32" + ], + "dependencies": { + "node-addon-api": "^8.2.0" + } + }, + "node_modules/@vscode/windows-ca-certs/node_modules/node-addon-api": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.2.0.tgz", + "integrity": "sha512-qnyuI2ROiCkye42n9Tj5aX1ns7rzj6n7zW1XReSnLSL9v/vbLeR6fJq6PU27YU/ICfYw6W7Ouk/N7cysWu/hlw==", + "license": "MIT", + "optional": true, + "engines": { + "node": "^18 || ^20 || >= 21" + } + }, + "node_modules/@vscode/windows-process-tree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@vscode/windows-process-tree/-/windows-process-tree-0.6.0.tgz", + "integrity": "sha512-7/DjBKKUtlmKNiAet2GRbdvfjgMKmfBeWVClIgONv8aqxGnaKca5N85eIDxh6rLMy2hKvFqIIsqgxs1Q26TWwg==", + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "7.1.0" + } + }, + "node_modules/@vscode/windows-registry": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@vscode/windows-registry/-/windows-registry-1.1.0.tgz", + "integrity": "sha512-5AZzuWJpGscyiMOed0IuyEwt6iKmV5Us7zuwCDCFYMIq7tsvooO9BUiciywsvuthGz6UG4LSpeDeCxvgMVhnIw==", + "hasInstallScript": true + }, + "node_modules/@xterm/addon-clipboard": { + "version": "0.2.0-beta.119", + "resolved": "https://registry.npmjs.org/@xterm/addon-clipboard/-/addon-clipboard-0.2.0-beta.119.tgz", + "integrity": "sha512-yWmCpGuTvSaIeEfdSijdf8K8qRAYuEGnKkaJZ6er+cOzdmGHBNzyBDKKeyins0aV2j4CGKPDiWHQF5+qGzZDGw==", + "license": "MIT", + "dependencies": { + "js-base64": "^3.7.5" + }, + "peerDependencies": { + "@xterm/xterm": "^5.6.0-beta.136" + } + }, + "node_modules/@xterm/addon-image": { + "version": "0.9.0-beta.136", + "resolved": "https://registry.npmjs.org/@xterm/addon-image/-/addon-image-0.9.0-beta.136.tgz", + "integrity": "sha512-syWhqpFMAcQ1+US0JjFzj0ORokj8hkz2VgXcCCbTfO0cDtpSYYxMNLaY2fpL459rnOFB4olI9Nf9PZdonmBPDw==", + "license": "MIT", + "peerDependencies": { + "@xterm/xterm": "^5.6.0-beta.136" + } + }, + "node_modules/@xterm/addon-ligatures": { + "version": "0.10.0-beta.136", + "resolved": "https://registry.npmjs.org/@xterm/addon-ligatures/-/addon-ligatures-0.10.0-beta.136.tgz", + "integrity": "sha512-WkvL7BVdoqpNf8QsH4n37Pu7jEZTiJ+OD4FmLMVavw0euhgG18zzJKNKIYRuKcddR52dT/Q8TrspVJofpL98GQ==", + "license": "MIT", + "dependencies": { + "font-finder": "^1.1.0", + "font-ligatures": "^1.4.1" + }, + "engines": { + "node": ">8.0.0" + }, + "peerDependencies": { + "@xterm/xterm": "^5.6.0-beta.136" + } + }, + "node_modules/@xterm/addon-progress": { + "version": "0.2.0-beta.42", + "resolved": "https://registry.npmjs.org/@xterm/addon-progress/-/addon-progress-0.2.0-beta.42.tgz", + "integrity": "sha512-C5w7y6rwSUdRcEiJHFnB2qJI/6DBOi/fJAvTmIpmNZE60cVnrLUuyLmXh6aKbSQ44J6W3PrD5xthb8re3UVUOw==", + "license": "MIT", + "peerDependencies": { + "@xterm/xterm": "^5.6.0-beta.136" + } + }, + "node_modules/@xterm/addon-search": { + "version": "0.16.0-beta.136", + "resolved": "https://registry.npmjs.org/@xterm/addon-search/-/addon-search-0.16.0-beta.136.tgz", + "integrity": "sha512-Y2T/ShQBelmOGy7lup3VEfFF/yXeNkkMXqhGftmjzmwSA+eylFW+92vczMSrckTW++EFvVLR/L5jMXiSw0qOWQ==", + "license": "MIT", + "peerDependencies": { + "@xterm/xterm": "^5.6.0-beta.136" + } + }, + "node_modules/@xterm/addon-serialize": { + "version": "0.14.0-beta.136", + "resolved": "https://registry.npmjs.org/@xterm/addon-serialize/-/addon-serialize-0.14.0-beta.136.tgz", + "integrity": "sha512-ursvqITzhZrBQT8XsbOyAQJJKohv33NEm6ToLtMZUmPurBG6KXlVZ9LAPs2YpCBqkifLktSE1GdsofJCpADWuA==", + "license": "MIT", + "peerDependencies": { + "@xterm/xterm": "^5.6.0-beta.136" + } + }, + "node_modules/@xterm/addon-unicode11": { + "version": "0.9.0-beta.136", + "resolved": "https://registry.npmjs.org/@xterm/addon-unicode11/-/addon-unicode11-0.9.0-beta.136.tgz", + "integrity": "sha512-RwtNbON1uNndrtPCM6qMMElTTpxs7ZLRQVbSm4/BMW6GAt6AbW1RAqwoxMRhbz7VVTux/c3HcKfj3SI1MhqSOw==", + "license": "MIT", + "peerDependencies": { + "@xterm/xterm": "^5.6.0-beta.136" + } + }, + "node_modules/@xterm/addon-webgl": { + "version": "0.19.0-beta.136", + "resolved": "https://registry.npmjs.org/@xterm/addon-webgl/-/addon-webgl-0.19.0-beta.136.tgz", + "integrity": "sha512-MzVlFKrlgJjKQ6T4/TuamvlvR2FFDvxAPY90lo9u4899k7NNif+M8bBdNea3+bsPMU3fKLhGHoTp0+8MjskaeA==", + "license": "MIT", + "peerDependencies": { + "@xterm/xterm": "^5.6.0-beta.136" + } + }, + "node_modules/@xterm/headless": { + "version": "5.6.0-beta.136", + "resolved": "https://registry.npmjs.org/@xterm/headless/-/headless-5.6.0-beta.136.tgz", + "integrity": "sha512-3irueWS6Ei+XlTMCuh6ZWj1tBnVvjitDtD4PN+v81RKjaCNO/QN9abGTHQx+651GP291ESwY8ocKThSoQ9yklw==", + "license": "MIT" + }, + "node_modules/@xterm/xterm": { + "version": "5.6.0-beta.136", + "resolved": "https://registry.npmjs.org/@xterm/xterm/-/xterm-5.6.0-beta.136.tgz", + "integrity": "sha512-cOWfdbPUYjV8qJY0yg/HdJBiq/hl8J2NRma563crQbSveDpuiiKV+T+ZVeGKQ2YZztLCz6h+kox6J7LQcPtpiQ==", + "license": "MIT" + }, + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "engines": { + "node": "*" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/font-finder": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/font-finder/-/font-finder-1.1.0.tgz", + "integrity": "sha512-wpCL2uIbi6GurJbU7ZlQ3nGd61Ho+dSU6U83/xJT5UPFfN35EeCW/rOtS+5k+IuEZu2SYmHzDIPL9eA5tSYRAw==", + "license": "MIT", + "dependencies": { + "get-system-fonts": "^2.0.0", + "promise-stream-reader": "^1.0.1" + }, + "engines": { + "node": ">8.0.0" + } + }, + "node_modules/font-ligatures": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/font-ligatures/-/font-ligatures-1.4.1.tgz", + "integrity": "sha512-7W6zlfyhvCqShZ5ReUWqmSd9vBaUudW0Hxis+tqUjtHhsPU+L3Grf8mcZAtCiXHTzorhwdRTId2WeH/88gdFkw==", + "license": "MIT", + "dependencies": { + "font-finder": "^1.0.3", + "lru-cache": "^6.0.0", + "opentype.js": "^0.8.0" + }, + "engines": { + "node": ">8.0.0" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/get-system-fonts": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-system-fonts/-/get-system-fonts-2.0.2.tgz", + "integrity": "sha512-zzlgaYnHMIEgHRrfC7x0Qp0Ylhw/sHpM6MHXeVBTYIsvGf5GpbnClB+Q6rAPdn+0gd2oZZIo6Tj3EaWrt4VhDQ==", + "license": "MIT", + "engines": { + "node": ">8.0.0" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/http-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/js-base64": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", + "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==" + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" + }, + "node_modules/jschardet": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-3.1.4.tgz", + "integrity": "sha512-/kmVISmrwVwtyYU40iQUOp3SUPk2dhNCMsZBQX0R1/jZ8maaXJ/oZIzUOiyOqcgtLnETFKYChbJ5iDC/eWmFHg==", + "license": "LGPL-2.1+", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/katex": { + "version": "0.16.22", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.22.tgz", + "integrity": "sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==", + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "license": "MIT", + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/kerberos": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/kerberos/-/kerberos-2.1.1.tgz", + "integrity": "sha512-414s1G/qgK2T60cXnZsHbtRj8Ynjg0DBlQWeY99tkyqQ2e8vGgFHvxRdvjTlLHg/SxBA0zLQcGE6Pk6Dfq/BCA==", + "hasInstallScript": true, + "dependencies": { + "bindings": "^1.5.0", + "node-addon-api": "^6.1.0", + "prebuild-install": "^7.1.2" + }, + "engines": { + "node": ">=12.9.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, + "node_modules/native-watchdog": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/native-watchdog/-/native-watchdog-1.4.2.tgz", + "integrity": "sha512-iT3Uj6FFdrW5vHbQ/ybiznLus9oiUoMJ8A8nyugXv9rV3EBhIodmGs+mztrwQyyBc+PB5/CrskAH/WxaUVRRSQ==", + "hasInstallScript": true + }, + "node_modules/node-abi": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.8.0.tgz", + "integrity": "sha512-tzua9qWWi7iW4I42vUPKM+SfaF0vQSLAm4yO5J83mSwB7GeoWrDKC/K+8YCnYNwqP5duwazbw2X9l4m8SC2cUw==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.0.tgz", + "integrity": "sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==", + "license": "MIT", + "engines": { + "node": "^16 || ^18 || >= 20" + } + }, + "node_modules/node-pty": { + "version": "1.1.0-beta35", + "resolved": "https://registry.npmjs.org/node-pty/-/node-pty-1.1.0-beta35.tgz", + "integrity": "sha512-dGKw3PtLj/+uiFWUODNjr3QMyNjxRB2JY372AN4uzonfb6ri23d4PMr4s6UoibiqsXOQ3elXRCdq1qDLd86J8Q==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^7.1.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/opentype.js": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/opentype.js/-/opentype.js-0.8.0.tgz", + "integrity": "sha512-FQHR4oGP+a0m/f6yHoRpBOIbn/5ZWxKd4D/djHVJu8+KpBTYrJda0b7mLcgDEMWXE9xBCJm+qb0yv6FcvPjukg==", + "license": "MIT", + "dependencies": { + "tiny-inflate": "^1.0.2" + }, + "bin": { + "ot": "bin/ot" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA= sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", + "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/promise-stream-reader": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-stream-reader/-/promise-stream-reader-1.0.1.tgz", + "integrity": "sha512-Tnxit5trUjBAqqZCGWwjyxhmgMN4hGrtpW3Oc/tRI4bpm/O2+ej72BB08l6JBnGQgVDGCLvHFGjGgQS6vzhwXg==", + "license": "MIT", + "engines": { + "node": ">8.0.0" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", + "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", + "dependencies": { + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo= sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tas-client-umd": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/tas-client-umd/-/tas-client-umd-0.2.0.tgz", + "integrity": "sha512-oezN7mJVm5qZDVEby7OzxCLKUpUN5of0rY4dvOWaDF2JZBlGpd3BXceFN8B53qlTaIkVSzP65aAMT0Vc+/N25Q==" + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/undici": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.9.0.tgz", + "integrity": "sha512-e696y354tf5cFZPXsF26Yg+5M63+5H3oE6Vtkh2oqbvsE2Oe7s2nIbcQh5lmG7Lp/eS29vJtTpw9+p6PX0qNSg==", + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vscode-oniguruma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==" + }, + "node_modules/vscode-regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-regexpp/-/vscode-regexpp-3.1.0.tgz", + "integrity": "sha512-pqtN65VC1jRLawfluX4Y80MMG0DHJydWhe5ZwMHewZD6sys4LbU6lHwFAHxeuaVE6Y6+xZOtAw+9hvq7/0ejkg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/vscode-textmate": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-9.2.1.tgz", + "integrity": "sha512-eXiUi2yYFv9bdvgrYtJynA7UemCEkpVNE50S9iBBA08LYG5t9+/TB+8IRS/YoYOubCez2OkSyZ1Q12eQMwzbrw==", + "license": "MIT" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yauzl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.1.1.tgz", + "integrity": "sha512-MPxA7oN5cvGV0wzfkeHKF2/+Q4TkMpHSWGRy/96I4Cozljmx0ph91+Muxh6HegEtDC4GftJ8qYDE51vghFiEYA==", + "dependencies": { + "buffer-crc32": "~0.2.3", + "pend": "~1.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yazl": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.4.3.tgz", + "integrity": "sha1-7CblzIfVYBud+EMtvdPNLlFzoHE= sha512-cIUrm3/81iF/BzuyORI7ppz1vGHAhA62JYzAFFC+rwJ2jQF1LcYxY9UXx4XyUXojkCnol0SvPuc+Toc7FO4W8g==", + "dependencies": { + "buffer-crc32": "~0.2.3" + } + } + } +} diff --git a/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/remote/package.json b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/remote/package.json new file mode 100644 index 0000000000..4f29c72026 --- /dev/null +++ b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/lib/vscode/remote/package.json @@ -0,0 +1,50 @@ +{ + "name": "vscode-reh", + "version": "0.0.0", + "private": true, + "dependencies": { + "@microsoft/1ds-core-js": "^3.2.13", + "@microsoft/1ds-post-js": "^3.2.13", + "@parcel/watcher": "2.5.6", + "@vscode/deviceid": "^0.1.1", + "@vscode/iconv-lite-umd": "0.7.1", + "@vscode/proxy-agent": "^0.36.0", + "@vscode/ripgrep": "^1.15.13", + "@vscode/spdlog": "^0.15.2", + "@vscode/tree-sitter-wasm": "^0.2.0", + "@vscode/vscode-languagedetection": "1.0.21", + "@vscode/windows-process-tree": "^0.6.0", + "@vscode/windows-registry": "^1.1.0", + "@xterm/addon-clipboard": "^0.2.0-beta.119", + "@xterm/addon-image": "^0.9.0-beta.136", + "@xterm/addon-ligatures": "^0.10.0-beta.136", + "@xterm/addon-progress": "^0.2.0-beta.42", + "@xterm/addon-search": "^0.16.0-beta.136", + "@xterm/addon-serialize": "^0.14.0-beta.136", + "@xterm/addon-unicode11": "^0.9.0-beta.136", + "@xterm/addon-webgl": "^0.19.0-beta.136", + "@xterm/headless": "^5.6.0-beta.136", + "@xterm/xterm": "^5.6.0-beta.136", + "cookie": "^0.7.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "jschardet": "3.1.4", + "katex": "^0.16.22", + "kerberos": "2.1.1", + "minimist": "^1.2.8", + "native-watchdog": "^1.4.1", + "node-pty": "1.1.0-beta35", + "tas-client-umd": "0.2.0", + "vscode-oniguruma": "1.7.0", + "vscode-regexpp": "^3.1.0", + "vscode-textmate": "^9.2.1", + "yauzl": "^3.0.0", + "yazl": "^2.4.3" + }, + "overrides": { + "node-gyp-build": "4.8.1", + "kerberos@2.1.1": { + "node-addon-api": "7.1.0" + } + } +} diff --git a/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/ripgrep/postinstall.js b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/ripgrep/postinstall.js new file mode 100644 index 0000000000..15747bc920 --- /dev/null +++ b/codeserver/ubi9-python-3.12/prefetch-input/patches/code-server-v4.106.3/ripgrep/postinstall.js @@ -0,0 +1,121 @@ +// @ts-check +'use strict'; + +const os = require('os'); +const fs = require('fs'); +const path = require('path'); +const util = require('util'); +const child_process = require('child_process'); + +const download = require('./download'); + +const fsExists = util.promisify(fs.exists); +const mkdir = util.promisify(fs.mkdir); +const exec = util.promisify(child_process.exec); + +const forceInstall = process.argv.includes('--force'); +if (forceInstall) { + console.log('--force, ignoring caches'); +} + +const VERSION = 'v13.0.0-13'; +const MULTI_ARCH_LINUX_VERSION = 'v13.0.0-4';// use this for arm-unknown-linux-gnueabihf and powerpc64le-unknown-linux-gnu until we can fix https://github.com/microsoft/ripgrep-prebuilt/issues/24 and https://github.com/microsoft/ripgrep-prebuilt/issues/32 respectively. +const BIN_PATH = path.join(__dirname, '../bin'); + +process.on('unhandledRejection', (reason, promise) => { + console.log('Unhandled rejection: ', promise, 'reason:', reason); +}); + +async function getTarget() { + const arch = process.env.npm_config_arch || os.arch(); + + switch (os.platform()) { + case 'darwin': + return arch === 'arm64' ? 'aarch64-apple-darwin' : + 'x86_64-apple-darwin'; + case 'win32': + return arch === 'x64' ? 'x86_64-pc-windows-msvc' : + arch === 'arm64' ? 'aarch64-pc-windows-msvc' : + 'i686-pc-windows-msvc'; + case 'linux': + return arch === 'x64' ? 'x86_64-unknown-linux-musl' : + arch === 'arm' ? 'arm-unknown-linux-gnueabihf' : + arch === 'armv7l' ? 'arm-unknown-linux-gnueabihf' : + arch === 'arm64' ? 'aarch64-unknown-linux-musl': + arch === 'ppc64' ? 'powerpc64le-unknown-linux-gnu' : + arch === 'riscv64' ? 'riscv64gc-unknown-linux-gnu' : + arch === 's390x' ? 's390x-unknown-linux-gnu' : + 'i686-unknown-linux-musl' + default: throw new Error('Unknown platform: ' + os.platform()); + } +} + +/** + * Sleep for a specified number of milliseconds + * @param {number} ms Time to sleep in milliseconds + * @returns {Promise} + */ +function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} + +/** + * Retry a function with exponential backoff + * @param {Function} fn Function to retry + * @param {number} maxRetries Maximum number of retries + * @returns {Promise} + */ +async function retry(fn, maxRetries = 5) { + let retries = 0; + let lastError; + + while (retries < maxRetries) { + try { + return await fn(); + } catch (err) { + lastError = err; + retries++; + + if (retries >= maxRetries) { + break; + } + + const delay = Math.pow(2, retries) * 1000; + console.error(err); + console.log(`Download attempt ${retries} failed, retrying in ${delay/1000} seconds...`); + await sleep(delay); + } + } + + throw lastError; +} + +async function main() { + const binExists = await fsExists(BIN_PATH); + if (!forceInstall && binExists) { + console.log('bin/ folder already exists, exiting'); + process.exit(0); + } + + if (!binExists) { + await mkdir(BIN_PATH); + } + + const target = await getTarget(); + const opts = { + version: VERSION, + token: process.env['GITHUB_TOKEN'], + target: await getTarget(), + destDir: BIN_PATH, + force: forceInstall + }; + + try { + await retry(() => download(opts)); + } catch (err) { + console.error(`Downloading ripgrep failed after multiple retries: ${err.stack}`); + process.exit(1); + } +} + +main(); diff --git a/codeserver/ubi9-python-3.12/prefetch-input/patches/setup-offline-binaries.sh b/codeserver/ubi9-python-3.12/prefetch-input/patches/setup-offline-binaries.sh index c90814a939..ef5b2457cc 100755 --- a/codeserver/ubi9-python-3.12/prefetch-input/patches/setup-offline-binaries.sh +++ b/codeserver/ubi9-python-3.12/prefetch-input/patches/setup-offline-binaries.sh @@ -8,21 +8,16 @@ set -euo pipefail # build process would normally download at build time: # # 1. npm config: set offline=true, prefer-offline=true, fetch-retries=0 -# 2. node-gyp headers: NPM_CONFIG_NODEDIR=/usr tells node-gyp to use system -# Node.js headers (from nodejs-devel RPM) — no Electron or Node.js header -# tarballs needed. Additional headers for VS Code remote (22.20.0) are still -# cached for native module compilation targeting the bundled Node.js version. +# 2. node-gyp: NPM_CONFIG_NODEDIR=/usr uses system Node.js headers (nodejs-devel RPM). # 3. VSCode ripgrep: copy to /tmp/vscode-ripgrep-cache-/ # 4. VSCode extensions (.vsix): copy to .vscode-offline-cache/ for fetch.js -# 5. Node.js runtime binary: copy to .vscode-offline-cache/ for bundling -# 6. Pre-populate .build/ caches so gulp tasks skip network downloads: -# - .build/node/v22.20.0/linux-x64/node (Node.js binary for bundling) -# - .build/builtInExtensions// (extracted .vsix contents) +# 5. Node.js: use system /usr/bin/node (like che-code); pre-populate .build/node/ +# so gulp skips download. Build is per-arch (patched build-vscode.sh). +# 6. Pre-populate .build/builtInExtensions// (extracted .vsix contents) # -# NOTE: The VS Code build always uses the linux-x64 gulp task regardless of the -# host architecture (see ci/build/build-vscode.sh: "Any platform here works since -# we will do our own packaging"). All Node.js binary paths are therefore hardcoded -# to linux-x64. +# Postinstall runs npm ci in custom-packages first (same install-deps as test), +# then test, test-extension, lib/vscode. custom-packages uses version ranges in +# package.json (like test) so npm resolves from the lockfile and populates the cache. # # All artifacts are prefetched by cachi2 via artifacts.in.yaml and stored at # /cachi2/output/deps/generic/. @@ -44,26 +39,18 @@ npm config set --global fund false # release-standalone/lib/vscode/, so npm install there would try to fetch peer deps. npm config set --global legacy-peer-deps true -# node-gyp headers: NPM_CONFIG_NODEDIR=/usr (set in codeserver-offline-env.sh) -# directs node-gyp to use system Node.js headers from nodejs-devel RPM for all -# native module compilation. The env var takes precedence over remote/.npmrc's -# disturl/target=22.20.0. We keep the 22.20.0 headers cached as a safety net in -# case any build step explicitly bypasses NPM_CONFIG_NODEDIR. -for version in 22.20.0; do - mkdir -p ~/.cache/node-gyp/${version} - tar -xzf "${HERMETO_OUTPUT}/deps/generic/node-v${version}-headers.tar.gz" \ - -C ~/.cache/node-gyp/${version} --strip-components=1 - echo "11" > ~/.cache/node-gyp/${version}/installVersion -done +# node-gyp: NPM_CONFIG_NODEDIR=/usr (codeserver-offline-env.sh) uses system headers +# from nodejs-devel RPM; no Node headers tarball needed (same as che-code). -# Playwright Chromium: not prefetched (only used for tests, not the build). +# Playwright Chromium: supplied via custom-packages/package.json (prefetched into deps/npm by cachi2). # PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 (set in codeserver-offline-env.sh) prevents # the @playwright/browser-chromium postinstall from attempting any download. # Setup VSCode ripgrep - use the cache directory that @vscode/ripgrep expects # Prefetched in prefetch-input/artifacts.in.yaml; Cachi2 puts them in HERMETO_OUTPUT/deps/generic/. # Cache dir: /vscode-ripgrep-cache-/ (see @vscode/ripgrep lib/download.js). -# x64/arm64 use VERSION v13.0.0-13; ppc64le/s390x/arm-gnueabihf use MULTI_ARCH_LINUX_VERSION v13.0.0-4 (package hardcodes this). +# We use a single version (v13.0.0-13) for all 4 arches; apply-patch.sh patches @vscode/ripgrep +# so its postinstall uses VERSION for every target (no MULTI_ARCH_LINUX_VERSION). VSCODE_RIPGREP_VERSION="1.15.14" RIPGREP_CACHE_DIR="/tmp/vscode-ripgrep-cache-${VSCODE_RIPGREP_VERSION}" mkdir -p "${RIPGREP_CACHE_DIR}" @@ -78,32 +65,18 @@ cp "${HERMETO_OUTPUT}/deps/generic/ms-vscode.js-debug-companion.1.1.3.vsix" "${V cp "${HERMETO_OUTPUT}/deps/generic/ms-vscode.js-debug.1.105.0.vsix" "${VSCODE_OFFLINE_CACHE}/" cp "${HERMETO_OUTPUT}/deps/generic/ms-vscode.vscode-js-profile-table.1.0.10.vsix" "${VSCODE_OFFLINE_CACHE}/" -# Copy Node.js runtime binary (for bundling with VSCode server) -cp "${HERMETO_OUTPUT}/deps/generic/node-v22.20.0-linux-x64.tar.gz" "${VSCODE_OFFLINE_CACHE}/" - -# [HERMETIC] Pre-populate VSCode .build/ caches so that gulp tasks skip network downloads. -# The VSCode build system checks these directories BEFORE attempting to fetch from the network: -# - .build/node/v/-/ → skips Node.js binary download -# - .build/builtInExtensions// → skips extension download from GitHub -# -# By populating them here, the build:vscode step (gulp vscode-reh-web-linux-x64-min) runs -# fully offline without needing to patch fetch.js. +# [HERMETIC] Pre-populate .build/node/ with system Node (like che-code) so gulp skips download. +# build-vscode.sh is patched to build for current arch (vscode-reh-web-linux-${NODE_ARCH}). +# On ppc64le/s390x we add those arches to BUILD_TARGETS (below) and run the native task, +# so we only need system node in linux-${NODE_ARCH} (no extra node tarball). +NODE_BUILD_VERSION=$(grep -E '^target=' "${CODESERVER_SOURCE_PREFETCH}/lib/vscode/remote/.npmrc" | cut -d'"' -f2) +NODE_ARCH=$(node -p "process.arch") VSCODE_BUILD_DIR="${CODESERVER_SOURCE_PREFETCH}/lib/vscode/.build" - -# --- Pre-populate Node.js binary for bundling with VSCode server --- -# gulpfile.reh.js: if .build/node/v/-/ exists → skip download -# The gulp task extracts the tarball, filters for the 'node' binary, and writes it there. -NODE_BUILD_VERSION="22.20.0" -NODE_CACHE_DIR="${VSCODE_BUILD_DIR}/node/v${NODE_BUILD_VERSION}/linux-x64" -if [[ ! -d "${NODE_CACHE_DIR}" ]]; then - mkdir -p "${NODE_CACHE_DIR}" - tar -xzf "${HERMETO_OUTPUT}/deps/generic/node-v${NODE_BUILD_VERSION}-linux-x64.tar.gz" \ - -C "${NODE_CACHE_DIR}" --strip-components=1 --wildcards '*/bin/node' - # Flatten: gulp expects .build/node/v22.20.0/linux-x64/node (not bin/node) - mv "${NODE_CACHE_DIR}/bin/node" "${NODE_CACHE_DIR}/node" - rmdir "${NODE_CACHE_DIR}/bin" 2>/dev/null || true - chmod +x "${NODE_CACHE_DIR}/node" -fi +NODE_CACHE_DIR="${VSCODE_BUILD_DIR}/node/v${NODE_BUILD_VERSION}/linux-${NODE_ARCH}" +mkdir -p "${NODE_CACHE_DIR}" +cp /usr/bin/node "${NODE_CACHE_DIR}/node" +chmod +x "${NODE_CACHE_DIR}/node" +echo "Cached system node for .build/node/v${NODE_BUILD_VERSION}/linux-${NODE_ARCH}/node" # --- Pre-populate built-in extensions from prefetched .vsix files --- # builtInExtensions.js: isUpToDate() checks .build/builtInExtensions//package.json @@ -138,7 +111,7 @@ populate_vsix "${HERMETO_OUTPUT}/deps/generic/ms-vscode.js-debug.1.105.0.vsix" " populate_vsix "${HERMETO_OUTPUT}/deps/generic/ms-vscode.vscode-js-profile-table.1.0.10.vsix" "ms-vscode.vscode-js-profile-table" # Rewrite all package-lock.json "resolved" URLs to point to the cachi2 file cache. -# This is the critical step that makes `npm ci --offline` work: URLs like -# https://registry.npmjs.org/foo/-/foo-1.0.0.tgz become file:///cachi2/output/deps/npm/... +# https://registry.npmjs.org/foo/-/foo-1.0.0.tgz → file:///cachi2/output/deps/npm/... . /root/scripts/lockfile-generators/rewrite-npm-urls.sh prefetch-input/code-server + echo "Offline binary setup complete." diff --git a/codeserver/ubi9-python-3.12/prefetch-input/rhds/artifacts.in.yaml b/codeserver/ubi9-python-3.12/prefetch-input/rhds/artifacts.in.yaml index 44752ee72c..bb25398d0e 100644 --- a/codeserver/ubi9-python-3.12/prefetch-input/rhds/artifacts.in.yaml +++ b/codeserver/ubi9-python-3.12/prefetch-input/rhds/artifacts.in.yaml @@ -6,49 +6,26 @@ # is auto-generated and contains integrity hashes for each URL. input: - # GPG keys for verifying prefetched RPM packages - - url: https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-9 # CentOS Stream 9 GPG key (needed in whl-cache stage for ppc64le/s390x dnf install # from CentOS baseos/appstream/crb repos; UBI9 images only ship the Red Hat key) - url: https://www.centos.org/keys/RPM-GPG-KEY-CentOS-Official - - url: https://github.com/goreleaser/nfpm/releases/download/v2.44.1/nfpm-2.44.1-1.x86_64.rpm - - url: https://github.com/goreleaser/nfpm/releases/download/v2.44.1/nfpm-2.44.1-1.s390x.rpm - - url: https://github.com/goreleaser/nfpm/releases/download/v2.44.1/nfpm-2.44.1-1.aarch64.rpm - - url: https://github.com/goreleaser/nfpm/releases/download/v2.44.1/nfpm-2.44.1-1.ppc64le.rpm - # Required for node-gyp builds in npm install - # Electron headers for main VSCode build (runs on Electron) - - url: https://electronjs.org/headers/v37.7.0/node-v37.7.0-headers.tar.gz - # Node.js headers for build tools (runs on system Node.js 22.22.0) - - url: https://nodejs.org/download/release/v22.22.0/node-v22.22.0-headers.tar.gz - # Node.js headers for VSCode remote (targets Node.js 22.20.0) - - url: https://nodejs.org/download/release/v22.20.0/node-v22.20.0-headers.tar.gz - # Node.js runtime binaries for bundling with VSCode server (one per target arch) - - url: https://nodejs.org/download/release/v22.20.0/node-v22.20.0-linux-x64.tar.gz - - url: https://nodejs.org/download/release/v22.20.0/node-v22.20.0-linux-arm64.tar.gz - - url: https://nodejs.org/download/release/v22.20.0/node-v22.20.0-linux-ppc64le.tar.gz - # Electron binaries (one per target arch) - - url: https://github.com/electron/electron/releases/download/v37.7.0/electron-v37.7.0-linux-x64.zip - - url: https://github.com/electron/electron/releases/download/v37.7.0/electron-v37.7.0-linux-arm64.zip - - url: https://github.com/electron/electron/releases/download/v37.7.0/SHASUMS256.txt + # Node: system Node from nodejs RPM is used (like che-code). ppc64le/s390x use + # native gulp task (BUILD_TARGETS patched in setup-offline-binaries.sh); no extra tarball. + # ripgrep: one version (v13.0.0-13) for all 4 arches; @vscode/ripgrep postinstall patched to use it (see apply-patch.sh). - url: https://github.com/microsoft/ripgrep-prebuilt/releases/download/v13.0.0-13/ripgrep-v13.0.0-13-x86_64-unknown-linux-musl.tar.gz filename: ripgrep-v13.0.0-13-x86_64-unknown-linux-musl.tar.gz - # aarch64/ppc64le: no musl builds exist; download GNU builds aliased to musl filenames - # so @vscode/ripgrep postinstall finds them in its expected cache path + # aarch64: no musl build upstream; GNU build aliased to musl filename (postinstall expects aarch64-unknown-linux-musl). - url: https://github.com/microsoft/ripgrep-prebuilt/releases/download/v13.0.0-13/ripgrep-v13.0.0-13-aarch64-unknown-linux-gnu.tar.gz filename: ripgrep-v13.0.0-13-aarch64-unknown-linux-musl.tar.gz - url: https://github.com/microsoft/ripgrep-prebuilt/releases/download/v13.0.0-13/ripgrep-v13.0.0-13-powerpc64le-unknown-linux-gnu.tar.gz - filename: ripgrep-v13.0.0-13-powerpc64le-unknown-linux-musl.tar.gz - # s390x: same pattern — GNU build aliased to musl for the regular v13.0.0-13 code path + filename: ripgrep-v13.0.0-13-powerpc64le-unknown-linux-gnu.tar.gz - url: https://github.com/microsoft/ripgrep-prebuilt/releases/download/v13.0.0-13/ripgrep-v13.0.0-13-s390x-unknown-linux-gnu.tar.gz - filename: ripgrep-v13.0.0-13-s390x-unknown-linux-musl.tar.gz - # @vscode/ripgrep postinstall uses MULTI_ARCH_LINUX_VERSION v13.0.0-4 for ppc64le/s390x; must be in cache - - url: https://github.com/microsoft/ripgrep-prebuilt/releases/download/v13.0.0-4/ripgrep-v13.0.0-4-powerpc64le-unknown-linux-gnu.tar.gz - filename: ripgrep-v13.0.0-4-powerpc64le-unknown-linux-gnu.tar.gz - - url: https://github.com/microsoft/ripgrep-prebuilt/releases/download/v13.0.0-4/ripgrep-v13.0.0-4-s390x-unknown-linux-gnu.tar.gz - filename: ripgrep-v13.0.0-4-s390x-unknown-linux-gnu.tar.gz + filename: ripgrep-v13.0.0-13-s390x-unknown-linux-gnu.tar.gz # node-argon2 prebuilts — two versions required because separate transitive - # dependencies in the npm tree pin v0.31.2 and v0.28.7 respectively + # dependencies in the npm tree pin v0.31.2 and v0.28.7 respectively. + # NOTE: Only x86_64 prebuilts are provided. On arm64/ppc64le, argon2 falls + # back to source compilation (gcc-toolset-14 is available in the rpm-base stage). - url: https://github.com/ranisalt/node-argon2/releases/download/v0.31.2/argon2-v0.31.2-napi-v3-linux-x64-glibc.tar.gz filename: v0.31.2/argon2-v0.31.2-napi-v3-linux-x64-glibc.tar.gz - url: https://github.com/ranisalt/node-argon2/releases/download/v0.28.7/argon2-v0.28.7-napi-v3-linux-x64-glibc.tar.gz @@ -64,16 +41,6 @@ input: - url: https://mirror.openshift.com/pub/openshift-v4/s390x/clients/ocp/4.18.33/openshift-client-linux.tar.gz filename: openshift-client-linux-s390x.tar.gz - # GitHub tarball dependency for @emmetio/css-parser (used by VSCode emmet extension) - # Filename must use .tgz to match rewrite-npm-urls.sh and download-npm.sh conventions. - - url: https://codeload.github.com/ramya-rao-a/css-parser/tar.gz/370c480ac103bd17c7bcfb34bf5d577dc40d3660 - filename: npm/ramya-rao-a-css-parser-370c480ac103bd17c7bcfb34bf5d577dc40d3660.tgz - - # GitHub tarball dependency for @parcel/watcher (v4.106.3 uses git ref instead of npm registry) - # Filename must use .tgz to match rewrite-npm-urls.sh and download-npm.sh conventions. - - url: https://codeload.github.com/parcel-bundler/watcher/tar.gz/1ca032aa8339260a8a3bcf825c3a1a71e3e43542 - filename: npm/parcel-bundler-watcher-1ca032aa8339260a8a3bcf825c3a1a71e3e43542.tgz - # VSCode marketplace extensions (built-in extensions bundled with code-server) - url: https://github.com/microsoft/vscode-js-debug-companion/releases/download/v1.1.3/ms-vscode.js-debug-companion.1.1.3.vsix filename: ms-vscode.js-debug-companion.1.1.3.vsix diff --git a/codeserver/ubi9-python-3.12/prefetch-input/rhds/artifacts.lock.yaml b/codeserver/ubi9-python-3.12/prefetch-input/rhds/artifacts.lock.yaml index 7e8772911f..c5298c01e4 100644 --- a/codeserver/ubi9-python-3.12/prefetch-input/rhds/artifacts.lock.yaml +++ b/codeserver/ubi9-python-3.12/prefetch-input/rhds/artifacts.lock.yaml @@ -2,51 +2,9 @@ metadata: version: '1.0' artifacts: - - download_url: https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-9 - checksum: sha256:fcf0eab4f05a1c0de6363ac4b707600a27a9d774e9b491059e59e6921b255a84 - filename: RPM-GPG-KEY-EPEL-9 - download_url: https://www.centos.org/keys/RPM-GPG-KEY-CentOS-Official checksum: sha256:146059788b214d7ba0dd70c1cf21111e594c6cfde201da8a9a88fe7101be8a78 filename: RPM-GPG-KEY-CentOS-Official - - download_url: https://github.com/goreleaser/nfpm/releases/download/v2.44.1/nfpm-2.44.1-1.x86_64.rpm - checksum: sha256:74f9d1c5f13b6661940472d96be2b819c326f2793afb096e4d98e9d4ec2e9d1f - filename: nfpm-2.44.1-1.x86_64.rpm - - download_url: https://github.com/goreleaser/nfpm/releases/download/v2.44.1/nfpm-2.44.1-1.s390x.rpm - checksum: sha256:f2a77bccc22fdf2e14f6dd545ac90393ed75481f8075620f8706d08f702b7aef - filename: nfpm-2.44.1-1.s390x.rpm - - download_url: https://github.com/goreleaser/nfpm/releases/download/v2.44.1/nfpm-2.44.1-1.aarch64.rpm - checksum: sha256:45585140b10502db4b29833215977f82ed3eaa463137a7aead8ab15d259ae0d2 - filename: nfpm-2.44.1-1.aarch64.rpm - - download_url: https://github.com/goreleaser/nfpm/releases/download/v2.44.1/nfpm-2.44.1-1.ppc64le.rpm - checksum: sha256:9814d43163c32de1974e72e2679032216da7dea64a0054ce85f4d1fd39f39cd6 - filename: nfpm-2.44.1-1.ppc64le.rpm - - download_url: https://electronjs.org/headers/v37.7.0/node-v37.7.0-headers.tar.gz - checksum: sha256:50d67040efeeaad3fefe9230dc11ef8f97463314344deb79e3f88ba29d2a65b7 - filename: node-v37.7.0-headers.tar.gz - - download_url: https://nodejs.org/download/release/v22.22.0/node-v22.22.0-headers.tar.gz - checksum: sha256:670494f0cc674059596222c60e5db84fbe80c849d7ffb1c3fbd20e4f55b8ea85 - filename: node-v22.22.0-headers.tar.gz - - download_url: https://nodejs.org/download/release/v22.20.0/node-v22.20.0-headers.tar.gz - checksum: sha256:22ba4692576442821f70156219752835a920e9ea2c0113a50fd9ebecb0ea6bbd - filename: node-v22.20.0-headers.tar.gz - - download_url: https://nodejs.org/download/release/v22.20.0/node-v22.20.0-linux-x64.tar.gz - checksum: sha256:eeaccb0378b79406f2208e8b37a62479c70595e20be6b659125eb77dd1ab2a29 - filename: node-v22.20.0-linux-x64.tar.gz - - download_url: https://nodejs.org/download/release/v22.20.0/node-v22.20.0-linux-arm64.tar.gz - checksum: sha256:4181609e03dcb9880e7e5bf956061ecc0503c77a480c6631d868cb1f65a2c7dd - filename: node-v22.20.0-linux-arm64.tar.gz - - download_url: https://nodejs.org/download/release/v22.20.0/node-v22.20.0-linux-ppc64le.tar.gz - checksum: sha256:f96e25a3ef6cbaa992c9bdccaf18684d12fbcbc9751bf0a85407715641f1930e - filename: node-v22.20.0-linux-ppc64le.tar.gz - - download_url: https://github.com/electron/electron/releases/download/v37.7.0/electron-v37.7.0-linux-x64.zip - checksum: sha256:4ae04d20d0ea25bf3451e3d0eaa757190b5813fa58d17bbe3be4332836da6b25 - filename: electron-v37.7.0-linux-x64.zip - - download_url: https://github.com/electron/electron/releases/download/v37.7.0/electron-v37.7.0-linux-arm64.zip - checksum: sha256:c72c2e963dcdea65d500b23fff3f22806a2518a86b52236dceb825a1d194cd7e - filename: electron-v37.7.0-linux-arm64.zip - - download_url: https://github.com/electron/electron/releases/download/v37.7.0/SHASUMS256.txt - checksum: sha256:8275e50dc77a95621270b9bb184df0bc2a3816416ca54bc8301a03703ba02728 - filename: SHASUMS256.txt - download_url: https://github.com/microsoft/ripgrep-prebuilt/releases/download/v13.0.0-13/ripgrep-v13.0.0-13-x86_64-unknown-linux-musl.tar.gz checksum: sha256:324cd645481db1ceda8621409c9151fc58d182b90cc5c428db80edb21fb26df3 filename: ripgrep-v13.0.0-13-x86_64-unknown-linux-musl.tar.gz @@ -55,16 +13,10 @@ artifacts: filename: ripgrep-v13.0.0-13-aarch64-unknown-linux-musl.tar.gz - download_url: https://github.com/microsoft/ripgrep-prebuilt/releases/download/v13.0.0-13/ripgrep-v13.0.0-13-powerpc64le-unknown-linux-gnu.tar.gz checksum: sha256:a3fdb2c6ef9d4ff927ca1cb1e56f7aed7913d1be4dd4546aec400118c26452ab - filename: ripgrep-v13.0.0-13-powerpc64le-unknown-linux-musl.tar.gz + filename: ripgrep-v13.0.0-13-powerpc64le-unknown-linux-gnu.tar.gz - download_url: https://github.com/microsoft/ripgrep-prebuilt/releases/download/v13.0.0-13/ripgrep-v13.0.0-13-s390x-unknown-linux-gnu.tar.gz checksum: sha256:555983c74789d553b107c5a2de90b883727b3e43d680f0cd289a07407efb2755 - filename: ripgrep-v13.0.0-13-s390x-unknown-linux-musl.tar.gz - - download_url: https://github.com/microsoft/ripgrep-prebuilt/releases/download/v13.0.0-4/ripgrep-v13.0.0-4-powerpc64le-unknown-linux-gnu.tar.gz - checksum: sha256:3ddd7c0797c14cefd3ee61f13f15ac219bfecee8e6f6e27fd15c102ef229653a - filename: ripgrep-v13.0.0-4-powerpc64le-unknown-linux-gnu.tar.gz - - download_url: https://github.com/microsoft/ripgrep-prebuilt/releases/download/v13.0.0-4/ripgrep-v13.0.0-4-s390x-unknown-linux-gnu.tar.gz - checksum: sha256:61fa877688b721897cee33d572b64d8217ef16fe2cecf5f6f899f5ce55870e28 - filename: ripgrep-v13.0.0-4-s390x-unknown-linux-gnu.tar.gz + filename: ripgrep-v13.0.0-13-s390x-unknown-linux-gnu.tar.gz - download_url: https://github.com/ranisalt/node-argon2/releases/download/v0.31.2/argon2-v0.31.2-napi-v3-linux-x64-glibc.tar.gz checksum: sha256:255e7b6b13bd373e9714f05b4b137262a4362f9e4cc2a86a162e461c611fe17c filename: v0.31.2/argon2-v0.31.2-napi-v3-linux-x64-glibc.tar.gz @@ -83,12 +35,6 @@ artifacts: - download_url: https://mirror.openshift.com/pub/openshift-v4/s390x/clients/ocp/4.18.33/openshift-client-linux.tar.gz checksum: sha256:2162b0a596f5f29fbd290382b52ccf60bf6e9739346b52698a55ac77396989d9 filename: openshift-client-linux-s390x.tar.gz - - download_url: https://codeload.github.com/ramya-rao-a/css-parser/tar.gz/370c480ac103bd17c7bcfb34bf5d577dc40d3660 - checksum: sha256:6004ae05ad17931a62a72b27ebf1dab54fca6e72c0a9f0b7925a8b315bbe776d - filename: npm/ramya-rao-a-css-parser-370c480ac103bd17c7bcfb34bf5d577dc40d3660.tgz - - download_url: https://codeload.github.com/parcel-bundler/watcher/tar.gz/1ca032aa8339260a8a3bcf825c3a1a71e3e43542 - checksum: sha256:2d22d1ade4bc4d7bc96c1b61888a2b9b7e50d01740d75c92a865834ce7c4359e - filename: npm/parcel-bundler-watcher-1ca032aa8339260a8a3bcf825c3a1a71e3e43542.tgz - download_url: https://github.com/microsoft/vscode-js-debug-companion/releases/download/v1.1.3/ms-vscode.js-debug-companion.1.1.3.vsix checksum: sha256:7380a890787452f14b2db7835dfa94de538caf358ebc263f9d46dd68ac52de93 filename: ms-vscode.js-debug-companion.1.1.3.vsix diff --git a/docs/konflux.md b/docs/konflux.md index 76ab34c3f3..b9ce70b354 100644 --- a/docs/konflux.md +++ b/docs/konflux.md @@ -4,7 +4,7 @@ This file provides an overview and quick access links to the **Konflux** environ ## Codeserver pipeline resources -The codeserver image is large; the multiarch pipeline’s **build-images** task runs the image build on a remote VM, then **rsyncs** the result back to the cluster. That rsync can OOM or drop the connection if the task has default resource limits. The codeserver PipelineRuns (`.tekton/odh-workbench-codeserver-datascience-cpu-py312-ubi9-pull-request.yaml` and `-push.yaml`) set **taskRunSpecs** for the `build-images` task with **8 CPU** and **32Gi memory** so the rsync-back step has enough resources. See the `taskRunSpecs` block in those files; other heavy pipelines (e.g. rstudio CUDA) use the same pattern. +The codeserver image is large; the multiarch pipeline runs **prefetch-dependencies** (Cachi2) and then **build-images** (remote VM build + rsync back). Both can OOM with default resource limits. The codeserver PipelineRuns (`.tekton/odh-workbench-codeserver-datascience-cpu-py312-ubi9-pull-request.yaml` and `-push.yaml`) set **taskRunSpecs** for `prefetch-dependencies` and `build-images` with **8 CPU** and **32Gi memory** so Cachi2 and the rsync-back step have enough resources. This follows [Konflux: Overriding compute resources](https://konflux-ci.dev/docs/building/overriding-compute-resources/) (PipelineRun `spec.taskRunSpecs` in `.tekton`). See the `taskRunSpecs` block in those files; other heavy pipelines (e.g. rstudio CUDA) use the same pattern. ## ODH-io (Open Data Hub) diff --git a/scripts/lockfile-generators/README.md b/scripts/lockfile-generators/README.md index 84de13b61f..85a8ead1d4 100644 --- a/scripts/lockfile-generators/README.md +++ b/scripts/lockfile-generators/README.md @@ -750,9 +750,9 @@ git fetch --tags git checkout tags/v4.104.0 git submodule update --init --recursive # pull nested submodules if any -# Commit the submodule and .gitmodules -cd ../.. -git add -A . +# Commit the submodule and .gitmodules (from repo root so .gitmodules is staged) +cd ../../../.. +git add .gitmodules codeserver/ubi9-python-3.12/prefetch-input/code-server git commit -m "Added submodule code-server" ``` diff --git a/scripts/lockfile-generators/download-npm.sh b/scripts/lockfile-generators/download-npm.sh index 4e8d526b11..515e0bdffa 100755 --- a/scripts/lockfile-generators/download-npm.sh +++ b/scripts/lockfile-generators/download-npm.sh @@ -198,7 +198,10 @@ if [[ -n "$TEKTON_FILE" ]]; then if [[ -z "$npm_paths" ]]; then echo "No npm-type prefetch-input entries in $TEKTON_FILE — nothing to download" - exit 0 + # If --lock-file was also provided, continue so lock-file processing still runs. + if [[ -z "$LOCKFILE" ]]; then + exit 0 + fi fi while IFS= read -r npm_path; do diff --git a/scripts/lockfile-generators/rewrite-npm-urls.sh b/scripts/lockfile-generators/rewrite-npm-urls.sh index 571ccfeffd..7567d80896 100755 --- a/scripts/lockfile-generators/rewrite-npm-urls.sh +++ b/scripts/lockfile-generators/rewrite-npm-urls.sh @@ -3,14 +3,19 @@ # rewrite-npm-urls.sh # # Rewrites all resolved URLs in package-lock.json and package.json files -# to point to the local cachi2 offline cache: -# file:///cachi2/output/deps/npm/ +# to point to the cachi2 offline cache. Base URL is configurable via CACHI2_BASE: +# - file:///cachi2/output/deps/npm/ (default; when deps are mounted in build) +# - https:///deps/npm/ (when Konflux/similar serves prefetched deps over HTTPS) +# +# Lockfiles committed in the repo must use https://registry.npmjs.org/... URLs +# so Konflux/Hermeto Prefetch-dependencies can fetch them (file:// is not accessible at prefetch time). # # Handles: -# 1. HTTPS registry URLs (https://registry.npmjs.org/.../-/name-ver.tgz) -# 2. git+ssh:// URLs (git+ssh://git@github.com/owner/repo.git#hash) -# 3. git+https:// URLs (git+https://github.com/owner/repo.git#hash) -# 4. GitHub shortname refs (owner/repo#hash-or-branch in dependency values) +# 1. HTTPS registry URLs (https://registry.npmjs.org/.../-/name-ver.tgz) +# 2. codeload.github.com (https://codeload.github.com/owner/repo/tar.gz/ref) +# 3. git+ssh:// URLs (git+ssh://git@github.com/owner/repo.git#hash) +# 4. git+https:// URLs (git+https://github.com/owner/repo.git#hash) +# 5. GitHub shortname refs (owner/repo#hash-or-branch in dependency values) # # Usage: # ./rewrite-npm-urls.sh . # run on the current directory @@ -31,7 +36,8 @@ TARGET_FILENAMES=( "package.json" ) -# Cachi2 local cache base path +# Cachi2 local cache base path (hardcoded like 3b069d43 so rewrite is not env-dependent). +# Shell-expanded into perl one-liners so it works when script is sourced. CACHI2_BASE="file:///cachi2/output/deps/npm" # ============================================================================= @@ -85,19 +91,20 @@ find_target_files() { # Rewrite types: # 1. Remove integrity hashes for git-resolved deps # 2. Registry URLs https://registry.npmjs.org/... → file:///cachi2/... -# 3. git+ssh/https git+ssh://...#hash → file:///cachi2/...-hash.tgz -# 4. Shortname refs "owner/repo#ref" → file:///cachi2/...-ref.tgz +# 3. codeload.github.com (custom-packages / hermetic git workaround) → owner-repo-ref.tgz +# 4. git+ssh/https git+ssh://...#hash → file:///cachi2/...-hash.tgz +# 5. Shortname refs "owner/repo#ref" → file:///cachi2/...-ref.tgz # ============================================================================= process_file() { local file="$1" log_step "Processing: ${file}" - # 1) Strip integrity hashes for git deps (npm pack is not reproducible, - # so offline tarballs will have different hashes — safe to remove - # because content is pinned by git commit hash). + # 1) Strip integrity hashes for git and codeload deps (tarballs can be + # non-reproducible or fetched by cachi2 with different bytes — safe to + # remove because content is pinned by git ref / URL). perl -i -ne ' if ($s) { $s=0; next if /^\s*"integrity":\s*"/ } - $s=1 if /"resolved":\s*"git\+/; print + $s=1 if /"resolved":\s*"(git\+|https:\/\/codeload\.github\.com)/; print ' "${file}" # 2) Registry URLs (scoped @scope/pkg and unscoped pkg in one pass). @@ -105,11 +112,22 @@ process_file() { # Unscoped: express/-/express-4.19.2.tgz → express-4.19.2.tgz perl -i -pe 's!"resolved": "https?://[^"]*?/(?:\@([^/]+)/)?[^/]+/-/([^"]+)"! "\"resolved\": \"'"${CACHI2_BASE}"'/" . ($1 ? "$1-$2" : "$2") . "\"" !ge' "${file}" - # 3) git+ssh and git+https URLs → owner-repo-hash.tgz - perl -i -pe 's!"resolved": "git\+(ssh://git\@|https://)github\.com/([^/]+)/([^.#"]+)(?:\.git)?#([^"]+)"!"resolved": "'"${CACHI2_BASE}"'/$2-$3-$4.tgz"!g' "${file}" + # 2b) Same registry URL → file path for dependency values (e.g. custom-packages package.json + # and lockfile packages."".dependencies). npm with --offline may use these when resolving. + perl -i -pe 's!"https?://[^"]*?registry\.npmjs\.org/(?:\@([^/]+)/)?[^/]+/-/([^"]+\.tgz)"! "\"'"${CACHI2_BASE}"'/" . ($1 ? "$1-$2" : "$2") . "\"" !ge' "${file}" + + # 3) codeload.github.com URLs (e.g. custom-packages) → owner-repo-ref.tgz + # Same filename convention as git+ssh so deps/npm/ has one naming scheme. + # Ref is sanitized (e.g. / → -) so branch names like feature/foo don't create nested paths. + # Inner s### uses # delimiter to avoid conflicting with outer s!!!. + # Use q{} so ": " is not parsed as a label. + perl -i -pe 's!: "https://codeload\.github\.com/([^/]+)/([^/]+)/tar\.gz/([^"]+)"! do { ($o,$p,$r)=($1,$2,$3); $r=~s#[^A-Za-z0-9._-]+#-#g; q{: "}."'"${CACHI2_BASE}"'"."/".$o."-".$p."-".$r.q{.tgz"} }!ge' "${file}" + + # 4) git+ssh and git+https URLs → owner-repo-hash.tgz (ref sanitized for slashes) + perl -i -pe 's!"resolved": "git\+(ssh://git\@|https://)github\.com/([^/]+)/([^.#"]+)(?:\.git)?#([^"]+)"!do { ($o,$p,$r)=($2,$3,$4); $r=~s#[^A-Za-z0-9._-]+#-#g; "\"resolved\": \"'"${CACHI2_BASE}"'/".$o."-".$p."-".$r.".tgz\"" }!ge' "${file}" - # 4) GitHub shortname refs: "owner/repo#ref" → cachi2 path - perl -i -pe 's!": "([a-zA-Z0-9_.-]+)/([a-zA-Z0-9_.-]+)#([^"]+)"!": "'"${CACHI2_BASE}"'/$1-$2-$3.tgz"!g' "${file}" + # 5) GitHub shortname refs: "owner/repo#ref" → cachi2 path (ref sanitized for slashes) + perl -i -pe 's!": "([a-zA-Z0-9_.-]+)/([a-zA-Z0-9_.-]+)#([^"]+)"!do { ($o,$p,$r)=($1,$2,$3); $r=~s#[^A-Za-z0-9._-]+#-#g; "\": \"'"${CACHI2_BASE}"'/".$o."-".$p."-".$r.".tgz\"" }!ge' "${file}" TOTAL_FILES_PROCESSED=$((TOTAL_FILES_PROCESSED + 1)) } diff --git a/tests/containers/workbenches/jupyterlab/jupyterlab_datascience_test.py b/tests/containers/workbenches/jupyterlab/jupyterlab_datascience_test.py index 6e6bce91df..2bafa9db70 100644 --- a/tests/containers/workbenches/jupyterlab/jupyterlab_datascience_test.py +++ b/tests/containers/workbenches/jupyterlab/jupyterlab_datascience_test.py @@ -84,7 +84,7 @@ def test_sklearn_smoke(self, jupyterlab_datascience_image: conftest.Image) -> No def test_mysql_connection(self, tf: TestFrame, datascience_image: Image, subtests): name_label = datascience_image.labels.get("name", "") if "-rstudio-" in name_label: - pytest.skip(f"Image {datascience_image.name} has '-rstudio-' in {datascience_image.labels['name']=}") + pytest.skip(f"Image {datascience_image.name} has '-rstudio-' in {datascience_image.labels['name']}") MYSQL_CONNECTOR_PYTHON_VERSION = "9.5.0"