ci: add long-built

This commit is contained in:
MedzikUser 2022-05-23 21:15:15 +02:00
parent e34e1481da
commit ee4030aa98
No known key found for this signature in database
GPG Key ID: A5FAC1E185C112DB
14 changed files with 1659 additions and 1 deletions

328
.github/workflows/long-built.yml vendored Normal file
View File

@ -0,0 +1,328 @@
name: Long Built
on:
push:
branches:
- main
paths:
- 'long-built/**'
workflow_dispatch:
inputs:
packages:
description: "Packege to rebuild"
required: true
jobs:
build-container:
runs-on: ubuntu-latest
container: ghcr.io/archlinux-pkg/packages:latest
steps:
- name: work around permission issue
run: git config --global --add safe.directory /__w/packages/packages
- name: Checkout latest commit
uses: actions/checkout@v3
with:
fetch-depth: 1000
- name: Install dependencies
run: pacman -Syu --needed --noconfirm docker
- name: Login to GitHub Container Registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Prepare Build
run: ./scripts/long-built/prepare.sh
env:
github_event: ${{ github.event_name }}
github_inputs_packages: ${{ github.event.inputs.packages }}
- name: Build container
id: build
run: ./scripts/long-built/build-container.sh
env:
REGISTRY: ghcr.io/${{ github.repository_owner }}
GH_REF: ${{ github.ref }}
- name: Push image
run: docker push "${{ steps.build.outputs.version-tag }}"
outputs:
chromium-version: "${{ steps.build.outputs.chromium-version }}"
image-tag: "${{ steps.build.outputs.version-tag }}"
stage-1:
strategy:
fail-fast: false
matrix:
arch: [x86-64, x86-64-v3]
runs-on: ubuntu-latest
needs: build-container
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Stage
run: npm run setup --prefix ./scripts/long-built
- name: Run Stage
id: stage
uses: ./scripts/long-built
with:
package: packages-${{ matrix.arch }}
use-registry: true
registry-token: "${{ secrets.GITHUB_TOKEN }}"
image-tag: "${{ join(needs.*.outputs.image-tag) }}"
arch: ${{ matrix.arch }}
outputs:
finished: "${{ steps.stage.outputs.finished }}"
package: "${{ steps.stage.outputs.package }}"
image-tag: "${{ steps.stage.outputs.image-tag }}"
stage-2:
strategy:
fail-fast: false
matrix:
arch: [x86-64, x86-64-v3]
runs-on: ubuntu-latest
needs: stage-1
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Stage
run: npm run setup --prefix ./scripts/long-built
- name: Run Stage
id: stage
uses: ./scripts/long-built
with:
finished: "${{ join(needs.*.outputs.finished) }}"
package: packages-${{ matrix.arch }}
progress-name: stage-1
use-registry: true
registry-token: "${{ secrets.GITHUB_TOKEN }}"
image-tag: "${{ join(needs.*.outputs.image-tag) }}"
arch: ${{ matrix.arch }}
outputs:
finished: "${{ steps.stage.outputs.finished }}"
package: "${{ steps.stage.outputs.package }}"
image-tag: "${{ steps.stage.outputs.image-tag }}"
stage-3:
strategy:
fail-fast: false
matrix:
arch: [x86-64, x86-64-v3]
runs-on: ubuntu-latest
needs: stage-2
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Stage
run: npm run setup --prefix ./scripts/long-built
- name: Run Stage
id: stage
uses: ./scripts/long-built
with:
finished: "${{ join(needs.*.outputs.finished) }}"
package: packages-${{ matrix.arch }}
progress-name: stage-2
use-registry: true
registry-token: "${{ secrets.GITHUB_TOKEN }}"
image-tag: "${{ join(needs.*.outputs.image-tag) }}"
arch: ${{ matrix.arch }}
outputs:
finished: "${{ steps.stage.outputs.finished }}"
package: "${{ steps.stage.outputs.package }}"
image-tag: "${{ steps.stage.outputs.image-tag }}"
stage-4:
strategy:
fail-fast: false
matrix:
arch: [x86-64, x86-64-v3]
runs-on: ubuntu-latest
needs: stage-3
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Stage
run: npm run setup --prefix ./scripts/long-built
- name: Run Stage
id: stage
uses: ./scripts/long-built
with:
finished: "${{ join(needs.*.outputs.finished) }}"
package: packages-${{ matrix.arch }}
progress-name: stage-3
use-registry: true
registry-token: "${{ secrets.GITHUB_TOKEN }}"
image-tag: "${{ join(needs.*.outputs.image-tag) }}"
arch: ${{ matrix.arch }}
outputs:
finished: "${{ steps.stage.outputs.finished }}"
package: "${{ steps.stage.outputs.package }}"
image-tag: "${{ steps.stage.outputs.image-tag }}"
stage-5:
strategy:
fail-fast: false
matrix:
arch: [x86-64, x86-64-v3]
runs-on: ubuntu-latest
needs: stage-4
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Stage
run: npm run setup --prefix ./scripts/long-built
- name: Run Stage
id: stage
uses: ./scripts/long-built
with:
finished: "${{ join(needs.*.outputs.finished) }}"
package: packages-${{ matrix.arch }}
progress-name: stage-4
use-registry: true
registry-token: "${{ secrets.GITHUB_TOKEN }}"
image-tag: "${{ join(needs.*.outputs.image-tag) }}"
arch: ${{ matrix.arch }}
outputs:
finished: "${{ steps.stage.outputs.finished }}"
package: "${{ steps.stage.outputs.package }}"
image-tag: "${{ steps.stage.outputs.image-tag }}"
stage-6:
strategy:
fail-fast: false
matrix:
arch: [x86-64, x86-64-v3]
runs-on: ubuntu-latest
needs: stage-5
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Stage
run: npm run setup --prefix ./scripts/long-built
- name: Run Stage
id: stage
uses: ./scripts/long-built
with:
finished: "${{ join(needs.*.outputs.finished) }}"
package: packages-${{ matrix.arch }}
progress-name: stage-5
use-registry: true
registry-token: "${{ secrets.GITHUB_TOKEN }}"
image-tag: "${{ join(needs.*.outputs.image-tag) }}"
arch: ${{ matrix.arch }}
outputs:
finished: "${{ steps.stage.outputs.finished }}"
package: "${{ steps.stage.outputs.package }}"
image-tag: "${{ steps.stage.outputs.image-tag }}"
stage-7:
strategy:
fail-fast: false
matrix:
arch: [x86-64, x86-64-v3]
runs-on: ubuntu-latest
needs: stage-6
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Stage
run: npm run setup --prefix ./scripts/long-built
- name: Run Stage
id: stage
uses: ./scripts/long-built
with:
finished: "${{ join(needs.*.outputs.finished) }}"
package: packages-${{ matrix.arch }}
progress-name: stage-6
use-registry: true
registry-token: "${{ secrets.GITHUB_TOKEN }}"
image-tag: "${{ join(needs.*.outputs.image-tag) }}"
arch: ${{ matrix.arch }}
outputs:
finished: "${{ steps.stage.outputs.finished }}"
package: "${{ steps.stage.outputs.package }}"
image-tag: "${{ steps.stage.outputs.image-tag }}"
upload:
if: github.event_name != 'pull_request' && always()
needs: stage-7
runs-on: ubuntu-latest
steps:
- name: Clone repository
uses: actions/checkout@v3
with:
fetch-depth: 1000
- name: Download artifact
uses: actions/download-artifact@v3
with:
path: ./
- name: Import GPG key
if: always() && github.event_name != 'pull_request'
uses: crazy-max/ghaction-import-gpg@v4
with:
gpg_private_key: ${{ secrets.GPG_SECRET }}
passphrase: ${{ secrets.GPG_PASSPHRASE }}
- name: Sign packages
if: always() && github.event_name != 'pull_request'
env:
gpg_key: ${{ secrets.GPG_KEY }}
run: |
for file in ./packages-*/*.pkg.tar*
do
gpg --detach-sign --use-agent --default-key "${gpg_key}" --batch --yes "${file}"
done
- name: Upload packages
if: always() && github.event_name != 'pull_request'
env:
SFTP_HOST: ${{ secrets.SFTP_HOST }}
SFTP_USER: ${{ secrets.SFTP_USER }}
SFTP_PASSWORD: ${{ secrets.SFTP_PASSWORD }}
SFTP_CWD: ${{ secrets.SFTP_CWD }}
run: ./scripts/upload.sh

4
.gitignore vendored
View File

@ -14,3 +14,7 @@
# GitHub wiki
/wiki
# Node.js
node_modules
/scripts/long-built/dist

View File

@ -0,0 +1,2 @@
AUR_NAME="ungoogled-chromium"
AUR_UPDATED="1652288965"

View File

@ -167,7 +167,7 @@ update-package() {
fi
}
for pkgdir in ./packages/*
for pkgdir in ./packages/* ./long-built/*
do
update-package "${pkgdir}"

View File

@ -0,0 +1,89 @@
#!/bin/bash
# Env
# DOCKER_IMAGE_TAG - Docker image tag
#
# SFTP_HOST - sftp server host
# SFTP_USER - sftp username
# SFTP_PASSWORD - sftp password
# SFTP_CWD - sftp home directory
#
# PROGRESS_NAME - progress archive name, empty in not exists
# Outputs
# finished - build ended?
free_space() {
echo "::group::Stage: Free space on GitHub Runner..."
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/lib/android
sudo rm -rf /opt/ghc
echo "::endgroup::"
}
pull_image() {
echo "::group::Stage: Pulling image from registry..."
docker pull "${DOCKER_IMAGE_TAG}"
echo "::endgroup::"
}
download_progress() {
echo "::group::Stage: Downloading progress artifact..."
SSHPASS="${SFTP_PASSWORD}" sshpass -e rsync -e ssh -avL "${SFTP_USER}@${SFTP_HOST}:${SFTP_CWD}/stage/${PROGRESS_NAME}" progress.tar.zst
echo "::endgroup::"
echo "::group::Stage: Moving progress archive into input directory..."
mv progress.tar.zst input
echo "::endgroup::"
}
upload_progress() {
echo "::group::Stage: Downloading progress artifact..."
SSHPASS="${SFTP_PASSWORD}" sshpass -e rsync -e ssh -avL "${SFTP_USER}@${SFTP_HOST}:${SFTP_CWD}/stage/" progress.tar.zst
echo "::endgroup::"
echo "::group::Stage: Moving progress archive into input directory..."
mv progress.tar.zst input
echo "::endgroup::"
}
run_docker() {
echo "::group::Stage: Running docker container..."
docker run \
-e TIMEOUT=330 \
--mount type=bind,source="input",target="/mnt/input" \
--mount type=bind,source="output",target="/mnt/output" \
--mount type=bind,source="progress",target="/mnt/progress" \
"${DOCKER_IMAGE}"
echo "::endgroup::"
}
free_space
pull_image
# create input, output and progress directory
mkdir input output progress
# Download progress artifact
if [ -z "${PROGRESS_NAME}" ]
then
download_progress
fi
# Run stage build
run_docker
if [ -z "$(ls -A output)" ]
then
# Directory is empty
echo "::set-output name=finished::false"
else
echo "Successfully built package"
echo "::set-output name=finished::true"
fi
# echo "::set-output name=pnpm_cache_dir::$(pnpm store path)"

View File

@ -0,0 +1,25 @@
FROM ghcr.io/archlinux-pkg/packages:latest
ARG PACKAGE
ENV PACKAGE=$PACKAGE
COPY scripts/long-built/build.sh /home/build/build.sh
# Expect archive with files required for building created by makepkg --allsource
COPY *.src.tar.gz /home/build/
RUN chown -R build /home/build
RUN tar xf /home/build/*.src.tar.gz -C /home/build --strip 1 && rm /home/build/*.src.tar.gz
RUN pacman -Syu --noconfirm && \
su -c "cd && makepkg --nobuild --noextract --syncdeps --noconfirm" build && \
su -c "cd && makepkg --nobuild --noextract --syncdeps --noconfirm" build && \
su -c "cd && makepkg --nobuild --noextract --syncdeps --noconfirm" build
RUN ls -lah /home/build
RUN echo $(date +"%s") > /etc/buildtime
USER build
ENTRYPOINT [ "/bin/bash", "/home/build/build.sh" ]

View File

@ -0,0 +1,39 @@
name: Stage
description: Build stage progressing or finishing the compilation in a container
inputs:
finished:
description: If a previous stage already finished the build, the stage will set all output variables to the input ones and exit
required: false
progress-name:
description: The name of the progress artifact to be used
required: false
package:
description: Package name
required: true
use-registry:
description: If the image should be retrieved from ghcr.io or from an artifact called 'image'
required: false
registry-token:
description: The access token for ghcr.io (required if 'use-registry' is set)
required: false
image-tag:
description: The tag of the container image to use (required if 'use-registry' is set)
required: false
arch:
description: Built arch
required: false
outputs:
finished:
description: If a previous stage already finished the build, the stage will set all output variables to the input ones and exit
package:
description: Package name
use-registry:
description: If the image should be retrieved from ghcr.io or from an artifact called 'image'
image-tag:
description: The tag of the container image to use (required if 'use-registry' is set)
runs:
using: node16
main: dist/index.js

View File

@ -0,0 +1,79 @@
#!/bin/bash
set -e
echo "::group::Generating source archive..."
ROOT_DIR=$(pwd)
SCRIPT_DIR="$(realpath "$(dirname "$0")"/..)"
source "${SCRIPT_DIR}/lib/parse-conf.sh"
sudo chown build -R .
PACKAGE="$(cat ${ROOT_DIR}/built_packages.txt)"
pkgdir="${ROOT_DIR}/long-built/$PACKAGE"
clone_aur() {
eval "$(parse-conf ${pkgdir})"
rm -rf "${pkgdir}"
git clone "https://aur.archlinux.org/${AUR_NAME}.git" "${pkgdir}"
EXIT_CODE="${?}"
if (( ${EXIT_CODE} ))
then
echo "exit code: ${code}"
exit ${code}
fi
}
if [ ! -f "${pkgdir}/PKGBUILD" ]
then
clone_aur
fi
cd "${pkgdir}"
sudo chown build -R .
# Generate archive with all required sources for the build
# This either includes local or downloads files using an url
su -c "makepkg --allsource --skippgpcheck" build
mv ./*.src.tar.gz "${ROOT_DIR}"
cd "${ROOT_DIR}"
echo "::endgroup::"
VERSION="$(compgen -G "*.src.tar.gz" | grep -Po '([\d\.]+-\d*)')"
NAME="packages"
ID="$(echo "$REGISTRY"/$NAME | tr '[A-Z]' '[a-z]')"
REF="$(echo "$GH_REF" | sed -e 's,.*/\(.*\),\1,')"
[[ "${GH_REF}" == "refs/tags/"* ]] && REF=$(echo ${REF} | sed -e 's/^v//')
[ "${REF}" == "master" ] && REF=latest
VERSION_TAG="${ID}:${PACKAGE}-${VERSION}-$(date +%s)"
echo "VERSION=${VERSION}"
echo "REGISTRY=${REGISTRY}"
echo "NAME=${NAME}"
echo "ID=${ID}"
echo "REF=${REF}"
echo "VERSION_TAG=${VERSION_TAG}"
echo "::group::Building container image..."
# Build container from source files
docker build . \
--file scripts/long-built/Dockerfile \
--build-arg PACKAGE="${PACKAGE}" \
--tag "${VERSION_TAG}" \
# Reduce worker space used
rm -rf ./*
echo "::endgroup::"
echo "::set-output name=version-tag::${VERSION_TAG}"

104
scripts/long-built/build.sh Executable file
View File

@ -0,0 +1,104 @@
#!/bin/bash
cd /home/build
# variables
ROOT_DIR=$(pwd)
export HOME="/home/build"
# makepkg arguments
BUILD_ARGUMENTS="--skippgpcheck --config /etc/makepkg.${BUILD_ARCH}.conf"
# librewolf
sed -i 's|# mk_add_options MOZ_MAKE_FLAGS="-j4"|mk_add_options MOZ_MAKE_FLAGS="-j1"|g' PKGBUILD
# unpack compilation files from previous stage
unpack_stage() {
echo "==> Extracting source archive..."
sudo tar -xf /mnt/input/progress.tar.zst -C "$ROOT_DIR"
echo "==> Deleting source archive..."
sudo rm /mnt/input/*
echo "==> Deleting unused archive files..."
sudo rm *.tar.*
echo "==> Adjusting ownership of build directory..."
sudo chown -R build .
echo "==> Build directory content"
ls -lah .
echo "==> Build subdirectory sizes"
du -h -d 1
echo "==> Added --noextract --nodeps to build arguments"
BUILD_ARGUMENTS="${BUILD_ARGUMENTS} --noextract --nodeps"
}
# build stage with timeout
build_stage() {
echo "==> Building package..."
echo "==> Using timestamp $(cat /etc/buildtime)"
SOURCE_DATE_EPOCH=$(cat /etc/buildtime) timeout -k 10m -s SIGTERM "${TIMEOUT}m" makepkg ${BUILD_ARGUMENTS}
EXIT_CODE="${?}"
if ! (( ${EXIT_CODE} ))
then
echo "==> Build successful"
elif [[ "${EXIT_CODE}" == "124" ]] # https://www.gnu.org/software/coreutils/manual/html_node/timeout-invocation.html#timeout-invocation
then
echo "==> Build timed out"
else
echo "==> Build failed with ${EXIT_CODE}"
exit ${EXIT_CODE}
fi
echo "==> Build directory content"
ls -lah /home/build
echo "==> Build subdirectory sizes"
sudo du -hd 1
}
# unpack files from previous stage
if [[ -d "/mnt/input" && -f "/mnt/input/progress.tar.zst" ]]
then
unpack_stage
fi
# fix permissions
sudo chown -R build .
build_stage
# if package built, move to /mnt/output
if compgen -G "*.pkg.tar.xz" > /dev/null
then
echo "==> Successfully built package"
mkdir output -p
if [[ -d "/mnt/output" ]]; then
echo "==> Moving package to output directory..."
sudo mv *.pkg.tar.xz /mnt/output
else
echo "==> Output directory does not exist"
fi
fi
# pack the stage files
if [[ -d "/mnt/progress" ]]; then
echo "==> Found progress directory, compressing current build progress"
echo "==> Creating archive of progress..."
tar caf progress.tar.zst src/ --remove-file -H posix --atime-preserve
echo "==> Moving archive to progress directory..."
sudo mv progress.tar.zst /mnt/progress
else
echo "==> Progress directory does not exist, exiting"
fi

100
scripts/long-built/index.ts Normal file
View File

@ -0,0 +1,100 @@
import * as artifactHost from '@actions/artifact';
import { ArtifactClient, DownloadResponse, UploadResponse } from '@actions/artifact';
import * as core from '@actions/core';
import * as exec from '@actions/exec';
import { ExecOptions } from '@actions/exec';
import * as github from '@actions/github';
import { readdirSync } from 'fs';
const shell = async (commandLine: string, args?: Array<string>, options?: ExecOptions): Promise<void> => {
const code: number = await exec.exec(commandLine, args, options);
if (code !== 0)
throw new Error(`Stage: A ${commandLine} command errored with code ${code}`);
};
(async () => {
const output = () => {
console.log('Stage: Setting output', {
'finished': input.finished,
'package': input.package,
'use-registry': input.useRegistry,
'image-tag': input.imageTag
});
core.setOutput('finished', input.finished);
core.setOutput('package', input.package);
core.setOutput('use-registry', input.useRegistry);
core.setOutput('image-tag', input.imageTag);
};
const artifact: ArtifactClient = artifactHost.create();
const input = {
finished: core.getInput('finished') === 'true',
progressName: core.getInput('progress-name'),
package: core.getInput('package', { required: true }),
useRegistry: core.getInput('use-registry') === 'true',
registryToken: core.getInput('registry-token'),
imageTag: core.getInput('image-tag'),
arch: core.getInput('arch'),
};
console.log('Stage: Got input', input);
if (input.finished)
return output();
// Taken from https://github.com/easimon/maximize-build-space/blob/master/action.yml
await core.group<void>('Stage: Free space on GitHub Runner...', async () => {
await shell('sudo rm -rf /usr/share/dotnet');
await shell('sudo rm -rf /usr/local/lib/android');
await shell('sudo rm -rf /opt/ghc');
});
if (input.useRegistry) {
await core.group<void>('Stage: Logging into docker registry...', () =>
shell('docker', ['login', 'ghcr.io', '-u', github.context.actor, '-p', input.registryToken]));
await core.group<void>('Stage: Pulling image from registry...', () =>
shell('docker', ['pull', input.imageTag]));
} else {
await core.group<DownloadResponse>('Stage: Downloading image artifact...', () =>
artifact.downloadArtifact('image'));
await core.group<void>('Stage: Loading image from file...', () =>
shell('docker load --input image'));
await core.group<void>('Stage: Removing image file...', () =>
shell('rm image'));
}
await core.group<void>('Stage: Creating input, output and progress directory...', () =>
shell('mkdir input output progress'));
if (input.progressName !== '') {
await core.group<DownloadResponse>('Stage: Downloading progress artifact...', () =>
artifact.downloadArtifact(input.progressName));
await core.group<void>('Stage: Moving progress archive into input directory...', () =>
shell('mv progress.tar.zst input'));
}
const mount = (directory: string): Array<string> => ['--mount', `type=bind,source=${process.cwd()}/${directory},target=/mnt/${directory}`];
await core.group<void>('Stage: Running docker container...', () =>
shell('docker', ['run', '-e', 'TIMEOUT=330', '-e', `BUILD_ARCH=${input.arch}`, ...mount('input'), ...mount('output'), ...mount('progress'), input.imageTag]));
if (readdirSync('output').length !== 0) {
console.log('Stage: Successfully built package');
input.finished = true;
}
await core.group<UploadResponse>('Stage: Uploading progress...', () =>
artifact.uploadArtifact(github.context.job, readdirSync('progress').map(node => `progress/${node}`), 'progress'));
if (input.finished)
await core.group<UploadResponse>('Stage: Uploading package...', () =>
artifact.uploadArtifact(input.package, readdirSync('output').map(node => `output/${node}`), 'output'));
output();
})().catch(core.setFailed);

698
scripts/long-built/package-lock.json generated Normal file
View File

@ -0,0 +1,698 @@
{
"name": "@built-aur/long-built",
"version": "1.0.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@built-aur/long-built",
"version": "1.0.0",
"license": "LGPL-2.0",
"dependencies": {
"@actions/artifact": "^1.1.0",
"@actions/core": "^1.8.2",
"@actions/exec": "^1.1.1",
"@actions/github": "^5.0.3"
},
"devDependencies": {
"@types/node": "^17.0.35",
"typescript": "^4.6.4"
}
},
"node_modules/@actions/artifact": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@actions/artifact/-/artifact-1.1.0.tgz",
"integrity": "sha512-shO+w/BAnzRnFhfsgUao8sxjByAMqDdfvek2LLKeCueBKXoTrAcp7U/hs9Fdx+z9g7Q0mbIrmHAzAAww4HK1bQ==",
"dependencies": {
"@actions/core": "^1.2.6",
"@actions/http-client": "^2.0.1",
"tmp": "^0.2.1",
"tmp-promise": "^3.0.2"
}
},
"node_modules/@actions/core": {
"version": "1.8.2",
"resolved": "https://registry.npmjs.org/@actions/core/-/core-1.8.2.tgz",
"integrity": "sha512-FXcBL7nyik8K5ODeCKlxi+vts7torOkoDAKfeh61EAkAy1HAvwn9uVzZBY0f15YcQTcZZ2/iSGBFHEuioZWfDA==",
"dependencies": {
"@actions/http-client": "^2.0.1"
}
},
"node_modules/@actions/exec": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.1.1.tgz",
"integrity": "sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==",
"dependencies": {
"@actions/io": "^1.0.1"
}
},
"node_modules/@actions/github": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/@actions/github/-/github-5.0.3.tgz",
"integrity": "sha512-myjA/pdLQfhUGLtRZC/J4L1RXOG4o6aYdiEq+zr5wVVKljzbFld+xv10k1FX6IkIJtNxbAq44BdwSNpQ015P0A==",
"dependencies": {
"@actions/http-client": "^2.0.1",
"@octokit/core": "^3.6.0",
"@octokit/plugin-paginate-rest": "^2.17.0",
"@octokit/plugin-rest-endpoint-methods": "^5.13.0"
}
},
"node_modules/@actions/http-client": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz",
"integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==",
"dependencies": {
"tunnel": "^0.0.6"
}
},
"node_modules/@actions/io": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@actions/io/-/io-1.1.2.tgz",
"integrity": "sha512-d+RwPlMp+2qmBfeLYPLXuSRykDIFEwdTA0MMxzS9kh4kvP1ftrc/9fzy6pX6qAjthdXruHQ6/6kjT/DNo5ALuw=="
},
"node_modules/@octokit/auth-token": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz",
"integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==",
"dependencies": {
"@octokit/types": "^6.0.3"
}
},
"node_modules/@octokit/core": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz",
"integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==",
"dependencies": {
"@octokit/auth-token": "^2.4.4",
"@octokit/graphql": "^4.5.8",
"@octokit/request": "^5.6.3",
"@octokit/request-error": "^2.0.5",
"@octokit/types": "^6.0.3",
"before-after-hook": "^2.2.0",
"universal-user-agent": "^6.0.0"
}
},
"node_modules/@octokit/endpoint": {
"version": "6.0.12",
"resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz",
"integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==",
"dependencies": {
"@octokit/types": "^6.0.3",
"is-plain-object": "^5.0.0",
"universal-user-agent": "^6.0.0"
}
},
"node_modules/@octokit/graphql": {
"version": "4.8.0",
"resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz",
"integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==",
"dependencies": {
"@octokit/request": "^5.6.0",
"@octokit/types": "^6.0.3",
"universal-user-agent": "^6.0.0"
}
},
"node_modules/@octokit/openapi-types": {
"version": "11.2.0",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz",
"integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA=="
},
"node_modules/@octokit/plugin-paginate-rest": {
"version": "2.17.0",
"resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz",
"integrity": "sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw==",
"dependencies": {
"@octokit/types": "^6.34.0"
},
"peerDependencies": {
"@octokit/core": ">=2"
}
},
"node_modules/@octokit/plugin-rest-endpoint-methods": {
"version": "5.13.0",
"resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz",
"integrity": "sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA==",
"dependencies": {
"@octokit/types": "^6.34.0",
"deprecation": "^2.3.1"
},
"peerDependencies": {
"@octokit/core": ">=3"
}
},
"node_modules/@octokit/request": {
"version": "5.6.3",
"resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz",
"integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==",
"dependencies": {
"@octokit/endpoint": "^6.0.1",
"@octokit/request-error": "^2.1.0",
"@octokit/types": "^6.16.1",
"is-plain-object": "^5.0.0",
"node-fetch": "^2.6.7",
"universal-user-agent": "^6.0.0"
}
},
"node_modules/@octokit/request-error": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz",
"integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==",
"dependencies": {
"@octokit/types": "^6.0.3",
"deprecation": "^2.0.0",
"once": "^1.4.0"
}
},
"node_modules/@octokit/types": {
"version": "6.34.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz",
"integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==",
"dependencies": {
"@octokit/openapi-types": "^11.2.0"
}
},
"node_modules/@types/node": {
"version": "17.0.35",
"resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.35.tgz",
"integrity": "sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg==",
"dev": true
},
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"node_modules/before-after-hook": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz",
"integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ=="
},
"node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"node_modules/deprecation": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
"integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
},
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"node_modules/glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.1.1",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
},
"engines": {
"node": "*"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"node_modules/is-plain-object": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dependencies": {
"brace-expansion": "^1.1.7"
},
"engines": {
"node": "*"
}
},
"node_modules/node-fetch": {
"version": "2.6.7",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
"integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
"dependencies": {
"whatwg-url": "^5.0.0"
},
"engines": {
"node": "4.x || >=6.0.0"
},
"peerDependencies": {
"encoding": "^0.1.0"
},
"peerDependenciesMeta": {
"encoding": {
"optional": true
}
}
},
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dependencies": {
"wrappy": "1"
}
},
"node_modules/path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"dependencies": {
"glob": "^7.1.3"
},
"bin": {
"rimraf": "bin.js"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/tmp": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
"integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
"dependencies": {
"rimraf": "^3.0.0"
},
"engines": {
"node": ">=8.17.0"
}
},
"node_modules/tmp-promise": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz",
"integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==",
"dependencies": {
"tmp": "^0.2.0"
}
},
"node_modules/tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
},
"node_modules/tunnel": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
"integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
"engines": {
"node": ">=0.6.11 <=0.7.0 || >=0.7.3"
}
},
"node_modules/typescript": {
"version": "4.6.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz",
"integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==",
"dev": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
"node": ">=4.2.0"
}
},
"node_modules/universal-user-agent": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
"integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
},
"node_modules/webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
"integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
},
"node_modules/whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
"integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
"dependencies": {
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
}
},
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
}
},
"dependencies": {
"@actions/artifact": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@actions/artifact/-/artifact-1.1.0.tgz",
"integrity": "sha512-shO+w/BAnzRnFhfsgUao8sxjByAMqDdfvek2LLKeCueBKXoTrAcp7U/hs9Fdx+z9g7Q0mbIrmHAzAAww4HK1bQ==",
"requires": {
"@actions/core": "^1.2.6",
"@actions/http-client": "^2.0.1",
"tmp": "^0.2.1",
"tmp-promise": "^3.0.2"
}
},
"@actions/core": {
"version": "1.8.2",
"resolved": "https://registry.npmjs.org/@actions/core/-/core-1.8.2.tgz",
"integrity": "sha512-FXcBL7nyik8K5ODeCKlxi+vts7torOkoDAKfeh61EAkAy1HAvwn9uVzZBY0f15YcQTcZZ2/iSGBFHEuioZWfDA==",
"requires": {
"@actions/http-client": "^2.0.1"
}
},
"@actions/exec": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.1.1.tgz",
"integrity": "sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==",
"requires": {
"@actions/io": "^1.0.1"
}
},
"@actions/github": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/@actions/github/-/github-5.0.3.tgz",
"integrity": "sha512-myjA/pdLQfhUGLtRZC/J4L1RXOG4o6aYdiEq+zr5wVVKljzbFld+xv10k1FX6IkIJtNxbAq44BdwSNpQ015P0A==",
"requires": {
"@actions/http-client": "^2.0.1",
"@octokit/core": "^3.6.0",
"@octokit/plugin-paginate-rest": "^2.17.0",
"@octokit/plugin-rest-endpoint-methods": "^5.13.0"
}
},
"@actions/http-client": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz",
"integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==",
"requires": {
"tunnel": "^0.0.6"
}
},
"@actions/io": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@actions/io/-/io-1.1.2.tgz",
"integrity": "sha512-d+RwPlMp+2qmBfeLYPLXuSRykDIFEwdTA0MMxzS9kh4kvP1ftrc/9fzy6pX6qAjthdXruHQ6/6kjT/DNo5ALuw=="
},
"@octokit/auth-token": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz",
"integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==",
"requires": {
"@octokit/types": "^6.0.3"
}
},
"@octokit/core": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz",
"integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==",
"requires": {
"@octokit/auth-token": "^2.4.4",
"@octokit/graphql": "^4.5.8",
"@octokit/request": "^5.6.3",
"@octokit/request-error": "^2.0.5",
"@octokit/types": "^6.0.3",
"before-after-hook": "^2.2.0",
"universal-user-agent": "^6.0.0"
}
},
"@octokit/endpoint": {
"version": "6.0.12",
"resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz",
"integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==",
"requires": {
"@octokit/types": "^6.0.3",
"is-plain-object": "^5.0.0",
"universal-user-agent": "^6.0.0"
}
},
"@octokit/graphql": {
"version": "4.8.0",
"resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz",
"integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==",
"requires": {
"@octokit/request": "^5.6.0",
"@octokit/types": "^6.0.3",
"universal-user-agent": "^6.0.0"
}
},
"@octokit/openapi-types": {
"version": "11.2.0",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz",
"integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA=="
},
"@octokit/plugin-paginate-rest": {
"version": "2.17.0",
"resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz",
"integrity": "sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw==",
"requires": {
"@octokit/types": "^6.34.0"
}
},
"@octokit/plugin-rest-endpoint-methods": {
"version": "5.13.0",
"resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz",
"integrity": "sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA==",
"requires": {
"@octokit/types": "^6.34.0",
"deprecation": "^2.3.1"
}
},
"@octokit/request": {
"version": "5.6.3",
"resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz",
"integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==",
"requires": {
"@octokit/endpoint": "^6.0.1",
"@octokit/request-error": "^2.1.0",
"@octokit/types": "^6.16.1",
"is-plain-object": "^5.0.0",
"node-fetch": "^2.6.7",
"universal-user-agent": "^6.0.0"
}
},
"@octokit/request-error": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz",
"integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==",
"requires": {
"@octokit/types": "^6.0.3",
"deprecation": "^2.0.0",
"once": "^1.4.0"
}
},
"@octokit/types": {
"version": "6.34.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz",
"integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==",
"requires": {
"@octokit/openapi-types": "^11.2.0"
}
},
"@types/node": {
"version": "17.0.35",
"resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.35.tgz",
"integrity": "sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg==",
"dev": true
},
"balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"before-after-hook": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz",
"integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ=="
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"deprecation": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
"integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.1.1",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"is-plain-object": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="
},
"minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"requires": {
"brace-expansion": "^1.1.7"
}
},
"node-fetch": {
"version": "2.6.7",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
"integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
"requires": {
"whatwg-url": "^5.0.0"
}
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"requires": {
"wrappy": "1"
}
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
},
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"requires": {
"glob": "^7.1.3"
}
},
"tmp": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
"integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
"requires": {
"rimraf": "^3.0.0"
}
},
"tmp-promise": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz",
"integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==",
"requires": {
"tmp": "^0.2.0"
}
},
"tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
},
"tunnel": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
"integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
},
"typescript": {
"version": "4.6.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz",
"integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==",
"dev": true
},
"universal-user-agent": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
"integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
},
"webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
"integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
},
"whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
"integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
"requires": {
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
}
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
}
}
}

View File

@ -0,0 +1,22 @@
{
"name": "@built-aur/long-built",
"version": "1.0.0",
"description": "",
"main": "dist/index.js",
"scripts": {
"setup": "npm install && tsc -p tsconfig.json"
},
"keywords": [],
"author": "",
"license": "LGPL-2.0",
"dependencies": {
"@actions/artifact": "^1.1.0",
"@actions/core": "^1.8.2",
"@actions/exec": "^1.1.1",
"@actions/github": "^5.0.3"
},
"devDependencies": {
"@types/node": "^17.0.35",
"typescript": "^4.6.4"
}
}

67
scripts/long-built/prepare.sh Executable file
View File

@ -0,0 +1,67 @@
#!/bin/bash
if [ "${github_event}" != "workflow_dispatch" ]
then
BASE_COMMIT=$(jq --raw-output .pull_request.base.sha "${GITHUB_EVENT_PATH}")
OLD_COMMIT=$(jq --raw-output .commits[0].id "${GITHUB_EVENT_PATH}")
HEAD_COMMIT=$(jq --raw-output .commits[-1].id "${GITHUB_EVENT_PATH}")
if [ "${BASE_COMMIT}" = "null" ]
then
if [ "${OLD_COMMIT}" = "${HEAD_COMMIT}" ]
then
# Single-commit push.
echo "Processing commit: ${HEAD_COMMIT}"
CHANGED_FILES=$(git diff-tree --no-commit-id --name-only -r "${HEAD_COMMIT}")
else
# Multi-commit push.
OLD_COMMIT="${OLD_COMMIT}~1"
echo "Processing commit range: ${OLD_COMMIT}..${HEAD_COMMIT}"
CHANGED_FILES=$(git diff-tree --no-commit-id --name-only -r "${OLD_COMMIT}" "${HEAD_COMMIT}")
fi
else
# Pull requests.
echo "Processing pull request #$(jq --raw-output .pull_request.number "${GITHUB_EVENT_PATH}"): ${BASE_COMMIT}..HEAD"
CHANGED_FILES=$(git diff-tree --no-commit-id --name-only -r "${BASE_COMMIT}" "HEAD")
fi
fi
if [ "${github_event}" != "workflow_dispatch" ]
then
# Process tag '%ci:no-build' that may be added as line to commit message.
# Forces CI to cancel current build with status 'passed'.
if grep -qiP '^\s*%ci:no-build\s*$' <(git log --format="%B" -n 1 "HEAD")
then
echo "[!] Force exiting as tag '%ci:no-build' was applied to HEAD commit message."
exit 0
fi
# Parse changed files and identify new packages and deleted packages.
# Create lists of those packages that will be passed to upload job for
# further processing.
while read -r file
do
if [ -d ${file} ]
then
file="${file}/PKGBUILD"
fi
# This file does not belong to a package, so ignore it
if ! [[ ${file} == long-built/* ]]
then
continue
fi
if [[ ${file} =~ ^long-built/([.a-z0-9+-]*)/.*$ ]]
then
# * package, check if it was deleted or updated
pkg=${BASH_REMATCH[1]}
if [ ! -d "long-built/${pkg}" ]; then
echo "${pkg}" >> ./deleted_packages.txt
else
printf "${pkg}" > ./built_packages.txt
echo "Package to built: ${pkg}"
fi
fi
done<<<${CHANGED_FILES}
else
printf "${github_inputs_packages}" > ./built_packages.txt
fi

View File

@ -0,0 +1,101 @@
{
"compilerOptions": {
/* Visit https://aka.ms/tsconfig.json to read more about this file */
/* Projects */
// "incremental": true, /* Enable incremental compilation */
// "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
// "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */
// "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */
// "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
/* Language and Environment */
"target": "esnext", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
// "jsx": "preserve", /* Specify what JSX code is generated. */
// "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
// "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */
// "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */
// "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
/* Modules */
"module": "commonjs", /* Specify what module code is generated. */
// "rootDir": "./", /* Specify the root folder within your source files. */
// "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
// "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
// "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */
// "types": [], /* Specify type package names to be included without being referenced in a source file. */
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
// "resolveJsonModule": true, /* Enable importing .json files */
// "noResolve": true, /* Disallow `import`s, `require`s or `<reference>`s from expanding the number of files TypeScript should add to a project. */
/* JavaScript Support */
// "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */
// "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */
/* Emit */
// "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
// "declarationMap": true, /* Create sourcemaps for d.ts files. */
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
// "sourceMap": true, /* Create source map files for emitted JavaScript files. */
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */
"outDir": "./dist", /* Specify an output folder for all emitted files. */
// "removeComments": true, /* Disable emitting comments. */
// "noEmit": true, /* Disable emitting files from a compilation. */
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
// "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */
// "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
// "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
// "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
// "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
// "newLine": "crlf", /* Set the newline character for emitting files. */
// "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */
// "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */
// "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
// "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */
// "declarationDir": "./", /* Specify the output directory for generated declaration files. */
// "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
/* Interop Constraints */
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
// "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
"esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
"forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
/* Type Checking */
"strict": true, /* Enable all strict type-checking options. */
// "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */
// "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */
// "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
// "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */
// "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
// "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */
// "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */
// "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
// "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */
// "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */
// "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
// "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
// "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
// "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
// "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */
// "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
// "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
/* Completeness */
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
"skipLibCheck": true /* Skip type checking all .d.ts files. */
}
}