mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-09-26 01:12:43 -05:00
Compare commits
7 Commits
fix-move-t
...
fix-chore-
Author | SHA1 | Date | |
---|---|---|---|
![]() |
770fb2d60e | ||
![]() |
c8ef9e663a | ||
![]() |
2195e4af45 | ||
![]() |
c6716905a4 | ||
![]() |
850ee5a415 | ||
![]() |
b25b5abdb0 | ||
![]() |
68e0559053 |
34
.codecov.yml
Normal file
34
.codecov.yml
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
codecov:
|
||||||
|
require_ci_to_pass: true
|
||||||
|
# https://docs.codecov.com/docs/components
|
||||||
|
component_management:
|
||||||
|
individual_components:
|
||||||
|
- component_id: backend
|
||||||
|
paths:
|
||||||
|
- src/**
|
||||||
|
- component_id: frontend
|
||||||
|
paths:
|
||||||
|
- src-ui/**
|
||||||
|
# https://docs.codecov.com/docs/pull-request-comments
|
||||||
|
comment:
|
||||||
|
layout: "header, diff, components, flags, files"
|
||||||
|
# https://docs.codecov.com/docs/javascript-bundle-analysis
|
||||||
|
require_bundle_changes: true
|
||||||
|
bundle_change_threshold: "50Kb"
|
||||||
|
coverage:
|
||||||
|
status:
|
||||||
|
project:
|
||||||
|
default:
|
||||||
|
# https://docs.codecov.com/docs/commit-status#threshold
|
||||||
|
threshold: 1%
|
||||||
|
patch:
|
||||||
|
default:
|
||||||
|
# For the changed lines only, target 100% covered, but
|
||||||
|
# allow as low as 75%
|
||||||
|
target: 100%
|
||||||
|
threshold: 25%
|
||||||
|
# https://docs.codecov.com/docs/javascript-bundle-analysis
|
||||||
|
bundle_analysis:
|
||||||
|
# Fail if the bundle size increases by more than 1MB
|
||||||
|
warning_threshold: "1MB"
|
||||||
|
status: true
|
430
.github/workflows/build-and-release.yml
vendored
Normal file
430
.github/workflows/build-and-release.yml
vendored
Normal file
@@ -0,0 +1,430 @@
|
|||||||
|
name: 'Build and Release'
|
||||||
|
on:
|
||||||
|
workflow_run:
|
||||||
|
workflows:
|
||||||
|
- ci
|
||||||
|
types:
|
||||||
|
- completed
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
packages: write
|
||||||
|
pull-requests: write
|
||||||
|
env:
|
||||||
|
DEFAULT_UV_VERSION: "0.8.x"
|
||||||
|
DEFAULT_PYTHON_VERSION: "3.11"
|
||||||
|
NLTK_DATA: "/usr/share/nltk_data"
|
||||||
|
jobs:
|
||||||
|
prepare:
|
||||||
|
if: >-
|
||||||
|
github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event == 'push'
|
||||||
|
name: Prepare build context
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
outputs:
|
||||||
|
should-build: ${{ steps.determine.outputs.should-build }}
|
||||||
|
ref: ${{ steps.determine.outputs.ref }}
|
||||||
|
ref-name: ${{ steps.determine.outputs.ref-name }}
|
||||||
|
sha: ${{ steps.determine.outputs.sha }}
|
||||||
|
is-tag: ${{ steps.determine.outputs.is-tag }}
|
||||||
|
is-release-target: ${{ steps.determine.outputs.is-release-target }}
|
||||||
|
is-beta-rc: ${{ steps.determine.outputs.is-beta-rc }}
|
||||||
|
steps:
|
||||||
|
- name: Determine ref information
|
||||||
|
id: determine
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const run = context.payload.workflow_run;
|
||||||
|
const owner = context.repo.owner;
|
||||||
|
const repo = context.repo.repo;
|
||||||
|
const sha = run.head_sha;
|
||||||
|
const branch = run.head_branch;
|
||||||
|
|
||||||
|
let ref = undefined;
|
||||||
|
let refName = undefined;
|
||||||
|
|
||||||
|
if (branch) {
|
||||||
|
ref = `refs/heads/${branch}`;
|
||||||
|
refName = branch;
|
||||||
|
} else {
|
||||||
|
const iterator = github.paginate.iterator(
|
||||||
|
github.rest.repos.listTags,
|
||||||
|
{
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
per_page: 100,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
for await (const { data } of iterator) {
|
||||||
|
const match = data.find((tag) => tag.commit?.sha === sha);
|
||||||
|
if (match) {
|
||||||
|
ref = `refs/tags/${match.name}`;
|
||||||
|
refName = match.name;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const outputs = {
|
||||||
|
shouldBuild: false,
|
||||||
|
ref: ref ?? '',
|
||||||
|
refName: refName ?? '',
|
||||||
|
sha,
|
||||||
|
isTag: ref?.startsWith('refs/tags/') ?? false,
|
||||||
|
isReleaseTarget: false,
|
||||||
|
isBetaRc: false,
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!ref || !refName) {
|
||||||
|
core.info('No matching ref found for workflow run; skipping post-CI workflow.');
|
||||||
|
} else {
|
||||||
|
const allowed =
|
||||||
|
ref.startsWith('refs/heads/feature-') ||
|
||||||
|
ref.startsWith('refs/heads/fix-') ||
|
||||||
|
ref.startsWith('refs/heads/l10n_') ||
|
||||||
|
ref === 'refs/heads/dev' ||
|
||||||
|
ref === 'refs/heads/beta' ||
|
||||||
|
ref.includes('beta.rc') ||
|
||||||
|
ref.startsWith('refs/tags/v');
|
||||||
|
|
||||||
|
const isBetaRc = refName.includes('beta.rc');
|
||||||
|
const isReleaseTarget = outputs.isTag && (refName.startsWith('v') || isBetaRc);
|
||||||
|
|
||||||
|
outputs.shouldBuild = allowed;
|
||||||
|
outputs.isReleaseTarget = isReleaseTarget;
|
||||||
|
outputs.isBetaRc = isBetaRc;
|
||||||
|
}
|
||||||
|
|
||||||
|
core.setOutput('should-build', outputs.shouldBuild ? 'true' : 'false');
|
||||||
|
core.setOutput('ref', outputs.ref);
|
||||||
|
core.setOutput('ref-name', outputs.refName);
|
||||||
|
core.setOutput('sha', outputs.sha);
|
||||||
|
core.setOutput('is-tag', outputs.isTag ? 'true' : 'false');
|
||||||
|
core.setOutput('is-release-target', outputs.isReleaseTarget ? 'true' : 'false');
|
||||||
|
core.setOutput('is-beta-rc', outputs.isBetaRc ? 'true' : 'false');
|
||||||
|
build-docker-image:
|
||||||
|
needs: prepare
|
||||||
|
if: needs.prepare.outputs.should-build == 'true'
|
||||||
|
name: Build Docker image for ${{ needs.prepare.outputs.ref-name }}
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-build-docker-image-${{ needs.prepare.outputs.ref-name || needs.prepare.outputs.sha }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
env:
|
||||||
|
REF: ${{ needs.prepare.outputs.ref }}
|
||||||
|
REF_NAME: ${{ needs.prepare.outputs.ref-name }}
|
||||||
|
SHA: ${{ needs.prepare.outputs.sha }}
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
with:
|
||||||
|
ref: ${{ env.SHA }}
|
||||||
|
- name: Check pushing to Docker Hub
|
||||||
|
id: push-other-places
|
||||||
|
env:
|
||||||
|
REPOSITORY_OWNER: ${{ github.repository_owner }}
|
||||||
|
REF_NAME: ${{ env.REF_NAME }}
|
||||||
|
REF: ${{ env.REF }}
|
||||||
|
run: |
|
||||||
|
if [[ "$REPOSITORY_OWNER" == "paperless-ngx" ]] && \
|
||||||
|
([[ "$REF_NAME" == "dev" ]] || [[ "$REF_NAME" == "beta" ]] || [[ "$REF" == refs/tags/v* ]]); then
|
||||||
|
echo "Enabling DockerHub image push"
|
||||||
|
echo "enable=true" >> "$GITHUB_OUTPUT"
|
||||||
|
else
|
||||||
|
echo "Not pushing to DockerHub"
|
||||||
|
echo "enable=false" >> "$GITHUB_OUTPUT"
|
||||||
|
fi
|
||||||
|
- name: Set ghcr repository name
|
||||||
|
id: set-ghcr-repository
|
||||||
|
run: |
|
||||||
|
ghcr_name=$(echo "${{ github.repository }}" | awk '{ print tolower($0) }')
|
||||||
|
echo "Name is ${ghcr_name}"
|
||||||
|
echo "ghcr-repository=${ghcr_name}" >> "$GITHUB_OUTPUT"
|
||||||
|
- name: Gather Docker metadata
|
||||||
|
id: docker-meta
|
||||||
|
uses: docker/metadata-action@v5
|
||||||
|
env:
|
||||||
|
GITHUB_REF: ${{ env.REF }}
|
||||||
|
GITHUB_REF_NAME: ${{ env.REF_NAME }}
|
||||||
|
GITHUB_SHA: ${{ env.SHA }}
|
||||||
|
with:
|
||||||
|
images: |
|
||||||
|
ghcr.io/${{ steps.set-ghcr-repository.outputs.ghcr-repository }}
|
||||||
|
name=paperlessngx/paperless-ngx,enable=${{ steps.push-other-places.outputs.enable }}
|
||||||
|
name=quay.io/paperlessngx/paperless-ngx,enable=${{ steps.push-other-places.outputs.enable }}
|
||||||
|
tags: |
|
||||||
|
type=ref,event=branch
|
||||||
|
type=semver,pattern={{version}}
|
||||||
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v3
|
||||||
|
with:
|
||||||
|
platforms: arm64
|
||||||
|
- name: Login to GitHub Container Registry
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: ghcr.io
|
||||||
|
username: ${{ github.actor }}
|
||||||
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
- name: Login to Docker Hub
|
||||||
|
if: steps.push-other-places.outputs.enable == 'true'
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
- name: Login to Quay.io
|
||||||
|
if: steps.push-other-places.outputs.enable == 'true'
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: quay.io
|
||||||
|
username: ${{ secrets.QUAY_USERNAME }}
|
||||||
|
password: ${{ secrets.QUAY_ROBOT_TOKEN }}
|
||||||
|
- name: Build and push
|
||||||
|
uses: docker/build-push-action@v6
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
file: ./Dockerfile
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
push: true
|
||||||
|
tags: ${{ steps.docker-meta.outputs.tags }}
|
||||||
|
labels: ${{ steps.docker-meta.outputs.labels }}
|
||||||
|
build-args: |
|
||||||
|
PNGX_TAG_VERSION=${{ steps.docker-meta.outputs.version }}
|
||||||
|
cache-from: |
|
||||||
|
type=registry,ref=ghcr.io/${{ steps.set-ghcr-repository.outputs.ghcr-repository }}/builder/cache/app:${{ env.REF_NAME }}
|
||||||
|
type=registry,ref=ghcr.io/${{ steps.set-ghcr-repository.outputs.ghcr-repository }}/builder/cache/app:dev
|
||||||
|
cache-to: |
|
||||||
|
type=registry,mode=max,ref=ghcr.io/${{ steps.set-ghcr-repository.outputs.ghcr-repository }}/builder/cache/app:${{ env.REF_NAME }}
|
||||||
|
- name: Inspect image
|
||||||
|
run: |
|
||||||
|
docker buildx imagetools inspect ${{ fromJSON(steps.docker-meta.outputs.json).tags[0] }}
|
||||||
|
- name: Export frontend artifact from docker
|
||||||
|
run: |
|
||||||
|
docker create --name frontend-extract ${{ fromJSON(steps.docker-meta.outputs.json).tags[0] }}
|
||||||
|
docker cp frontend-extract:/usr/src/paperless/src/documents/static/frontend src/documents/static/frontend/
|
||||||
|
- name: Upload frontend artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: frontend-compiled
|
||||||
|
path: src/documents/static/frontend/
|
||||||
|
retention-days: 7
|
||||||
|
build-release:
|
||||||
|
needs:
|
||||||
|
- prepare
|
||||||
|
- build-docker-image
|
||||||
|
if: needs.prepare.outputs.should-build == 'true'
|
||||||
|
name: Build release bundle
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
env:
|
||||||
|
REF_NAME: ${{ needs.prepare.outputs.ref-name }}
|
||||||
|
SHA: ${{ needs.prepare.outputs.sha }}
|
||||||
|
CI_RUN_ID: ${{ github.event.workflow_run.id }}
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
with:
|
||||||
|
ref: ${{ env.SHA }}
|
||||||
|
- name: Set up Python
|
||||||
|
id: setup-python
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: ${{ env.DEFAULT_PYTHON_VERSION }}
|
||||||
|
- name: Install uv
|
||||||
|
uses: astral-sh/setup-uv@v6
|
||||||
|
with:
|
||||||
|
version: ${{ env.DEFAULT_UV_VERSION }}
|
||||||
|
enable-cache: true
|
||||||
|
python-version: ${{ env.DEFAULT_PYTHON_VERSION }}
|
||||||
|
- name: Install Python dependencies
|
||||||
|
run: |
|
||||||
|
uv sync --python ${{ steps.setup-python.outputs.python-version }} --dev --frozen
|
||||||
|
- name: Install system dependencies
|
||||||
|
run: |
|
||||||
|
sudo apt-get update -qq
|
||||||
|
sudo apt-get install -qq --no-install-recommends gettext liblept5
|
||||||
|
- name: Download frontend artifact
|
||||||
|
uses: actions/download-artifact@v5
|
||||||
|
with:
|
||||||
|
name: frontend-compiled
|
||||||
|
path: src/documents/static/frontend/
|
||||||
|
- name: Download documentation artifact
|
||||||
|
uses: actions/download-artifact@v5
|
||||||
|
with:
|
||||||
|
name: documentation
|
||||||
|
path: docs/_build/html/
|
||||||
|
run-id: ${{ env.CI_RUN_ID }}
|
||||||
|
- name: Generate requirements file
|
||||||
|
run: |
|
||||||
|
uv export --quiet --no-dev --all-extras --format requirements-txt --output-file requirements.txt
|
||||||
|
- name: Compile messages
|
||||||
|
run: |
|
||||||
|
cd src/
|
||||||
|
uv run \
|
||||||
|
--python ${{ steps.setup-python.outputs.python-version }} \
|
||||||
|
manage.py compilemessages
|
||||||
|
- name: Collect static files
|
||||||
|
run: |
|
||||||
|
cd src/
|
||||||
|
uv run \
|
||||||
|
--python ${{ steps.setup-python.outputs.python-version }} \
|
||||||
|
manage.py collectstatic --no-input
|
||||||
|
- name: Move files
|
||||||
|
run: |
|
||||||
|
echo "Making dist folders"
|
||||||
|
for directory in dist \
|
||||||
|
dist/paperless-ngx \
|
||||||
|
dist/paperless-ngx/scripts;
|
||||||
|
do
|
||||||
|
mkdir --verbose --parents ${directory}
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Copying basic files"
|
||||||
|
for file_name in .dockerignore \
|
||||||
|
.env \
|
||||||
|
Dockerfile \
|
||||||
|
pyproject.toml \
|
||||||
|
uv.lock \
|
||||||
|
requirements.txt \
|
||||||
|
LICENSE \
|
||||||
|
README.md \
|
||||||
|
paperless.conf.example
|
||||||
|
do
|
||||||
|
cp --verbose ${file_name} dist/paperless-ngx/
|
||||||
|
done
|
||||||
|
mv --verbose dist/paperless-ngx/paperless.conf.example dist/paperless-ngx/paperless.conf
|
||||||
|
|
||||||
|
echo "Copying Docker related files"
|
||||||
|
cp --recursive docker/ dist/paperless-ngx/docker
|
||||||
|
|
||||||
|
echo "Copying startup scripts"
|
||||||
|
cp --verbose scripts/*.service scripts/*.sh scripts/*.socket dist/paperless-ngx/scripts/
|
||||||
|
|
||||||
|
echo "Copying source files"
|
||||||
|
cp --recursive src/ dist/paperless-ngx/src
|
||||||
|
echo "Copying documentation"
|
||||||
|
cp --recursive docs/_build/html/ dist/paperless-ngx/docs
|
||||||
|
|
||||||
|
mv --verbose static dist/paperless-ngx
|
||||||
|
- name: Make release package
|
||||||
|
run: |
|
||||||
|
echo "Creating release archive"
|
||||||
|
cd dist
|
||||||
|
sudo chown -R 1000:1000 paperless-ngx/
|
||||||
|
tar -cJf paperless-ngx.tar.xz paperless-ngx/
|
||||||
|
- name: Upload release artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: release
|
||||||
|
path: dist/paperless-ngx.tar.xz
|
||||||
|
retention-days: 7
|
||||||
|
publish-release:
|
||||||
|
needs:
|
||||||
|
- prepare
|
||||||
|
- build-release
|
||||||
|
if: needs.prepare.outputs.is-release-target == 'true'
|
||||||
|
name: Publish release
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
outputs:
|
||||||
|
prerelease: ${{ steps.get_version.outputs.prerelease }}
|
||||||
|
changelog: ${{ steps.create-release.outputs.body }}
|
||||||
|
version: ${{ steps.get_version.outputs.version }}
|
||||||
|
steps:
|
||||||
|
- name: Download release artifact
|
||||||
|
uses: actions/download-artifact@v5
|
||||||
|
with:
|
||||||
|
name: release
|
||||||
|
path: ./
|
||||||
|
- name: Get version
|
||||||
|
id: get_version
|
||||||
|
run: |
|
||||||
|
echo "version=${{ needs.prepare.outputs.ref-name }}" >> "$GITHUB_OUTPUT"
|
||||||
|
if [[ ${{ needs.prepare.outputs.is-beta-rc }} == 'true' ]]; then
|
||||||
|
echo "prerelease=true" >> "$GITHUB_OUTPUT"
|
||||||
|
else
|
||||||
|
echo "prerelease=false" >> "$GITHUB_OUTPUT"
|
||||||
|
fi
|
||||||
|
- name: Create Release and Changelog
|
||||||
|
id: create-release
|
||||||
|
uses: release-drafter/release-drafter@v6
|
||||||
|
with:
|
||||||
|
name: Paperless-ngx ${{ steps.get_version.outputs.version }}
|
||||||
|
tag: ${{ steps.get_version.outputs.version }}
|
||||||
|
version: ${{ steps.get_version.outputs.version }}
|
||||||
|
prerelease: ${{ steps.get_version.outputs.prerelease }}
|
||||||
|
publish: true
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
- name: Upload release archive
|
||||||
|
id: upload-release-asset
|
||||||
|
uses: shogo82148/actions-upload-release-asset@v1
|
||||||
|
with:
|
||||||
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
upload_url: ${{ steps.create-release.outputs.upload_url }}
|
||||||
|
asset_path: ./paperless-ngx.tar.xz
|
||||||
|
asset_name: paperless-ngx-${{ steps.get_version.outputs.version }}.tar.xz
|
||||||
|
asset_content_type: application/x-xz
|
||||||
|
append-changelog:
|
||||||
|
needs:
|
||||||
|
- publish-release
|
||||||
|
if: needs.publish-release.outputs.prerelease == 'false'
|
||||||
|
name: Append changelog to docs
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
with:
|
||||||
|
ref: main
|
||||||
|
- name: Set up Python
|
||||||
|
id: setup-python
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: ${{ env.DEFAULT_PYTHON_VERSION }}
|
||||||
|
- name: Install uv
|
||||||
|
uses: astral-sh/setup-uv@v6
|
||||||
|
with:
|
||||||
|
version: ${{ env.DEFAULT_UV_VERSION }}
|
||||||
|
enable-cache: true
|
||||||
|
python-version: ${{ env.DEFAULT_PYTHON_VERSION }}
|
||||||
|
- name: Append Changelog to docs
|
||||||
|
id: append-Changelog
|
||||||
|
working-directory: docs
|
||||||
|
run: |
|
||||||
|
git branch ${{ needs.publish-release.outputs.version }}-changelog
|
||||||
|
git checkout ${{ needs.publish-release.outputs.version }}-changelog
|
||||||
|
echo -e "# Changelog\n\n${{ needs.publish-release.outputs.changelog }}\n" > changelog-new.md
|
||||||
|
echo "Manually linking usernames"
|
||||||
|
sed -i -r 's|@([a-zA-Z0-9_]+) \(\[#|[@\1](https://github.com/\1) ([#|g' changelog-new.md
|
||||||
|
echo "Removing unneeded comment tags"
|
||||||
|
sed -i -r 's|@<!---->|@|g' changelog-new.md
|
||||||
|
CURRENT_CHANGELOG=`tail --lines +2 changelog.md`
|
||||||
|
echo -e "$CURRENT_CHANGELOG" >> changelog-new.md
|
||||||
|
mv changelog-new.md changelog.md
|
||||||
|
uv run \
|
||||||
|
--python ${{ steps.setup-python.outputs.python-version }} \
|
||||||
|
--dev \
|
||||||
|
pre-commit run --files changelog.md || true
|
||||||
|
git config --global user.name "github-actions"
|
||||||
|
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
||||||
|
git commit -am "Changelog ${{ needs.publish-release.outputs.version }} - GHA"
|
||||||
|
git push origin ${{ needs.publish-release.outputs.version }}-changelog
|
||||||
|
- name: Create Pull Request
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const { repo, owner } = context.repo;
|
||||||
|
const result = await github.rest.pulls.create({
|
||||||
|
title: 'Documentation: Add ${{ needs.publish-release.outputs.version }} changelog',
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
head: '${{ needs.publish-release.outputs.version }}-changelog',
|
||||||
|
base: 'main',
|
||||||
|
body: 'This PR is auto-generated by CI.'
|
||||||
|
});
|
||||||
|
github.rest.issues.addLabels({
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
issue_number: result.data.number,
|
||||||
|
labels: ['documentation', 'skip-changelog']
|
||||||
|
});
|
418
.github/workflows/ci.yml
vendored
418
.github/workflows/ci.yml
vendored
@@ -17,52 +17,11 @@ env:
|
|||||||
DEFAULT_PYTHON_VERSION: "3.11"
|
DEFAULT_PYTHON_VERSION: "3.11"
|
||||||
NLTK_DATA: "/usr/share/nltk_data"
|
NLTK_DATA: "/usr/share/nltk_data"
|
||||||
jobs:
|
jobs:
|
||||||
detect-duplicate:
|
|
||||||
name: Detect Duplicate Run
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
outputs:
|
|
||||||
should_run: ${{ steps.check.outputs.should_run }}
|
|
||||||
steps:
|
|
||||||
- name: Check if workflow should run
|
|
||||||
id: check
|
|
||||||
uses: actions/github-script@v7
|
|
||||||
with:
|
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
script: |
|
|
||||||
if (context.eventName !== 'push') {
|
|
||||||
core.info('Not a push event; running workflow.');
|
|
||||||
core.setOutput('should_run', 'true');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const ref = context.ref || '';
|
|
||||||
if (!ref.startsWith('refs/heads/')) {
|
|
||||||
core.info('Push is not to a branch; running workflow.');
|
|
||||||
core.setOutput('should_run', 'true');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const branch = ref.substring('refs/heads/'.length);
|
|
||||||
const { owner, repo } = context.repo;
|
|
||||||
const prs = await github.paginate(github.rest.pulls.list, {
|
|
||||||
owner,
|
|
||||||
repo,
|
|
||||||
state: 'open',
|
|
||||||
head: `${owner}:${branch}`,
|
|
||||||
per_page: 100,
|
|
||||||
});
|
|
||||||
|
|
||||||
if (prs.length === 0) {
|
|
||||||
core.info(`No open PR found for ${branch}; running workflow.`);
|
|
||||||
core.setOutput('should_run', 'true');
|
|
||||||
} else {
|
|
||||||
core.info(`Found ${prs.length} open PR(s) for ${branch}; skipping duplicate push run.`);
|
|
||||||
core.setOutput('should_run', 'false');
|
|
||||||
}
|
|
||||||
pre-commit:
|
pre-commit:
|
||||||
needs:
|
# We want to run on external PRs, but not on our own internal PRs as they'll be run
|
||||||
- detect-duplicate
|
# by the push to the branch. Without this if check, checks are duplicated since
|
||||||
if: needs.detect-duplicate.outputs.should_run == 'true'
|
# internal PRs match both the push and pull_request events.
|
||||||
|
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
|
||||||
name: Linting Checks
|
name: Linting Checks
|
||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
@@ -179,15 +138,19 @@ jobs:
|
|||||||
--dev \
|
--dev \
|
||||||
--frozen \
|
--frozen \
|
||||||
pytest
|
pytest
|
||||||
- name: Upload backend coverage to Coveralls
|
- name: Upload backend test results to Codecov
|
||||||
if: always()
|
if: always()
|
||||||
uses: coverallsapp/github-action@v2
|
uses: codecov/test-results-action@v1
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
file: coverage.xml
|
flags: backend-python-${{ matrix.python-version }}
|
||||||
format: cobertura
|
files: junit.xml
|
||||||
flag-name: backend-python-${{ matrix.python-version }}
|
- name: Upload backend coverage to Codecov
|
||||||
parallel: true
|
uses: codecov/codecov-action@v5
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
|
flags: backend-python-${{ matrix.python-version }}
|
||||||
|
files: coverage.xml
|
||||||
- name: Stop containers
|
- name: Stop containers
|
||||||
if: always()
|
if: always()
|
||||||
run: |
|
run: |
|
||||||
@@ -257,27 +220,19 @@ jobs:
|
|||||||
run: cd src-ui && pnpm run lint
|
run: cd src-ui && pnpm run lint
|
||||||
- name: Run Jest unit tests
|
- name: Run Jest unit tests
|
||||||
run: cd src-ui && pnpm run test --max-workers=2 --shard=${{ matrix.shard-index }}/${{ matrix.shard-count }}
|
run: cd src-ui && pnpm run test --max-workers=2 --shard=${{ matrix.shard-index }}/${{ matrix.shard-count }}
|
||||||
- name: Upload frontend coverage to Coveralls
|
- name: Upload frontend test results to Codecov
|
||||||
|
uses: codecov/test-results-action@v1
|
||||||
if: always()
|
if: always()
|
||||||
uses: coverallsapp/github-action@v2
|
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
file: src-ui/coverage/lcov.info
|
flags: frontend-node-${{ matrix.node-version }}
|
||||||
format: lcov
|
directory: src-ui/
|
||||||
flag-name: frontend-node-${{ matrix.node-version }}-shard-${{ matrix.shard-index }}
|
- name: Upload frontend coverage to Codecov
|
||||||
parallel: true
|
uses: codecov/codecov-action@v5
|
||||||
coveralls-finish:
|
|
||||||
name: Finalize Coveralls
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
needs:
|
|
||||||
- tests-backend
|
|
||||||
- tests-frontend
|
|
||||||
steps:
|
|
||||||
- name: Mark Coveralls jobs complete
|
|
||||||
uses: coverallsapp/github-action@v2
|
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
parallel-finished: true
|
flags: frontend-node-${{ matrix.node-version }}
|
||||||
|
directory: src-ui/coverage/
|
||||||
tests-frontend-e2e:
|
tests-frontend-e2e:
|
||||||
name: "Frontend E2E Tests (Node ${{ matrix.node-version }} - ${{ matrix.shard-index }}/${{ matrix.shard-count }})"
|
name: "Frontend E2E Tests (Node ${{ matrix.node-version }} - ${{ matrix.shard-index }}/${{ matrix.shard-count }})"
|
||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
@@ -355,325 +310,6 @@ jobs:
|
|||||||
- name: Re-link Angular cli
|
- name: Re-link Angular cli
|
||||||
run: cd src-ui && pnpm link @angular/cli
|
run: cd src-ui && pnpm link @angular/cli
|
||||||
- name: Build frontend and upload analysis
|
- name: Build frontend and upload analysis
|
||||||
run: cd src-ui && pnpm run build --configuration=production
|
|
||||||
build-docker-image:
|
|
||||||
name: Build Docker image for ${{ github.ref_name }}
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
if: github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/feature-') || startsWith(github.ref, 'refs/heads/fix-') || github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/beta' || contains(github.ref, 'beta.rc') || startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/heads/l10n_'))
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-build-docker-image-${{ github.ref_name }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
needs:
|
|
||||||
- tests-backend
|
|
||||||
- tests-frontend
|
|
||||||
- tests-frontend-e2e
|
|
||||||
steps:
|
|
||||||
- name: Check pushing to Docker Hub
|
|
||||||
id: push-other-places
|
|
||||||
# Only push to Dockerhub from the main repo AND the ref is either:
|
|
||||||
# main
|
|
||||||
# dev
|
|
||||||
# beta
|
|
||||||
# a tag
|
|
||||||
# Otherwise forks would require a Docker Hub account and secrets setup
|
|
||||||
run: |
|
|
||||||
if [[ ${{ github.repository_owner }} == "paperless-ngx" && ( ${{ github.ref_name }} == "dev" || ${{ github.ref_name }} == "beta" || ${{ startsWith(github.ref, 'refs/tags/v') }} == "true" ) ]] ; then
|
|
||||||
echo "Enabling DockerHub image push"
|
|
||||||
echo "enable=true" >> $GITHUB_OUTPUT
|
|
||||||
else
|
|
||||||
echo "Not pushing to DockerHub"
|
|
||||||
echo "enable=false" >> $GITHUB_OUTPUT
|
|
||||||
fi
|
|
||||||
- name: Set ghcr repository name
|
|
||||||
id: set-ghcr-repository
|
|
||||||
run: |
|
|
||||||
ghcr_name=$(echo "${{ github.repository }}" | awk '{ print tolower($0) }')
|
|
||||||
echo "Name is ${ghcr_name}"
|
|
||||||
echo "ghcr-repository=${ghcr_name}" >> $GITHUB_OUTPUT
|
|
||||||
- name: Gather Docker metadata
|
|
||||||
id: docker-meta
|
|
||||||
uses: docker/metadata-action@v5
|
|
||||||
with:
|
|
||||||
images: |
|
|
||||||
ghcr.io/${{ steps.set-ghcr-repository.outputs.ghcr-repository }}
|
|
||||||
name=paperlessngx/paperless-ngx,enable=${{ steps.push-other-places.outputs.enable }}
|
|
||||||
name=quay.io/paperlessngx/paperless-ngx,enable=${{ steps.push-other-places.outputs.enable }}
|
|
||||||
tags: |
|
|
||||||
# Tag branches with branch name
|
|
||||||
type=ref,event=branch
|
|
||||||
# Process semver tags
|
|
||||||
# For a tag x.y.z or vX.Y.Z, output an x.y.z and x.y image tag
|
|
||||||
type=semver,pattern={{version}}
|
|
||||||
type=semver,pattern={{major}}.{{minor}}
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v5
|
|
||||||
# If https://github.com/docker/buildx/issues/1044 is resolved,
|
|
||||||
# the append input with a native arm64 arch could be used to
|
|
||||||
# significantly speed up building
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
- name: Set up QEMU
|
|
||||||
uses: docker/setup-qemu-action@v3
|
|
||||||
with:
|
|
||||||
platforms: arm64
|
|
||||||
- name: Login to GitHub Container Registry
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
registry: ghcr.io
|
|
||||||
username: ${{ github.actor }}
|
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
- name: Login to Docker Hub
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
# Don't attempt to login if not pushing to Docker Hub
|
|
||||||
if: steps.push-other-places.outputs.enable == 'true'
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
||||||
- name: Login to Quay.io
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
# Don't attempt to login if not pushing to Quay.io
|
|
||||||
if: steps.push-other-places.outputs.enable == 'true'
|
|
||||||
with:
|
|
||||||
registry: quay.io
|
|
||||||
username: ${{ secrets.QUAY_USERNAME }}
|
|
||||||
password: ${{ secrets.QUAY_ROBOT_TOKEN }}
|
|
||||||
- name: Build and push
|
|
||||||
uses: docker/build-push-action@v6
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
file: ./Dockerfile
|
|
||||||
platforms: linux/amd64,linux/arm64
|
|
||||||
push: ${{ github.event_name != 'pull_request' }}
|
|
||||||
tags: ${{ steps.docker-meta.outputs.tags }}
|
|
||||||
labels: ${{ steps.docker-meta.outputs.labels }}
|
|
||||||
build-args: |
|
|
||||||
PNGX_TAG_VERSION=${{ steps.docker-meta.outputs.version }}
|
|
||||||
# Get cache layers from this branch, then dev
|
|
||||||
# This allows new branches to get at least some cache benefits, generally from dev
|
|
||||||
cache-from: |
|
|
||||||
type=registry,ref=ghcr.io/${{ steps.set-ghcr-repository.outputs.ghcr-repository }}/builder/cache/app:${{ github.ref_name }}
|
|
||||||
type=registry,ref=ghcr.io/${{ steps.set-ghcr-repository.outputs.ghcr-repository }}/builder/cache/app:dev
|
|
||||||
cache-to: |
|
|
||||||
type=registry,mode=max,ref=ghcr.io/${{ steps.set-ghcr-repository.outputs.ghcr-repository }}/builder/cache/app:${{ github.ref_name }}
|
|
||||||
- name: Inspect image
|
|
||||||
run: |
|
|
||||||
docker buildx imagetools inspect ${{ fromJSON(steps.docker-meta.outputs.json).tags[0] }}
|
|
||||||
- name: Export frontend artifact from docker
|
|
||||||
run: |
|
|
||||||
docker create --name frontend-extract ${{ fromJSON(steps.docker-meta.outputs.json).tags[0] }}
|
|
||||||
docker cp frontend-extract:/usr/src/paperless/src/documents/static/frontend src/documents/static/frontend/
|
|
||||||
- name: Upload frontend artifact
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: frontend-compiled
|
|
||||||
path: src/documents/static/frontend/
|
|
||||||
retention-days: 7
|
|
||||||
build-release:
|
|
||||||
name: "Build Release"
|
|
||||||
needs:
|
|
||||||
- build-docker-image
|
|
||||||
- documentation
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v5
|
|
||||||
- name: Set up Python
|
|
||||||
id: setup-python
|
|
||||||
uses: actions/setup-python@v5
|
|
||||||
with:
|
|
||||||
python-version: ${{ env.DEFAULT_PYTHON_VERSION }}
|
|
||||||
- name: Install uv
|
|
||||||
uses: astral-sh/setup-uv@v6
|
|
||||||
with:
|
|
||||||
version: ${{ env.DEFAULT_UV_VERSION }}
|
|
||||||
enable-cache: true
|
|
||||||
python-version: ${{ steps.setup-python.outputs.python-version }}
|
|
||||||
- name: Install Python dependencies
|
|
||||||
run: |
|
|
||||||
uv sync --python ${{ steps.setup-python.outputs.python-version }} --dev --frozen
|
|
||||||
- name: Install system dependencies
|
|
||||||
run: |
|
|
||||||
sudo apt-get update -qq
|
|
||||||
sudo apt-get install -qq --no-install-recommends gettext liblept5
|
|
||||||
- name: Download frontend artifact
|
|
||||||
uses: actions/download-artifact@v5
|
|
||||||
with:
|
|
||||||
name: frontend-compiled
|
|
||||||
path: src/documents/static/frontend/
|
|
||||||
- name: Download documentation artifact
|
|
||||||
uses: actions/download-artifact@v5
|
|
||||||
with:
|
|
||||||
name: documentation
|
|
||||||
path: docs/_build/html/
|
|
||||||
- name: Generate requirements file
|
|
||||||
run: |
|
|
||||||
uv export --quiet --no-dev --all-extras --format requirements-txt --output-file requirements.txt
|
|
||||||
- name: Compile messages
|
|
||||||
run: |
|
|
||||||
cd src/
|
|
||||||
uv run \
|
|
||||||
--python ${{ steps.setup-python.outputs.python-version }} \
|
|
||||||
manage.py compilemessages
|
|
||||||
- name: Collect static files
|
|
||||||
run: |
|
|
||||||
cd src/
|
|
||||||
uv run \
|
|
||||||
--python ${{ steps.setup-python.outputs.python-version }} \
|
|
||||||
manage.py collectstatic --no-input
|
|
||||||
- name: Move files
|
|
||||||
run: |
|
|
||||||
echo "Making dist folders"
|
|
||||||
for directory in dist \
|
|
||||||
dist/paperless-ngx \
|
|
||||||
dist/paperless-ngx/scripts;
|
|
||||||
do
|
|
||||||
mkdir --verbose --parents ${directory}
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "Copying basic files"
|
|
||||||
for file_name in .dockerignore \
|
|
||||||
.env \
|
|
||||||
Dockerfile \
|
|
||||||
pyproject.toml \
|
|
||||||
uv.lock \
|
|
||||||
requirements.txt \
|
|
||||||
LICENSE \
|
|
||||||
README.md \
|
|
||||||
paperless.conf.example
|
|
||||||
do
|
|
||||||
cp --verbose ${file_name} dist/paperless-ngx/
|
|
||||||
done
|
|
||||||
mv --verbose dist/paperless-ngx/paperless.conf.example dist/paperless-ngx/paperless.conf
|
|
||||||
|
|
||||||
echo "Copying Docker related files"
|
|
||||||
cp --recursive docker/ dist/paperless-ngx/docker
|
|
||||||
|
|
||||||
echo "Copying startup scripts"
|
|
||||||
cp --verbose scripts/*.service scripts/*.sh scripts/*.socket dist/paperless-ngx/scripts/
|
|
||||||
|
|
||||||
echo "Copying source files"
|
|
||||||
cp --recursive src/ dist/paperless-ngx/src
|
|
||||||
echo "Copying documentation"
|
|
||||||
cp --recursive docs/_build/html/ dist/paperless-ngx/docs
|
|
||||||
|
|
||||||
mv --verbose static dist/paperless-ngx
|
|
||||||
- name: Make release package
|
|
||||||
run: |
|
|
||||||
echo "Creating release archive"
|
|
||||||
cd dist
|
|
||||||
sudo chown -R 1000:1000 paperless-ngx/
|
|
||||||
tar -cJf paperless-ngx.tar.xz paperless-ngx/
|
|
||||||
- name: Upload release artifact
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: release
|
|
||||||
path: dist/paperless-ngx.tar.xz
|
|
||||||
retention-days: 7
|
|
||||||
publish-release:
|
|
||||||
name: "Publish Release"
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
outputs:
|
|
||||||
prerelease: ${{ steps.get_version.outputs.prerelease }}
|
|
||||||
changelog: ${{ steps.create-release.outputs.body }}
|
|
||||||
version: ${{ steps.get_version.outputs.version }}
|
|
||||||
needs:
|
|
||||||
- build-release
|
|
||||||
if: github.ref_type == 'tag' && (startsWith(github.ref_name, 'v') || contains(github.ref_name, '-beta.rc'))
|
|
||||||
steps:
|
|
||||||
- name: Download release artifact
|
|
||||||
uses: actions/download-artifact@v5
|
|
||||||
with:
|
|
||||||
name: release
|
|
||||||
path: ./
|
|
||||||
- name: Get version
|
|
||||||
id: get_version
|
|
||||||
run: |
|
|
||||||
echo "version=${{ github.ref_name }}" >> $GITHUB_OUTPUT
|
|
||||||
if [[ ${{ contains(github.ref_name, '-beta.rc') }} == 'true' ]]; then
|
|
||||||
echo "prerelease=true" >> $GITHUB_OUTPUT
|
|
||||||
else
|
|
||||||
echo "prerelease=false" >> $GITHUB_OUTPUT
|
|
||||||
fi
|
|
||||||
- name: Create Release and Changelog
|
|
||||||
id: create-release
|
|
||||||
uses: release-drafter/release-drafter@v6
|
|
||||||
with:
|
|
||||||
name: Paperless-ngx ${{ steps.get_version.outputs.version }}
|
|
||||||
tag: ${{ steps.get_version.outputs.version }}
|
|
||||||
version: ${{ steps.get_version.outputs.version }}
|
|
||||||
prerelease: ${{ steps.get_version.outputs.prerelease }}
|
|
||||||
publish: true # ensures release is not marked as draft
|
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
||||||
- name: Upload release archive
|
run: cd src-ui && pnpm run build --configuration=production
|
||||||
id: upload-release-asset
|
|
||||||
uses: shogo82148/actions-upload-release-asset@v1
|
|
||||||
with:
|
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
upload_url: ${{ steps.create-release.outputs.upload_url }}
|
|
||||||
asset_path: ./paperless-ngx.tar.xz
|
|
||||||
asset_name: paperless-ngx-${{ steps.get_version.outputs.version }}.tar.xz
|
|
||||||
asset_content_type: application/x-xz
|
|
||||||
append-changelog:
|
|
||||||
name: "Append Changelog"
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
needs:
|
|
||||||
- publish-release
|
|
||||||
if: needs.publish-release.outputs.prerelease == 'false'
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v5
|
|
||||||
with:
|
|
||||||
ref: main
|
|
||||||
- name: Set up Python
|
|
||||||
id: setup-python
|
|
||||||
uses: actions/setup-python@v5
|
|
||||||
with:
|
|
||||||
python-version: ${{ env.DEFAULT_PYTHON_VERSION }}
|
|
||||||
- name: Install uv
|
|
||||||
uses: astral-sh/setup-uv@v6
|
|
||||||
with:
|
|
||||||
version: ${{ env.DEFAULT_UV_VERSION }}
|
|
||||||
enable-cache: true
|
|
||||||
python-version: ${{ env.DEFAULT_PYTHON_VERSION }}
|
|
||||||
- name: Append Changelog to docs
|
|
||||||
id: append-Changelog
|
|
||||||
working-directory: docs
|
|
||||||
run: |
|
|
||||||
git branch ${{ needs.publish-release.outputs.version }}-changelog
|
|
||||||
git checkout ${{ needs.publish-release.outputs.version }}-changelog
|
|
||||||
echo -e "# Changelog\n\n${{ needs.publish-release.outputs.changelog }}\n" > changelog-new.md
|
|
||||||
echo "Manually linking usernames"
|
|
||||||
sed -i -r 's|@([a-zA-Z0-9_]+) \(\[#|[@\1](https://github.com/\1) ([#|g' changelog-new.md
|
|
||||||
echo "Removing unneeded comment tags"
|
|
||||||
sed -i -r 's|@<!---->|@|g' changelog-new.md
|
|
||||||
CURRENT_CHANGELOG=`tail --lines +2 changelog.md`
|
|
||||||
echo -e "$CURRENT_CHANGELOG" >> changelog-new.md
|
|
||||||
mv changelog-new.md changelog.md
|
|
||||||
uv run \
|
|
||||||
--python ${{ steps.setup-python.outputs.python-version }} \
|
|
||||||
--dev \
|
|
||||||
pre-commit run --files changelog.md || true
|
|
||||||
git config --global user.name "github-actions"
|
|
||||||
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
||||||
git commit -am "Changelog ${{ needs.publish-release.outputs.version }} - GHA"
|
|
||||||
git push origin ${{ needs.publish-release.outputs.version }}-changelog
|
|
||||||
- name: Create Pull Request
|
|
||||||
uses: actions/github-script@v7
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
const { repo, owner } = context.repo;
|
|
||||||
const result = await github.rest.pulls.create({
|
|
||||||
title: 'Documentation: Add ${{ needs.publish-release.outputs.version }} changelog',
|
|
||||||
owner,
|
|
||||||
repo,
|
|
||||||
head: '${{ needs.publish-release.outputs.version }}-changelog',
|
|
||||||
base: 'main',
|
|
||||||
body: 'This PR is auto-generated by CI.'
|
|
||||||
});
|
|
||||||
github.rest.issues.addLabels({
|
|
||||||
owner,
|
|
||||||
repo,
|
|
||||||
issue_number: result.data.number,
|
|
||||||
labels: ['documentation', 'skip-changelog']
|
|
||||||
});
|
|
||||||
|
220
.github/workflows/codecov-comment.yml
vendored
Normal file
220
.github/workflows/codecov-comment.yml
vendored
Normal file
@@ -0,0 +1,220 @@
|
|||||||
|
name: Codecov PR Comment
|
||||||
|
on:
|
||||||
|
workflow_run:
|
||||||
|
workflows:
|
||||||
|
- ci
|
||||||
|
types:
|
||||||
|
- completed
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: write
|
||||||
|
jobs:
|
||||||
|
comment:
|
||||||
|
if: >-
|
||||||
|
github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success'
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
steps:
|
||||||
|
- name: Gather pull request context
|
||||||
|
id: pr
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const run = context.payload.workflow_run;
|
||||||
|
if (!run.pull_requests || run.pull_requests.length === 0) {
|
||||||
|
core.info('No associated pull request. Skipping.');
|
||||||
|
return { shouldRun: false };
|
||||||
|
}
|
||||||
|
|
||||||
|
const pr = run.pull_requests[0];
|
||||||
|
return {
|
||||||
|
shouldRun: true,
|
||||||
|
prNumber: pr.number,
|
||||||
|
headSha: run.head_sha,
|
||||||
|
};
|
||||||
|
- name: Fetch Codecov coverage
|
||||||
|
id: coverage
|
||||||
|
if: steps.pr.outputs.shouldRun == 'true'
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
env:
|
||||||
|
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
||||||
|
COMMIT_SHA: ${{ steps.pr.outputs.headSha }}
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const token = process.env.CODECOV_TOKEN;
|
||||||
|
if (!token) {
|
||||||
|
core.warning('CODECOV_TOKEN secret is not available; skipping comment.');
|
||||||
|
core.setOutput('shouldComment', 'false');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const commitSha = process.env.COMMIT_SHA;
|
||||||
|
const owner = context.repo.owner;
|
||||||
|
const repo = context.repo.repo;
|
||||||
|
const url = `https://codecov.io/api/v2/github/${owner}/repos/${repo}/commits/${commitSha}/report`;
|
||||||
|
const maxAttempts = 10;
|
||||||
|
const waitMs = 15000;
|
||||||
|
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
||||||
|
|
||||||
|
let data;
|
||||||
|
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
||||||
|
core.info(`Fetching Codecov report (attempt ${attempt}/${maxAttempts})`);
|
||||||
|
const response = await fetch(url, {
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${token}`,
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
Accept: 'application/json',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (response.status === 404) {
|
||||||
|
core.info('Report not ready yet (404). Waiting before retrying.');
|
||||||
|
await sleep(waitMs);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!response.ok) {
|
||||||
|
const text = await response.text();
|
||||||
|
throw new Error(`Codecov API returned ${response.status}: ${text}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
data = await response.json();
|
||||||
|
if (data && Object.keys(data).length > 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
core.info('Report payload empty. Waiting before retrying.');
|
||||||
|
await sleep(waitMs);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!data) {
|
||||||
|
core.warning('Unable to retrieve Codecov report after multiple attempts.');
|
||||||
|
core.setOutput('shouldComment', 'false');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const totals = data.report?.totals ?? data.commit?.totals ?? data.totals;
|
||||||
|
if (!totals) {
|
||||||
|
core.warning('Codecov response does not contain coverage totals.');
|
||||||
|
core.setOutput('shouldComment', 'false');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const compareTotals = data.report?.compare?.totals ?? data.compare?.totals;
|
||||||
|
const flagsRaw = data.report?.totals_by_flag ?? data.report?.components ?? [];
|
||||||
|
|
||||||
|
const toNumber = (value) => {
|
||||||
|
if (value === null || value === undefined || value === '') {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
const num = Number(value);
|
||||||
|
return Number.isFinite(num) ? num : undefined;
|
||||||
|
};
|
||||||
|
|
||||||
|
const coverage = toNumber(totals.coverage);
|
||||||
|
const baseCoverage = toNumber(compareTotals?.base_coverage ?? compareTotals?.base);
|
||||||
|
const delta = toNumber(
|
||||||
|
compareTotals?.coverage_change ??
|
||||||
|
compareTotals?.coverage_diff ??
|
||||||
|
totals.delta ??
|
||||||
|
totals.diff ??
|
||||||
|
totals.change,
|
||||||
|
);
|
||||||
|
|
||||||
|
const formatPercent = (value) => {
|
||||||
|
if (value === undefined) return '—';
|
||||||
|
return `${value.toFixed(2)}%`;
|
||||||
|
};
|
||||||
|
|
||||||
|
const formatDelta = (value) => {
|
||||||
|
if (value === undefined) return '—';
|
||||||
|
const sign = value >= 0 ? '+' : '';
|
||||||
|
return `${sign}${value.toFixed(2)}%`;
|
||||||
|
};
|
||||||
|
|
||||||
|
const shortSha = commitSha.slice(0, 7);
|
||||||
|
const lines = [
|
||||||
|
'<!-- codecov-coverage-comment -->',
|
||||||
|
'**Codecov Coverage**',
|
||||||
|
'',
|
||||||
|
`- Head \`${shortSha}\`: ${formatPercent(coverage)}`,
|
||||||
|
];
|
||||||
|
|
||||||
|
if (baseCoverage !== undefined) {
|
||||||
|
lines.push(`- Base: ${formatPercent(baseCoverage)}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (delta !== undefined) {
|
||||||
|
lines.push(`- Change: ${formatDelta(delta)}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const flagEntries = Array.isArray(flagsRaw)
|
||||||
|
? flagsRaw
|
||||||
|
: Object.entries(flagsRaw).map(([name, totals]) => ({ name, totals }));
|
||||||
|
|
||||||
|
const flagRows = [];
|
||||||
|
for (const entry of flagEntries) {
|
||||||
|
const label = entry.flag ?? entry.name ?? entry.component ?? entry.id;
|
||||||
|
const entryTotals = entry.totals ?? entry;
|
||||||
|
const entryCoverage = toNumber(entryTotals?.coverage);
|
||||||
|
const entryDelta = toNumber(
|
||||||
|
entryTotals?.coverage_change ??
|
||||||
|
entryTotals?.coverage_diff ??
|
||||||
|
entryTotals?.delta ??
|
||||||
|
entryTotals?.diff,
|
||||||
|
);
|
||||||
|
if (!label || entryCoverage === undefined) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
flagRows.push(`| ${label} | ${formatPercent(entryCoverage)} | ${formatDelta(entryDelta)} |`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flagRows.length) {
|
||||||
|
lines.push('');
|
||||||
|
lines.push('| Flag | Coverage | Change |');
|
||||||
|
lines.push('| --- | --- | --- |');
|
||||||
|
lines.push(...flagRows);
|
||||||
|
}
|
||||||
|
|
||||||
|
const commentBody = lines.join('\n');
|
||||||
|
const shouldComment = coverage !== undefined;
|
||||||
|
core.setOutput('shouldComment', shouldComment ? 'true' : 'false');
|
||||||
|
if (shouldComment) {
|
||||||
|
core.setOutput('commentBody', commentBody);
|
||||||
|
}
|
||||||
|
- name: Upsert coverage comment
|
||||||
|
if: steps.pr.outputs.shouldRun == 'true' && steps.coverage.outputs.shouldComment == 'true'
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
env:
|
||||||
|
PR_NUMBER: ${{ steps.pr.outputs.prNumber }}
|
||||||
|
COMMENT_BODY: ${{ steps.coverage.outputs.commentBody }}
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const prNumber = Number(process.env.PR_NUMBER);
|
||||||
|
const body = process.env.COMMENT_BODY;
|
||||||
|
const marker = '<!-- codecov-coverage-comment -->';
|
||||||
|
|
||||||
|
const { data: comments } = await github.rest.issues.listComments({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: prNumber,
|
||||||
|
per_page: 100,
|
||||||
|
});
|
||||||
|
|
||||||
|
const existing = comments.find((comment) => comment.body?.includes(marker));
|
||||||
|
if (existing) {
|
||||||
|
core.info(`Updating existing coverage comment (id: ${existing.id}).`);
|
||||||
|
await github.rest.issues.updateComment({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
comment_id: existing.id,
|
||||||
|
body,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
core.info('Creating new coverage comment.');
|
||||||
|
await github.rest.issues.createComment({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: prNumber,
|
||||||
|
body,
|
||||||
|
});
|
||||||
|
}
|
@@ -55,8 +55,11 @@
|
|||||||
},
|
},
|
||||||
"architect": {
|
"architect": {
|
||||||
"build": {
|
"build": {
|
||||||
"builder": "@angular-devkit/build-angular:browser",
|
"builder": "@angular-builders/custom-webpack:browser",
|
||||||
"options": {
|
"options": {
|
||||||
|
"customWebpackConfig": {
|
||||||
|
"path": "./extra-webpack.config.ts"
|
||||||
|
},
|
||||||
"outputPath": "dist/paperless-ui",
|
"outputPath": "dist/paperless-ui",
|
||||||
"main": "src/main.ts",
|
"main": "src/main.ts",
|
||||||
"outputHashing": "none",
|
"outputHashing": "none",
|
||||||
@@ -132,7 +135,7 @@
|
|||||||
"defaultConfiguration": ""
|
"defaultConfiguration": ""
|
||||||
},
|
},
|
||||||
"serve": {
|
"serve": {
|
||||||
"builder": "@angular-devkit/build-angular:dev-server",
|
"builder": "@angular-builders/custom-webpack:dev-server",
|
||||||
"options": {
|
"options": {
|
||||||
"buildTarget": "paperless-ui:build:en-US"
|
"buildTarget": "paperless-ui:build:en-US"
|
||||||
},
|
},
|
||||||
@@ -143,7 +146,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"extract-i18n": {
|
"extract-i18n": {
|
||||||
"builder": "@angular-devkit/build-angular:extract-i18n",
|
"builder": "@angular-builders/custom-webpack:extract-i18n",
|
||||||
"options": {
|
"options": {
|
||||||
"buildTarget": "paperless-ui:build"
|
"buildTarget": "paperless-ui:build"
|
||||||
}
|
}
|
||||||
|
24
src-ui/extra-webpack.config.ts
Normal file
24
src-ui/extra-webpack.config.ts
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
import {
|
||||||
|
CustomWebpackBrowserSchema,
|
||||||
|
TargetOptions,
|
||||||
|
} from '@angular-builders/custom-webpack'
|
||||||
|
import * as webpack from 'webpack'
|
||||||
|
const { codecovWebpackPlugin } = require('@codecov/webpack-plugin')
|
||||||
|
|
||||||
|
export default (
|
||||||
|
config: webpack.Configuration,
|
||||||
|
options: CustomWebpackBrowserSchema,
|
||||||
|
targetOptions: TargetOptions
|
||||||
|
) => {
|
||||||
|
if (config.plugins) {
|
||||||
|
config.plugins.push(
|
||||||
|
codecovWebpackPlugin({
|
||||||
|
enableBundleAnalysis: process.env.CODECOV_TOKEN !== undefined,
|
||||||
|
bundleName: 'paperless-ngx',
|
||||||
|
uploadToken: process.env.CODECOV_TOKEN,
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return config
|
||||||
|
}
|
@@ -40,6 +40,7 @@
|
|||||||
"zone.js": "^0.15.1"
|
"zone.js": "^0.15.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@angular-builders/custom-webpack": "^20.0.0",
|
||||||
"@angular-builders/jest": "^20.0.0",
|
"@angular-builders/jest": "^20.0.0",
|
||||||
"@angular-devkit/core": "^20.2.2",
|
"@angular-devkit/core": "^20.2.2",
|
||||||
"@angular-devkit/schematics": "^20.2.2",
|
"@angular-devkit/schematics": "^20.2.2",
|
||||||
@@ -51,6 +52,7 @@
|
|||||||
"@angular/build": "^20.2.2",
|
"@angular/build": "^20.2.2",
|
||||||
"@angular/cli": "~20.2.2",
|
"@angular/cli": "~20.2.2",
|
||||||
"@angular/compiler-cli": "~20.2.4",
|
"@angular/compiler-cli": "~20.2.4",
|
||||||
|
"@codecov/webpack-plugin": "^1.9.1",
|
||||||
"@playwright/test": "^1.55.0",
|
"@playwright/test": "^1.55.0",
|
||||||
"@types/jest": "^30.0.0",
|
"@types/jest": "^30.0.0",
|
||||||
"@types/node": "^24.3.0",
|
"@types/node": "^24.3.0",
|
||||||
|
421
src-ui/pnpm-lock.yaml
generated
421
src-ui/pnpm-lock.yaml
generated
@@ -90,6 +90,9 @@ importers:
|
|||||||
specifier: ^0.15.1
|
specifier: ^0.15.1
|
||||||
version: 0.15.1
|
version: 0.15.1
|
||||||
devDependencies:
|
devDependencies:
|
||||||
|
'@angular-builders/custom-webpack':
|
||||||
|
specifier: ^20.0.0
|
||||||
|
version: 20.0.0(@angular/compiler-cli@20.2.4(@angular/compiler@20.2.4)(typescript@5.8.3))(@angular/compiler@20.2.4)(@angular/core@20.2.4(@angular/compiler@20.2.4)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/localize@20.2.4(@angular/compiler-cli@20.2.4(@angular/compiler@20.2.4)(typescript@5.8.3))(@angular/compiler@20.2.4))(@angular/platform-browser@20.2.4(@angular/common@20.2.4(@angular/core@20.2.4(@angular/compiler@20.2.4)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@20.2.4(@angular/compiler@20.2.4)(rxjs@7.8.2)(zone.js@0.15.1)))(@types/node@24.3.0)(chokidar@4.0.3)(jest-environment-jsdom@30.1.2(canvas@3.0.0))(jest@30.1.3(@types/node@24.3.0)(ts-node@10.9.2(@types/node@24.3.0)(typescript@5.8.3)))(jiti@1.21.7)(less@4.3.0)(postcss@8.5.3)(terser@5.39.1)(tslib@2.8.1)(typescript@5.8.3)(vite@7.1.2(@types/node@24.3.0)(jiti@1.21.7)(less@4.3.0)(sass@1.90.0)(terser@5.39.1)(yaml@2.7.0))(yaml@2.7.0)
|
||||||
'@angular-builders/jest':
|
'@angular-builders/jest':
|
||||||
specifier: ^20.0.0
|
specifier: ^20.0.0
|
||||||
version: 20.0.0(56c75f145b0896aaaed75da1af9e9b5c)
|
version: 20.0.0(56c75f145b0896aaaed75da1af9e9b5c)
|
||||||
@@ -123,6 +126,9 @@ importers:
|
|||||||
'@angular/compiler-cli':
|
'@angular/compiler-cli':
|
||||||
specifier: ~20.2.4
|
specifier: ~20.2.4
|
||||||
version: 20.2.4(@angular/compiler@20.2.4)(typescript@5.8.3)
|
version: 20.2.4(@angular/compiler@20.2.4)(typescript@5.8.3)
|
||||||
|
'@codecov/webpack-plugin':
|
||||||
|
specifier: ^1.9.1
|
||||||
|
version: 1.9.1(webpack@5.101.3)
|
||||||
'@playwright/test':
|
'@playwright/test':
|
||||||
specifier: ^1.55.0
|
specifier: ^1.55.0
|
||||||
version: 1.55.0
|
version: 1.55.0
|
||||||
@@ -174,6 +180,21 @@ importers:
|
|||||||
|
|
||||||
packages:
|
packages:
|
||||||
|
|
||||||
|
'@actions/core@1.11.1':
|
||||||
|
resolution: {integrity: sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==}
|
||||||
|
|
||||||
|
'@actions/exec@1.1.1':
|
||||||
|
resolution: {integrity: sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==}
|
||||||
|
|
||||||
|
'@actions/github@6.0.1':
|
||||||
|
resolution: {integrity: sha512-xbZVcaqD4XnQAe35qSQqskb3SqIAfRyLBrHMd/8TuL7hJSz2QtbDwnNM8zWx4zO5l2fnGtseNE3MbEvD7BxVMw==}
|
||||||
|
|
||||||
|
'@actions/http-client@2.2.3':
|
||||||
|
resolution: {integrity: sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA==}
|
||||||
|
|
||||||
|
'@actions/io@1.1.3':
|
||||||
|
resolution: {integrity: sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==}
|
||||||
|
|
||||||
'@algolia/abtesting@1.1.0':
|
'@algolia/abtesting@1.1.0':
|
||||||
resolution: {integrity: sha512-sEyWjw28a/9iluA37KLGu8vjxEIlb60uxznfTUmXImy7H5NvbpSO6yYgmgH5KiD7j+zTUUihiST0jEP12IoXow==}
|
resolution: {integrity: sha512-sEyWjw28a/9iluA37KLGu8vjxEIlb60uxznfTUmXImy7H5NvbpSO6yYgmgH5KiD7j+zTUUihiST0jEP12IoXow==}
|
||||||
engines: {node: '>= 14.0.0'}
|
engines: {node: '>= 14.0.0'}
|
||||||
@@ -238,6 +259,12 @@ packages:
|
|||||||
resolution: {integrity: sha512-bepZI1KdXUVhDGqHOudZQJwucSbZWxfWzM+EHFXUoExUO0u7XEuHTF5bhtQZ+YU+ZK2Ayl26QbI/26Yj72vcFQ==}
|
resolution: {integrity: sha512-bepZI1KdXUVhDGqHOudZQJwucSbZWxfWzM+EHFXUoExUO0u7XEuHTF5bhtQZ+YU+ZK2Ayl26QbI/26Yj72vcFQ==}
|
||||||
engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
|
engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
|
||||||
|
|
||||||
|
'@angular-builders/custom-webpack@20.0.0':
|
||||||
|
resolution: {integrity: sha512-aw7zXG5vhsYCPLR/eOThcyWLJZ9MEh49wYaj0LouBctJsAdR6Pgg3ksubrejLI5oiUWxM9Ywu4BGwmf3QaUYqg==}
|
||||||
|
engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
|
||||||
|
peerDependencies:
|
||||||
|
'@angular/compiler-cli': ^20.0.0
|
||||||
|
|
||||||
'@angular-builders/jest@20.0.0':
|
'@angular-builders/jest@20.0.0':
|
||||||
resolution: {integrity: sha512-3rnobnIdErtjyM3yAAAOdod79lgbkf1QWMFHiRDHW4tw4f+DLFiM2HMFircCoO5WIe/ILEJE9GNxs/vvYa3gvw==}
|
resolution: {integrity: sha512-3rnobnIdErtjyM3yAAAOdod79lgbkf1QWMFHiRDHW4tw4f+DLFiM2HMFircCoO5WIe/ILEJE9GNxs/vvYa3gvw==}
|
||||||
engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
|
engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
|
||||||
@@ -568,6 +595,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
|
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
|
||||||
engines: {node: '>=6.9.0'}
|
engines: {node: '>=6.9.0'}
|
||||||
|
|
||||||
|
'@babel/compat-data@7.27.7':
|
||||||
|
resolution: {integrity: sha512-xgu/ySj2mTiUFmdE9yCMfBxLp4DHd5DwmbbD05YAuICfodYT3VvRxbrh81LGQ/8UpSdtMdfKMn3KouYDX59DGQ==}
|
||||||
|
engines: {node: '>=6.9.0'}
|
||||||
|
|
||||||
'@babel/compat-data@7.28.0':
|
'@babel/compat-data@7.28.0':
|
||||||
resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==}
|
resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==}
|
||||||
engines: {node: '>=6.9.0'}
|
engines: {node: '>=6.9.0'}
|
||||||
@@ -1163,6 +1194,16 @@ packages:
|
|||||||
'@bcoe/v8-coverage@0.2.3':
|
'@bcoe/v8-coverage@0.2.3':
|
||||||
resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
|
resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
|
||||||
|
|
||||||
|
'@codecov/bundler-plugin-core@1.9.1':
|
||||||
|
resolution: {integrity: sha512-dt3ic7gMswz4p/qdkYPVJwXlLiLsz55rBBn2I7mr0HTG8pCoLRqnANJIwo5WrqGBZgPyVSMPBqBra6VxLWfDyA==}
|
||||||
|
engines: {node: '>=18.0.0'}
|
||||||
|
|
||||||
|
'@codecov/webpack-plugin@1.9.1':
|
||||||
|
resolution: {integrity: sha512-isyETXPJfhuG+UOteElc1X/IHpBG0dZNAa7loquA9N6lcu4szwNkwHvLdnMJ49kjVwcIpZBjUD2eZPhneBcDYQ==}
|
||||||
|
engines: {node: '>=18.0.0'}
|
||||||
|
peerDependencies:
|
||||||
|
webpack: 5.x
|
||||||
|
|
||||||
'@cspotcode/source-map-support@0.8.1':
|
'@cspotcode/source-map-support@0.8.1':
|
||||||
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
|
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
@@ -1712,6 +1753,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==}
|
resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
|
|
||||||
|
'@fastify/busboy@2.1.1':
|
||||||
|
resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==}
|
||||||
|
engines: {node: '>=14'}
|
||||||
|
|
||||||
'@humanfs/core@0.19.1':
|
'@humanfs/core@0.19.1':
|
||||||
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
|
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
|
||||||
engines: {node: '>=18.18.0'}
|
engines: {node: '>=18.18.0'}
|
||||||
@@ -2052,6 +2097,9 @@ packages:
|
|||||||
'@jridgewell/source-map@0.3.11':
|
'@jridgewell/source-map@0.3.11':
|
||||||
resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==}
|
resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==}
|
||||||
|
|
||||||
|
'@jridgewell/source-map@0.3.6':
|
||||||
|
resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==}
|
||||||
|
|
||||||
'@jridgewell/sourcemap-codec@1.5.5':
|
'@jridgewell/sourcemap-codec@1.5.5':
|
||||||
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
|
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
|
||||||
|
|
||||||
@@ -2389,6 +2437,54 @@ packages:
|
|||||||
resolution: {integrity: sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg==}
|
resolution: {integrity: sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg==}
|
||||||
engines: {node: ^18.17.0 || >=20.5.0}
|
engines: {node: ^18.17.0 || >=20.5.0}
|
||||||
|
|
||||||
|
'@octokit/auth-token@4.0.0':
|
||||||
|
resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==}
|
||||||
|
engines: {node: '>= 18'}
|
||||||
|
|
||||||
|
'@octokit/core@5.2.1':
|
||||||
|
resolution: {integrity: sha512-dKYCMuPO1bmrpuogcjQ8z7ICCH3FP6WmxpwC03yjzGfZhj9fTJg6+bS1+UAplekbN2C+M61UNllGOOoAfGCrdQ==}
|
||||||
|
engines: {node: '>= 18'}
|
||||||
|
|
||||||
|
'@octokit/endpoint@9.0.6':
|
||||||
|
resolution: {integrity: sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==}
|
||||||
|
engines: {node: '>= 18'}
|
||||||
|
|
||||||
|
'@octokit/graphql@7.1.1':
|
||||||
|
resolution: {integrity: sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==}
|
||||||
|
engines: {node: '>= 18'}
|
||||||
|
|
||||||
|
'@octokit/openapi-types@20.0.0':
|
||||||
|
resolution: {integrity: sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==}
|
||||||
|
|
||||||
|
'@octokit/openapi-types@24.2.0':
|
||||||
|
resolution: {integrity: sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==}
|
||||||
|
|
||||||
|
'@octokit/plugin-paginate-rest@9.2.2':
|
||||||
|
resolution: {integrity: sha512-u3KYkGF7GcZnSD/3UP0S7K5XUFT2FkOQdcfXZGZQPGv3lm4F2Xbf71lvjldr8c1H3nNbF+33cLEkWYbokGWqiQ==}
|
||||||
|
engines: {node: '>= 18'}
|
||||||
|
peerDependencies:
|
||||||
|
'@octokit/core': '5'
|
||||||
|
|
||||||
|
'@octokit/plugin-rest-endpoint-methods@10.4.1':
|
||||||
|
resolution: {integrity: sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==}
|
||||||
|
engines: {node: '>= 18'}
|
||||||
|
peerDependencies:
|
||||||
|
'@octokit/core': '5'
|
||||||
|
|
||||||
|
'@octokit/request-error@5.1.1':
|
||||||
|
resolution: {integrity: sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==}
|
||||||
|
engines: {node: '>= 18'}
|
||||||
|
|
||||||
|
'@octokit/request@8.4.1':
|
||||||
|
resolution: {integrity: sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==}
|
||||||
|
engines: {node: '>= 18'}
|
||||||
|
|
||||||
|
'@octokit/types@12.6.0':
|
||||||
|
resolution: {integrity: sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==}
|
||||||
|
|
||||||
|
'@octokit/types@13.10.0':
|
||||||
|
resolution: {integrity: sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==}
|
||||||
|
|
||||||
'@oxc-project/runtime@0.81.0':
|
'@oxc-project/runtime@0.81.0':
|
||||||
resolution: {integrity: sha512-zm/LDVOq9FEmHiuM8zO4DWirv0VP2Tv2VsgaiHby9nvpq+FVrcqNYgv+TysLKOITQXWZj/roluTxFvpkHP0Iuw==}
|
resolution: {integrity: sha512-zm/LDVOq9FEmHiuM8zO4DWirv0VP2Tv2VsgaiHby9nvpq+FVrcqNYgv+TysLKOITQXWZj/roluTxFvpkHP0Iuw==}
|
||||||
engines: {node: '>=6.9.0'}
|
engines: {node: '>=6.9.0'}
|
||||||
@@ -3411,6 +3507,9 @@ packages:
|
|||||||
resolution: {integrity: sha512-NaWu+f4YrJxEttJSm16AzMIFtVldCvaJ68b1L098KpqXmxt9xOLtKoLkKxb8ekhOrLqEJAbvT6n6SEvB/sac7A==}
|
resolution: {integrity: sha512-NaWu+f4YrJxEttJSm16AzMIFtVldCvaJ68b1L098KpqXmxt9xOLtKoLkKxb8ekhOrLqEJAbvT6n6SEvB/sac7A==}
|
||||||
engines: {node: '>=14.0.0'}
|
engines: {node: '>=14.0.0'}
|
||||||
|
|
||||||
|
before-after-hook@2.2.3:
|
||||||
|
resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==}
|
||||||
|
|
||||||
big.js@5.2.2:
|
big.js@5.2.2:
|
||||||
resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
|
resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
|
||||||
|
|
||||||
@@ -3815,6 +3914,9 @@ packages:
|
|||||||
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
|
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
|
||||||
engines: {node: '>= 0.8'}
|
engines: {node: '>= 0.8'}
|
||||||
|
|
||||||
|
deprecation@2.3.1:
|
||||||
|
resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==}
|
||||||
|
|
||||||
destroy@1.2.0:
|
destroy@1.2.0:
|
||||||
resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
|
resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
|
||||||
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
|
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
|
||||||
@@ -6384,6 +6486,10 @@ packages:
|
|||||||
tunnel-agent@0.6.0:
|
tunnel-agent@0.6.0:
|
||||||
resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
|
resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
|
||||||
|
|
||||||
|
tunnel@0.0.6:
|
||||||
|
resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==}
|
||||||
|
engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'}
|
||||||
|
|
||||||
type-check@0.4.0:
|
type-check@0.4.0:
|
||||||
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
|
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
|
||||||
engines: {node: '>= 0.8.0'}
|
engines: {node: '>= 0.8.0'}
|
||||||
@@ -6419,6 +6525,10 @@ packages:
|
|||||||
undici-types@7.10.0:
|
undici-types@7.10.0:
|
||||||
resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==}
|
resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==}
|
||||||
|
|
||||||
|
undici@5.29.0:
|
||||||
|
resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==}
|
||||||
|
engines: {node: '>=14.0'}
|
||||||
|
|
||||||
unicode-canonical-property-names-ecmascript@2.0.1:
|
unicode-canonical-property-names-ecmascript@2.0.1:
|
||||||
resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==}
|
resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==}
|
||||||
engines: {node: '>=4'}
|
engines: {node: '>=4'}
|
||||||
@@ -6443,6 +6553,9 @@ packages:
|
|||||||
resolution: {integrity: sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==}
|
resolution: {integrity: sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==}
|
||||||
engines: {node: ^18.17.0 || >=20.5.0}
|
engines: {node: ^18.17.0 || >=20.5.0}
|
||||||
|
|
||||||
|
universal-user-agent@6.0.1:
|
||||||
|
resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==}
|
||||||
|
|
||||||
universalify@0.2.0:
|
universalify@0.2.0:
|
||||||
resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==}
|
resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==}
|
||||||
engines: {node: '>= 4.0.0'}
|
engines: {node: '>= 4.0.0'}
|
||||||
@@ -6451,6 +6564,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
|
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
|
||||||
engines: {node: '>= 0.8'}
|
engines: {node: '>= 0.8'}
|
||||||
|
|
||||||
|
unplugin@1.16.1:
|
||||||
|
resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==}
|
||||||
|
engines: {node: '>=14.0.0'}
|
||||||
|
|
||||||
unrs-resolver@1.11.1:
|
unrs-resolver@1.11.1:
|
||||||
resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==}
|
resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==}
|
||||||
|
|
||||||
@@ -6651,6 +6768,9 @@ packages:
|
|||||||
html-webpack-plugin:
|
html-webpack-plugin:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
webpack-virtual-modules@0.6.2:
|
||||||
|
resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
|
||||||
|
|
||||||
webpack@5.101.3:
|
webpack@5.101.3:
|
||||||
resolution: {integrity: sha512-7b0dTKR3Ed//AD/6kkx/o7duS8H3f1a4w3BYpIriX4BzIhjkn4teo05cptsxvLesHFKK5KObnadmCHBwGc+51A==}
|
resolution: {integrity: sha512-7b0dTKR3Ed//AD/6kkx/o7duS8H3f1a4w3BYpIriX4BzIhjkn4teo05cptsxvLesHFKK5KObnadmCHBwGc+51A==}
|
||||||
engines: {node: '>=10.13.0'}
|
engines: {node: '>=10.13.0'}
|
||||||
@@ -6829,6 +6949,32 @@ packages:
|
|||||||
|
|
||||||
snapshots:
|
snapshots:
|
||||||
|
|
||||||
|
'@actions/core@1.11.1':
|
||||||
|
dependencies:
|
||||||
|
'@actions/exec': 1.1.1
|
||||||
|
'@actions/http-client': 2.2.3
|
||||||
|
|
||||||
|
'@actions/exec@1.1.1':
|
||||||
|
dependencies:
|
||||||
|
'@actions/io': 1.1.3
|
||||||
|
|
||||||
|
'@actions/github@6.0.1':
|
||||||
|
dependencies:
|
||||||
|
'@actions/http-client': 2.2.3
|
||||||
|
'@octokit/core': 5.2.1
|
||||||
|
'@octokit/plugin-paginate-rest': 9.2.2(@octokit/core@5.2.1)
|
||||||
|
'@octokit/plugin-rest-endpoint-methods': 10.4.1(@octokit/core@5.2.1)
|
||||||
|
'@octokit/request': 8.4.1
|
||||||
|
'@octokit/request-error': 5.1.1
|
||||||
|
undici: 5.29.0
|
||||||
|
|
||||||
|
'@actions/http-client@2.2.3':
|
||||||
|
dependencies:
|
||||||
|
tunnel: 0.0.6
|
||||||
|
undici: 5.29.0
|
||||||
|
|
||||||
|
'@actions/io@1.1.3': {}
|
||||||
|
|
||||||
'@algolia/abtesting@1.1.0':
|
'@algolia/abtesting@1.1.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@algolia/client-common': 5.35.0
|
'@algolia/client-common': 5.35.0
|
||||||
@@ -6930,6 +7076,60 @@ snapshots:
|
|||||||
- chokidar
|
- chokidar
|
||||||
- typescript
|
- typescript
|
||||||
|
|
||||||
|
'@angular-builders/custom-webpack@20.0.0(@angular/compiler-cli@20.2.4(@angular/compiler@20.2.4)(typescript@5.8.3))(@angular/compiler@20.2.4)(@angular/core@20.2.4(@angular/compiler@20.2.4)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/localize@20.2.4(@angular/compiler-cli@20.2.4(@angular/compiler@20.2.4)(typescript@5.8.3))(@angular/compiler@20.2.4))(@angular/platform-browser@20.2.4(@angular/common@20.2.4(@angular/core@20.2.4(@angular/compiler@20.2.4)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@20.2.4(@angular/compiler@20.2.4)(rxjs@7.8.2)(zone.js@0.15.1)))(@types/node@24.3.0)(chokidar@4.0.3)(jest-environment-jsdom@30.1.2(canvas@3.0.0))(jest@30.1.3(@types/node@24.3.0)(ts-node@10.9.2(@types/node@24.3.0)(typescript@5.8.3)))(jiti@1.21.7)(less@4.3.0)(postcss@8.5.3)(terser@5.39.1)(tslib@2.8.1)(typescript@5.8.3)(vite@7.1.2(@types/node@24.3.0)(jiti@1.21.7)(less@4.3.0)(sass@1.90.0)(terser@5.39.1)(yaml@2.7.0))(yaml@2.7.0)':
|
||||||
|
dependencies:
|
||||||
|
'@angular-builders/common': 4.0.0(@types/node@24.3.0)(chokidar@4.0.3)(typescript@5.8.3)
|
||||||
|
'@angular-devkit/architect': 0.2000.4(chokidar@4.0.3)
|
||||||
|
'@angular-devkit/build-angular': 20.0.4(@angular/compiler-cli@20.2.4(@angular/compiler@20.2.4)(typescript@5.8.3))(@angular/compiler@20.2.4)(@angular/core@20.2.4(@angular/compiler@20.2.4)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/localize@20.2.4(@angular/compiler-cli@20.2.4(@angular/compiler@20.2.4)(typescript@5.8.3))(@angular/compiler@20.2.4))(@angular/platform-browser@20.2.4(@angular/common@20.2.4(@angular/core@20.2.4(@angular/compiler@20.2.4)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@20.2.4(@angular/compiler@20.2.4)(rxjs@7.8.2)(zone.js@0.15.1)))(@types/node@24.3.0)(chokidar@4.0.3)(jest-environment-jsdom@30.1.2(canvas@3.0.0))(jest@30.1.3(@types/node@24.3.0)(ts-node@10.9.2(@types/node@24.3.0)(typescript@5.8.3)))(jiti@1.21.7)(typescript@5.8.3)(vite@7.1.2(@types/node@24.3.0)(jiti@1.21.7)(less@4.3.0)(sass@1.90.0)(terser@5.39.1)(yaml@2.7.0))(yaml@2.7.0)
|
||||||
|
'@angular-devkit/core': 20.2.2(chokidar@4.0.3)
|
||||||
|
'@angular/build': 20.2.2(@angular/compiler-cli@20.2.4(@angular/compiler@20.2.4)(typescript@5.8.3))(@angular/compiler@20.2.4)(@angular/core@20.2.4(@angular/compiler@20.2.4)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/localize@20.2.4(@angular/compiler-cli@20.2.4(@angular/compiler@20.2.4)(typescript@5.8.3))(@angular/compiler@20.2.4))(@angular/platform-browser@20.2.4(@angular/common@20.2.4(@angular/core@20.2.4(@angular/compiler@20.2.4)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@20.2.4(@angular/compiler@20.2.4)(rxjs@7.8.2)(zone.js@0.15.1)))(@types/node@24.3.0)(chokidar@4.0.3)(jiti@1.21.7)(less@4.3.0)(postcss@8.5.3)(terser@5.39.1)(tslib@2.8.1)(typescript@5.8.3)(yaml@2.7.0)
|
||||||
|
'@angular/compiler-cli': 20.2.4(@angular/compiler@20.2.4)(typescript@5.8.3)
|
||||||
|
lodash: 4.17.21
|
||||||
|
webpack-merge: 6.0.1
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- '@angular/compiler'
|
||||||
|
- '@angular/core'
|
||||||
|
- '@angular/localize'
|
||||||
|
- '@angular/platform-browser'
|
||||||
|
- '@angular/platform-server'
|
||||||
|
- '@angular/service-worker'
|
||||||
|
- '@angular/ssr'
|
||||||
|
- '@rspack/core'
|
||||||
|
- '@swc/core'
|
||||||
|
- '@swc/wasm'
|
||||||
|
- '@types/node'
|
||||||
|
- '@web/test-runner'
|
||||||
|
- browser-sync
|
||||||
|
- bufferutil
|
||||||
|
- chokidar
|
||||||
|
- debug
|
||||||
|
- html-webpack-plugin
|
||||||
|
- jest
|
||||||
|
- jest-environment-jsdom
|
||||||
|
- jiti
|
||||||
|
- karma
|
||||||
|
- less
|
||||||
|
- lightningcss
|
||||||
|
- ng-packagr
|
||||||
|
- node-sass
|
||||||
|
- postcss
|
||||||
|
- protractor
|
||||||
|
- sass-embedded
|
||||||
|
- stylus
|
||||||
|
- sugarss
|
||||||
|
- supports-color
|
||||||
|
- tailwindcss
|
||||||
|
- terser
|
||||||
|
- tslib
|
||||||
|
- tsx
|
||||||
|
- typescript
|
||||||
|
- uglify-js
|
||||||
|
- utf-8-validate
|
||||||
|
- vite
|
||||||
|
- vitest
|
||||||
|
- webpack-cli
|
||||||
|
- yaml
|
||||||
|
|
||||||
'@angular-builders/jest@20.0.0(56c75f145b0896aaaed75da1af9e9b5c)':
|
'@angular-builders/jest@20.0.0(56c75f145b0896aaaed75da1af9e9b5c)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@angular-builders/common': 4.0.0(@types/node@24.3.0)(chokidar@4.0.3)(typescript@5.8.3)
|
'@angular-builders/common': 4.0.0(@types/node@24.3.0)(chokidar@4.0.3)(typescript@5.8.3)
|
||||||
@@ -6976,7 +7176,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@ampproject/remapping': 2.3.0
|
'@ampproject/remapping': 2.3.0
|
||||||
'@angular-devkit/architect': 0.2000.4(chokidar@4.0.3)
|
'@angular-devkit/architect': 0.2000.4(chokidar@4.0.3)
|
||||||
'@angular-devkit/build-webpack': 0.2000.4(chokidar@4.0.3)(webpack-dev-server@5.2.1(webpack@5.99.8(esbuild@0.25.5)))(webpack@5.99.8(esbuild@0.25.5))
|
'@angular-devkit/build-webpack': 0.2000.4(chokidar@4.0.3)(webpack-dev-server@5.2.1(webpack@5.101.3))(webpack@5.99.8(esbuild@0.25.5))
|
||||||
'@angular-devkit/core': 20.0.4(chokidar@4.0.3)
|
'@angular-devkit/core': 20.0.4(chokidar@4.0.3)
|
||||||
'@angular/build': 20.0.4(@angular/compiler-cli@20.2.4(@angular/compiler@20.2.4)(typescript@5.8.3))(@angular/compiler@20.2.4)(@angular/core@20.2.4(@angular/compiler@20.2.4)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/localize@20.2.4(@angular/compiler-cli@20.2.4(@angular/compiler@20.2.4)(typescript@5.8.3))(@angular/compiler@20.2.4))(@angular/platform-browser@20.2.4(@angular/common@20.2.4(@angular/core@20.2.4(@angular/compiler@20.2.4)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@20.2.4(@angular/compiler@20.2.4)(rxjs@7.8.2)(zone.js@0.15.1)))(@types/node@24.3.0)(chokidar@4.0.3)(jiti@1.21.7)(less@4.3.0)(postcss@8.5.3)(terser@5.39.1)(tslib@2.8.1)(typescript@5.8.3)(yaml@2.7.0)
|
'@angular/build': 20.0.4(@angular/compiler-cli@20.2.4(@angular/compiler@20.2.4)(typescript@5.8.3))(@angular/compiler@20.2.4)(@angular/core@20.2.4(@angular/compiler@20.2.4)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/localize@20.2.4(@angular/compiler-cli@20.2.4(@angular/compiler@20.2.4)(typescript@5.8.3))(@angular/compiler@20.2.4))(@angular/platform-browser@20.2.4(@angular/common@20.2.4(@angular/core@20.2.4(@angular/compiler@20.2.4)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@20.2.4(@angular/compiler@20.2.4)(rxjs@7.8.2)(zone.js@0.15.1)))(@types/node@24.3.0)(chokidar@4.0.3)(jiti@1.21.7)(less@4.3.0)(postcss@8.5.3)(terser@5.39.1)(tslib@2.8.1)(typescript@5.8.3)(yaml@2.7.0)
|
||||||
'@angular/compiler-cli': 20.2.4(@angular/compiler@20.2.4)(typescript@5.8.3)
|
'@angular/compiler-cli': 20.2.4(@angular/compiler@20.2.4)(typescript@5.8.3)
|
||||||
@@ -7028,7 +7228,7 @@ snapshots:
|
|||||||
typescript: 5.8.3
|
typescript: 5.8.3
|
||||||
webpack: 5.99.8(esbuild@0.25.5)
|
webpack: 5.99.8(esbuild@0.25.5)
|
||||||
webpack-dev-middleware: 7.4.2(webpack@5.99.8(esbuild@0.25.5))
|
webpack-dev-middleware: 7.4.2(webpack@5.99.8(esbuild@0.25.5))
|
||||||
webpack-dev-server: 5.2.1(webpack@5.101.3)
|
webpack-dev-server: 5.2.1(webpack@5.99.8(esbuild@0.25.5))
|
||||||
webpack-merge: 6.0.1
|
webpack-merge: 6.0.1
|
||||||
webpack-subresource-integrity: 5.1.0(webpack@5.99.8(esbuild@0.25.5))
|
webpack-subresource-integrity: 5.1.0(webpack@5.99.8(esbuild@0.25.5))
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
@@ -7062,7 +7262,7 @@ snapshots:
|
|||||||
- webpack-cli
|
- webpack-cli
|
||||||
- yaml
|
- yaml
|
||||||
|
|
||||||
'@angular-devkit/build-webpack@0.2000.4(chokidar@4.0.3)(webpack-dev-server@5.2.1(webpack@5.99.8(esbuild@0.25.5)))(webpack@5.99.8(esbuild@0.25.5))':
|
'@angular-devkit/build-webpack@0.2000.4(chokidar@4.0.3)(webpack-dev-server@5.2.1(webpack@5.101.3))(webpack@5.99.8(esbuild@0.25.5))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@angular-devkit/architect': 0.2000.4(chokidar@4.0.3)
|
'@angular-devkit/architect': 0.2000.4(chokidar@4.0.3)
|
||||||
rxjs: 7.8.2
|
rxjs: 7.8.2
|
||||||
@@ -7392,13 +7592,15 @@ snapshots:
|
|||||||
js-tokens: 4.0.0
|
js-tokens: 4.0.0
|
||||||
picocolors: 1.1.1
|
picocolors: 1.1.1
|
||||||
|
|
||||||
|
'@babel/compat-data@7.27.7': {}
|
||||||
|
|
||||||
'@babel/compat-data@7.28.0': {}
|
'@babel/compat-data@7.28.0': {}
|
||||||
|
|
||||||
'@babel/core@7.27.1':
|
'@babel/core@7.27.1':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@ampproject/remapping': 2.3.0
|
'@ampproject/remapping': 2.3.0
|
||||||
'@babel/code-frame': 7.27.1
|
'@babel/code-frame': 7.27.1
|
||||||
'@babel/generator': 7.28.3
|
'@babel/generator': 7.27.1
|
||||||
'@babel/helper-compilation-targets': 7.27.2
|
'@babel/helper-compilation-targets': 7.27.2
|
||||||
'@babel/helper-module-transforms': 7.28.3(@babel/core@7.27.1)
|
'@babel/helper-module-transforms': 7.28.3(@babel/core@7.27.1)
|
||||||
'@babel/helpers': 7.28.3
|
'@babel/helpers': 7.28.3
|
||||||
@@ -7469,7 +7671,7 @@ snapshots:
|
|||||||
'@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.1)':
|
'@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.1)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.27.1
|
'@babel/core': 7.27.1
|
||||||
'@babel/helper-annotate-as-pure': 7.27.3
|
'@babel/helper-annotate-as-pure': 7.27.1
|
||||||
'@babel/helper-member-expression-to-functions': 7.27.1
|
'@babel/helper-member-expression-to-functions': 7.27.1
|
||||||
'@babel/helper-optimise-call-expression': 7.27.1
|
'@babel/helper-optimise-call-expression': 7.27.1
|
||||||
'@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.1)
|
'@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.1)
|
||||||
@@ -7482,7 +7684,7 @@ snapshots:
|
|||||||
'@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.27.1)':
|
'@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.27.1)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.27.1
|
'@babel/core': 7.27.1
|
||||||
'@babel/helper-annotate-as-pure': 7.27.3
|
'@babel/helper-annotate-as-pure': 7.27.1
|
||||||
regexpu-core: 6.2.0
|
regexpu-core: 6.2.0
|
||||||
semver: 6.3.1
|
semver: 6.3.1
|
||||||
|
|
||||||
@@ -7540,7 +7742,7 @@ snapshots:
|
|||||||
'@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.27.1)':
|
'@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.27.1)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.27.1
|
'@babel/core': 7.27.1
|
||||||
'@babel/helper-annotate-as-pure': 7.27.3
|
'@babel/helper-annotate-as-pure': 7.27.1
|
||||||
'@babel/helper-wrap-function': 7.27.1
|
'@babel/helper-wrap-function': 7.27.1
|
||||||
'@babel/traverse': 7.28.3
|
'@babel/traverse': 7.28.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
@@ -7976,7 +8178,7 @@ snapshots:
|
|||||||
'@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.27.1)':
|
'@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.27.1)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.27.1
|
'@babel/core': 7.27.1
|
||||||
'@babel/helper-annotate-as-pure': 7.27.3
|
'@babel/helper-annotate-as-pure': 7.27.1
|
||||||
'@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.1)
|
'@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.1)
|
||||||
'@babel/helper-plugin-utils': 7.27.1
|
'@babel/helper-plugin-utils': 7.27.1
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
@@ -8068,7 +8270,7 @@ snapshots:
|
|||||||
|
|
||||||
'@babel/preset-env@7.27.2(@babel/core@7.27.1)':
|
'@babel/preset-env@7.27.2(@babel/core@7.27.1)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/compat-data': 7.28.0
|
'@babel/compat-data': 7.27.7
|
||||||
'@babel/core': 7.27.1
|
'@babel/core': 7.27.1
|
||||||
'@babel/helper-compilation-targets': 7.27.2
|
'@babel/helper-compilation-targets': 7.27.2
|
||||||
'@babel/helper-plugin-utils': 7.27.1
|
'@babel/helper-plugin-utils': 7.27.1
|
||||||
@@ -8175,6 +8377,21 @@ snapshots:
|
|||||||
|
|
||||||
'@bcoe/v8-coverage@0.2.3': {}
|
'@bcoe/v8-coverage@0.2.3': {}
|
||||||
|
|
||||||
|
'@codecov/bundler-plugin-core@1.9.1':
|
||||||
|
dependencies:
|
||||||
|
'@actions/core': 1.11.1
|
||||||
|
'@actions/github': 6.0.1
|
||||||
|
chalk: 4.1.2
|
||||||
|
semver: 7.7.2
|
||||||
|
unplugin: 1.16.1
|
||||||
|
zod: 3.25.76
|
||||||
|
|
||||||
|
'@codecov/webpack-plugin@1.9.1(webpack@5.101.3)':
|
||||||
|
dependencies:
|
||||||
|
'@codecov/bundler-plugin-core': 1.9.1
|
||||||
|
unplugin: 1.16.1
|
||||||
|
webpack: 5.101.3
|
||||||
|
|
||||||
'@cspotcode/source-map-support@0.8.1':
|
'@cspotcode/source-map-support@0.8.1':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@jridgewell/trace-mapping': 0.3.9
|
'@jridgewell/trace-mapping': 0.3.9
|
||||||
@@ -8494,6 +8711,8 @@ snapshots:
|
|||||||
'@eslint/core': 0.15.2
|
'@eslint/core': 0.15.2
|
||||||
levn: 0.4.1
|
levn: 0.4.1
|
||||||
|
|
||||||
|
'@fastify/busboy@2.1.1': {}
|
||||||
|
|
||||||
'@humanfs/core@0.19.1': {}
|
'@humanfs/core@0.19.1': {}
|
||||||
|
|
||||||
'@humanfs/node@0.16.6':
|
'@humanfs/node@0.16.6':
|
||||||
@@ -8943,6 +9162,11 @@ snapshots:
|
|||||||
'@jridgewell/gen-mapping': 0.3.13
|
'@jridgewell/gen-mapping': 0.3.13
|
||||||
'@jridgewell/trace-mapping': 0.3.30
|
'@jridgewell/trace-mapping': 0.3.30
|
||||||
|
|
||||||
|
'@jridgewell/source-map@0.3.6':
|
||||||
|
dependencies:
|
||||||
|
'@jridgewell/gen-mapping': 0.3.13
|
||||||
|
'@jridgewell/trace-mapping': 0.3.30
|
||||||
|
|
||||||
'@jridgewell/sourcemap-codec@1.5.5': {}
|
'@jridgewell/sourcemap-codec@1.5.5': {}
|
||||||
|
|
||||||
'@jridgewell/trace-mapping@0.3.30':
|
'@jridgewell/trace-mapping@0.3.30':
|
||||||
@@ -9247,6 +9471,64 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
|
'@octokit/auth-token@4.0.0': {}
|
||||||
|
|
||||||
|
'@octokit/core@5.2.1':
|
||||||
|
dependencies:
|
||||||
|
'@octokit/auth-token': 4.0.0
|
||||||
|
'@octokit/graphql': 7.1.1
|
||||||
|
'@octokit/request': 8.4.1
|
||||||
|
'@octokit/request-error': 5.1.1
|
||||||
|
'@octokit/types': 13.10.0
|
||||||
|
before-after-hook: 2.2.3
|
||||||
|
universal-user-agent: 6.0.1
|
||||||
|
|
||||||
|
'@octokit/endpoint@9.0.6':
|
||||||
|
dependencies:
|
||||||
|
'@octokit/types': 13.10.0
|
||||||
|
universal-user-agent: 6.0.1
|
||||||
|
|
||||||
|
'@octokit/graphql@7.1.1':
|
||||||
|
dependencies:
|
||||||
|
'@octokit/request': 8.4.1
|
||||||
|
'@octokit/types': 13.10.0
|
||||||
|
universal-user-agent: 6.0.1
|
||||||
|
|
||||||
|
'@octokit/openapi-types@20.0.0': {}
|
||||||
|
|
||||||
|
'@octokit/openapi-types@24.2.0': {}
|
||||||
|
|
||||||
|
'@octokit/plugin-paginate-rest@9.2.2(@octokit/core@5.2.1)':
|
||||||
|
dependencies:
|
||||||
|
'@octokit/core': 5.2.1
|
||||||
|
'@octokit/types': 12.6.0
|
||||||
|
|
||||||
|
'@octokit/plugin-rest-endpoint-methods@10.4.1(@octokit/core@5.2.1)':
|
||||||
|
dependencies:
|
||||||
|
'@octokit/core': 5.2.1
|
||||||
|
'@octokit/types': 12.6.0
|
||||||
|
|
||||||
|
'@octokit/request-error@5.1.1':
|
||||||
|
dependencies:
|
||||||
|
'@octokit/types': 13.10.0
|
||||||
|
deprecation: 2.3.1
|
||||||
|
once: 1.4.0
|
||||||
|
|
||||||
|
'@octokit/request@8.4.1':
|
||||||
|
dependencies:
|
||||||
|
'@octokit/endpoint': 9.0.6
|
||||||
|
'@octokit/request-error': 5.1.1
|
||||||
|
'@octokit/types': 13.10.0
|
||||||
|
universal-user-agent: 6.0.1
|
||||||
|
|
||||||
|
'@octokit/types@12.6.0':
|
||||||
|
dependencies:
|
||||||
|
'@octokit/openapi-types': 20.0.0
|
||||||
|
|
||||||
|
'@octokit/types@13.10.0':
|
||||||
|
dependencies:
|
||||||
|
'@octokit/openapi-types': 24.2.0
|
||||||
|
|
||||||
'@oxc-project/runtime@0.81.0': {}
|
'@oxc-project/runtime@0.81.0': {}
|
||||||
|
|
||||||
'@oxc-project/types@0.81.0': {}
|
'@oxc-project/types@0.81.0': {}
|
||||||
@@ -10162,7 +10444,7 @@ snapshots:
|
|||||||
|
|
||||||
babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.27.1):
|
babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.27.1):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/compat-data': 7.28.0
|
'@babel/compat-data': 7.27.7
|
||||||
'@babel/core': 7.27.1
|
'@babel/core': 7.27.1
|
||||||
'@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.1)
|
'@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.1)
|
||||||
semver: 6.3.1
|
semver: 6.3.1
|
||||||
@@ -10224,7 +10506,7 @@ snapshots:
|
|||||||
domhandler: 5.0.3
|
domhandler: 5.0.3
|
||||||
htmlparser2: 10.0.0
|
htmlparser2: 10.0.0
|
||||||
picocolors: 1.1.1
|
picocolors: 1.1.1
|
||||||
postcss: 8.5.6
|
postcss: 8.5.3
|
||||||
postcss-media-query-parser: 0.2.3
|
postcss-media-query-parser: 0.2.3
|
||||||
|
|
||||||
beasties@0.3.5:
|
beasties@0.3.5:
|
||||||
@@ -10238,6 +10520,8 @@ snapshots:
|
|||||||
postcss: 8.5.6
|
postcss: 8.5.6
|
||||||
postcss-media-query-parser: 0.2.3
|
postcss-media-query-parser: 0.2.3
|
||||||
|
|
||||||
|
before-after-hook@2.2.3: {}
|
||||||
|
|
||||||
big.js@5.2.2: {}
|
big.js@5.2.2: {}
|
||||||
|
|
||||||
binary-extensions@2.3.0: {}
|
binary-extensions@2.3.0: {}
|
||||||
@@ -10549,12 +10833,12 @@ snapshots:
|
|||||||
|
|
||||||
css-loader@7.1.2(webpack@5.99.8(esbuild@0.25.5)):
|
css-loader@7.1.2(webpack@5.99.8(esbuild@0.25.5)):
|
||||||
dependencies:
|
dependencies:
|
||||||
icss-utils: 5.1.0(postcss@8.5.6)
|
icss-utils: 5.1.0(postcss@8.5.3)
|
||||||
postcss: 8.5.6
|
postcss: 8.5.3
|
||||||
postcss-modules-extract-imports: 3.1.0(postcss@8.5.6)
|
postcss-modules-extract-imports: 3.1.0(postcss@8.5.3)
|
||||||
postcss-modules-local-by-default: 4.2.0(postcss@8.5.6)
|
postcss-modules-local-by-default: 4.2.0(postcss@8.5.3)
|
||||||
postcss-modules-scope: 3.2.1(postcss@8.5.6)
|
postcss-modules-scope: 3.2.1(postcss@8.5.3)
|
||||||
postcss-modules-values: 4.0.0(postcss@8.5.6)
|
postcss-modules-values: 4.0.0(postcss@8.5.3)
|
||||||
postcss-value-parser: 4.2.0
|
postcss-value-parser: 4.2.0
|
||||||
semver: 7.7.2
|
semver: 7.7.2
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
@@ -10650,6 +10934,8 @@ snapshots:
|
|||||||
|
|
||||||
depd@2.0.0: {}
|
depd@2.0.0: {}
|
||||||
|
|
||||||
|
deprecation@2.3.1: {}
|
||||||
|
|
||||||
destroy@1.2.0: {}
|
destroy@1.2.0: {}
|
||||||
|
|
||||||
detect-libc@1.0.3:
|
detect-libc@1.0.3:
|
||||||
@@ -11102,6 +11388,10 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
bser: 2.1.1
|
bser: 2.1.1
|
||||||
|
|
||||||
|
fdir@6.5.0(picomatch@4.0.2):
|
||||||
|
optionalDependencies:
|
||||||
|
picomatch: 4.0.2
|
||||||
|
|
||||||
fdir@6.5.0(picomatch@4.0.3):
|
fdir@6.5.0(picomatch@4.0.3):
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
picomatch: 4.0.3
|
picomatch: 4.0.3
|
||||||
@@ -11410,9 +11700,9 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
safer-buffer: 2.1.2
|
safer-buffer: 2.1.2
|
||||||
|
|
||||||
icss-utils@5.1.0(postcss@8.5.6):
|
icss-utils@5.1.0(postcss@8.5.3):
|
||||||
dependencies:
|
dependencies:
|
||||||
postcss: 8.5.6
|
postcss: 8.5.3
|
||||||
|
|
||||||
ieee754@1.2.1:
|
ieee754@1.2.1:
|
||||||
optional: true
|
optional: true
|
||||||
@@ -12896,26 +13186,26 @@ snapshots:
|
|||||||
|
|
||||||
postcss-media-query-parser@0.2.3: {}
|
postcss-media-query-parser@0.2.3: {}
|
||||||
|
|
||||||
postcss-modules-extract-imports@3.1.0(postcss@8.5.6):
|
postcss-modules-extract-imports@3.1.0(postcss@8.5.3):
|
||||||
dependencies:
|
dependencies:
|
||||||
postcss: 8.5.6
|
postcss: 8.5.3
|
||||||
|
|
||||||
postcss-modules-local-by-default@4.2.0(postcss@8.5.6):
|
postcss-modules-local-by-default@4.2.0(postcss@8.5.3):
|
||||||
dependencies:
|
dependencies:
|
||||||
icss-utils: 5.1.0(postcss@8.5.6)
|
icss-utils: 5.1.0(postcss@8.5.3)
|
||||||
postcss: 8.5.6
|
postcss: 8.5.3
|
||||||
postcss-selector-parser: 7.1.0
|
postcss-selector-parser: 7.1.0
|
||||||
postcss-value-parser: 4.2.0
|
postcss-value-parser: 4.2.0
|
||||||
|
|
||||||
postcss-modules-scope@3.2.1(postcss@8.5.6):
|
postcss-modules-scope@3.2.1(postcss@8.5.3):
|
||||||
dependencies:
|
dependencies:
|
||||||
postcss: 8.5.6
|
postcss: 8.5.3
|
||||||
postcss-selector-parser: 7.1.0
|
postcss-selector-parser: 7.1.0
|
||||||
|
|
||||||
postcss-modules-values@4.0.0(postcss@8.5.6):
|
postcss-modules-values@4.0.0(postcss@8.5.3):
|
||||||
dependencies:
|
dependencies:
|
||||||
icss-utils: 5.1.0(postcss@8.5.6)
|
icss-utils: 5.1.0(postcss@8.5.3)
|
||||||
postcss: 8.5.6
|
postcss: 8.5.3
|
||||||
|
|
||||||
postcss-selector-parser@7.1.0:
|
postcss-selector-parser@7.1.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -13110,7 +13400,7 @@ snapshots:
|
|||||||
adjust-sourcemap-loader: 4.0.0
|
adjust-sourcemap-loader: 4.0.0
|
||||||
convert-source-map: 1.9.0
|
convert-source-map: 1.9.0
|
||||||
loader-utils: 2.0.4
|
loader-utils: 2.0.4
|
||||||
postcss: 8.5.6
|
postcss: 8.5.3
|
||||||
source-map: 0.6.1
|
source-map: 0.6.1
|
||||||
|
|
||||||
resolve@1.22.10:
|
resolve@1.22.10:
|
||||||
@@ -13665,7 +13955,7 @@ snapshots:
|
|||||||
|
|
||||||
terser@5.39.1:
|
terser@5.39.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@jridgewell/source-map': 0.3.11
|
'@jridgewell/source-map': 0.3.6
|
||||||
acorn: 8.15.0
|
acorn: 8.15.0
|
||||||
commander: 2.20.3
|
commander: 2.20.3
|
||||||
source-map-support: 0.5.21
|
source-map-support: 0.5.21
|
||||||
@@ -13691,8 +13981,8 @@ snapshots:
|
|||||||
|
|
||||||
tinyglobby@0.2.13:
|
tinyglobby@0.2.13:
|
||||||
dependencies:
|
dependencies:
|
||||||
fdir: 6.5.0(picomatch@4.0.3)
|
fdir: 6.5.0(picomatch@4.0.2)
|
||||||
picomatch: 4.0.3
|
picomatch: 4.0.2
|
||||||
|
|
||||||
tinyglobby@0.2.14:
|
tinyglobby@0.2.14:
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -13823,6 +14113,8 @@ snapshots:
|
|||||||
safe-buffer: 5.2.1
|
safe-buffer: 5.2.1
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
tunnel@0.0.6: {}
|
||||||
|
|
||||||
type-check@0.4.0:
|
type-check@0.4.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
prelude-ls: 1.2.1
|
prelude-ls: 1.2.1
|
||||||
@@ -13850,6 +14142,10 @@ snapshots:
|
|||||||
|
|
||||||
undici-types@7.10.0: {}
|
undici-types@7.10.0: {}
|
||||||
|
|
||||||
|
undici@5.29.0:
|
||||||
|
dependencies:
|
||||||
|
'@fastify/busboy': 2.1.1
|
||||||
|
|
||||||
unicode-canonical-property-names-ecmascript@2.0.1: {}
|
unicode-canonical-property-names-ecmascript@2.0.1: {}
|
||||||
|
|
||||||
unicode-match-property-ecmascript@2.0.0:
|
unicode-match-property-ecmascript@2.0.0:
|
||||||
@@ -13869,10 +14165,17 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
imurmurhash: 0.1.4
|
imurmurhash: 0.1.4
|
||||||
|
|
||||||
|
universal-user-agent@6.0.1: {}
|
||||||
|
|
||||||
universalify@0.2.0: {}
|
universalify@0.2.0: {}
|
||||||
|
|
||||||
unpipe@1.0.0: {}
|
unpipe@1.0.0: {}
|
||||||
|
|
||||||
|
unplugin@1.16.1:
|
||||||
|
dependencies:
|
||||||
|
acorn: 8.15.0
|
||||||
|
webpack-virtual-modules: 0.6.2
|
||||||
|
|
||||||
unrs-resolver@1.11.1:
|
unrs-resolver@1.11.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
napi-postinstall: 0.3.2
|
napi-postinstall: 0.3.2
|
||||||
@@ -13943,12 +14246,12 @@ snapshots:
|
|||||||
|
|
||||||
vite@6.3.5(@types/node@24.3.0)(jiti@1.21.7)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)(yaml@2.7.0):
|
vite@6.3.5(@types/node@24.3.0)(jiti@1.21.7)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)(yaml@2.7.0):
|
||||||
dependencies:
|
dependencies:
|
||||||
esbuild: 0.25.9
|
esbuild: 0.25.5
|
||||||
fdir: 6.5.0(picomatch@4.0.3)
|
fdir: 6.5.0(picomatch@4.0.2)
|
||||||
picomatch: 4.0.3
|
picomatch: 4.0.2
|
||||||
postcss: 8.5.6
|
postcss: 8.5.3
|
||||||
rollup: 4.50.0
|
rollup: 4.40.2
|
||||||
tinyglobby: 0.2.14
|
tinyglobby: 0.2.13
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@types/node': 24.3.0
|
'@types/node': 24.3.0
|
||||||
fsevents: 2.3.3
|
fsevents: 2.3.3
|
||||||
@@ -14066,6 +14369,44 @@ snapshots:
|
|||||||
- supports-color
|
- supports-color
|
||||||
- utf-8-validate
|
- utf-8-validate
|
||||||
|
|
||||||
|
webpack-dev-server@5.2.1(webpack@5.99.8(esbuild@0.25.5)):
|
||||||
|
dependencies:
|
||||||
|
'@types/bonjour': 3.5.13
|
||||||
|
'@types/connect-history-api-fallback': 1.5.4
|
||||||
|
'@types/express': 4.17.23
|
||||||
|
'@types/express-serve-static-core': 4.19.6
|
||||||
|
'@types/serve-index': 1.9.4
|
||||||
|
'@types/serve-static': 1.15.8
|
||||||
|
'@types/sockjs': 0.3.36
|
||||||
|
'@types/ws': 8.18.1
|
||||||
|
ansi-html-community: 0.0.8
|
||||||
|
bonjour-service: 1.3.0
|
||||||
|
chokidar: 3.6.0
|
||||||
|
colorette: 2.0.20
|
||||||
|
compression: 1.8.0
|
||||||
|
connect-history-api-fallback: 2.0.0
|
||||||
|
express: 4.21.2
|
||||||
|
graceful-fs: 4.2.11
|
||||||
|
http-proxy-middleware: 2.0.9(@types/express@4.17.23)
|
||||||
|
ipaddr.js: 2.2.0
|
||||||
|
launch-editor: 2.10.0
|
||||||
|
open: 10.1.2
|
||||||
|
p-retry: 6.2.1
|
||||||
|
schema-utils: 4.3.2
|
||||||
|
selfsigned: 2.4.1
|
||||||
|
serve-index: 1.9.1
|
||||||
|
sockjs: 0.3.24
|
||||||
|
spdy: 4.0.2
|
||||||
|
webpack-dev-middleware: 7.4.2(webpack@5.99.8(esbuild@0.25.5))
|
||||||
|
ws: 8.18.3
|
||||||
|
optionalDependencies:
|
||||||
|
webpack: 5.99.8(esbuild@0.25.5)
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- bufferutil
|
||||||
|
- debug
|
||||||
|
- supports-color
|
||||||
|
- utf-8-validate
|
||||||
|
|
||||||
webpack-merge@6.0.1:
|
webpack-merge@6.0.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
clone-deep: 4.0.1
|
clone-deep: 4.0.1
|
||||||
@@ -14079,6 +14420,8 @@ snapshots:
|
|||||||
typed-assert: 1.0.9
|
typed-assert: 1.0.9
|
||||||
webpack: 5.99.8(esbuild@0.25.5)
|
webpack: 5.99.8(esbuild@0.25.5)
|
||||||
|
|
||||||
|
webpack-virtual-modules@0.6.2: {}
|
||||||
|
|
||||||
webpack@5.101.3:
|
webpack@5.101.3:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/eslint-scope': 3.7.7
|
'@types/eslint-scope': 3.7.7
|
||||||
|
@@ -177,16 +177,10 @@ export class CustomFieldEditDialogComponent
|
|||||||
}
|
}
|
||||||
|
|
||||||
public removeSelectOption(index: number) {
|
public removeSelectOption(index: number) {
|
||||||
const globalIndex =
|
this.selectOptions.removeAt(index)
|
||||||
index + (this.selectOptionsPage - 1) * SELECT_OPTION_PAGE_SIZE
|
this._allSelectOptions.splice(
|
||||||
this._allSelectOptions.splice(globalIndex, 1)
|
index + (this.selectOptionsPage - 1) * SELECT_OPTION_PAGE_SIZE,
|
||||||
|
1
|
||||||
const totalPages = Math.max(
|
|
||||||
1,
|
|
||||||
Math.ceil(this._allSelectOptions.length / SELECT_OPTION_PAGE_SIZE)
|
|
||||||
)
|
)
|
||||||
const targetPage = Math.min(this.selectOptionsPage, totalPages)
|
|
||||||
|
|
||||||
this.selectOptionsPage = targetPage
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user