From ee4030aa9818c212f81fe6603480dc5d86203eff Mon Sep 17 00:00:00 2001 From: MedzikUser Date: Mon, 23 May 2022 21:15:15 +0200 Subject: [PATCH] ci: add long-built --- .github/workflows/long-built.yml | 328 +++++++++++ .gitignore | 4 + long-built/ungoogled-chromium/built.conf | 2 + scripts/auto-update.sh | 2 +- scripts/long-built/.built.sh | 89 +++ scripts/long-built/Dockerfile | 25 + scripts/long-built/action.yml | 39 ++ scripts/long-built/build-container.sh | 79 +++ scripts/long-built/build.sh | 104 ++++ scripts/long-built/index.ts | 100 ++++ scripts/long-built/package-lock.json | 698 +++++++++++++++++++++++ scripts/long-built/package.json | 22 + scripts/long-built/prepare.sh | 67 +++ scripts/long-built/tsconfig.json | 101 ++++ 14 files changed, 1659 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/long-built.yml create mode 100644 long-built/ungoogled-chromium/built.conf create mode 100644 scripts/long-built/.built.sh create mode 100644 scripts/long-built/Dockerfile create mode 100644 scripts/long-built/action.yml create mode 100755 scripts/long-built/build-container.sh create mode 100755 scripts/long-built/build.sh create mode 100644 scripts/long-built/index.ts create mode 100644 scripts/long-built/package-lock.json create mode 100644 scripts/long-built/package.json create mode 100755 scripts/long-built/prepare.sh create mode 100644 scripts/long-built/tsconfig.json diff --git a/.github/workflows/long-built.yml b/.github/workflows/long-built.yml new file mode 100644 index 00000000..db483eaa --- /dev/null +++ b/.github/workflows/long-built.yml @@ -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 diff --git a/.gitignore b/.gitignore index d0d8da13..94e23d49 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,7 @@ # GitHub wiki /wiki + +# Node.js +node_modules +/scripts/long-built/dist diff --git a/long-built/ungoogled-chromium/built.conf b/long-built/ungoogled-chromium/built.conf new file mode 100644 index 00000000..1c864d0e --- /dev/null +++ b/long-built/ungoogled-chromium/built.conf @@ -0,0 +1,2 @@ +AUR_NAME="ungoogled-chromium" +AUR_UPDATED="1652288965" diff --git a/scripts/auto-update.sh b/scripts/auto-update.sh index d490f202..a7ed7cab 100755 --- a/scripts/auto-update.sh +++ b/scripts/auto-update.sh @@ -167,7 +167,7 @@ update-package() { fi } -for pkgdir in ./packages/* +for pkgdir in ./packages/* ./long-built/* do update-package "${pkgdir}" diff --git a/scripts/long-built/.built.sh b/scripts/long-built/.built.sh new file mode 100644 index 00000000..ca9b812d --- /dev/null +++ b/scripts/long-built/.built.sh @@ -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)" diff --git a/scripts/long-built/Dockerfile b/scripts/long-built/Dockerfile new file mode 100644 index 00000000..133cefc1 --- /dev/null +++ b/scripts/long-built/Dockerfile @@ -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" ] diff --git a/scripts/long-built/action.yml b/scripts/long-built/action.yml new file mode 100644 index 00000000..cad7b967 --- /dev/null +++ b/scripts/long-built/action.yml @@ -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 diff --git a/scripts/long-built/build-container.sh b/scripts/long-built/build-container.sh new file mode 100755 index 00000000..51646867 --- /dev/null +++ b/scripts/long-built/build-container.sh @@ -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}" diff --git a/scripts/long-built/build.sh b/scripts/long-built/build.sh new file mode 100755 index 00000000..3db879f8 --- /dev/null +++ b/scripts/long-built/build.sh @@ -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 diff --git a/scripts/long-built/index.ts b/scripts/long-built/index.ts new file mode 100644 index 00000000..8d427ec4 --- /dev/null +++ b/scripts/long-built/index.ts @@ -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, options?: ExecOptions): Promise => { + 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('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('Stage: Logging into docker registry...', () => + shell('docker', ['login', 'ghcr.io', '-u', github.context.actor, '-p', input.registryToken])); + + await core.group('Stage: Pulling image from registry...', () => + shell('docker', ['pull', input.imageTag])); + } else { + await core.group('Stage: Downloading image artifact...', () => + artifact.downloadArtifact('image')); + + await core.group('Stage: Loading image from file...', () => + shell('docker load --input image')); + + await core.group('Stage: Removing image file...', () => + shell('rm image')); + } + + await core.group('Stage: Creating input, output and progress directory...', () => + shell('mkdir input output progress')); + + if (input.progressName !== '') { + await core.group('Stage: Downloading progress artifact...', () => + artifact.downloadArtifact(input.progressName)); + + await core.group('Stage: Moving progress archive into input directory...', () => + shell('mv progress.tar.zst input')); + } + + const mount = (directory: string): Array => ['--mount', `type=bind,source=${process.cwd()}/${directory},target=/mnt/${directory}`]; + + await core.group('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('Stage: Uploading progress...', () => + artifact.uploadArtifact(github.context.job, readdirSync('progress').map(node => `progress/${node}`), 'progress')); + + if (input.finished) + await core.group('Stage: Uploading package...', () => + artifact.uploadArtifact(input.package, readdirSync('output').map(node => `output/${node}`), 'output')); + + output(); +})().catch(core.setFailed); diff --git a/scripts/long-built/package-lock.json b/scripts/long-built/package-lock.json new file mode 100644 index 00000000..5cf86f12 --- /dev/null +++ b/scripts/long-built/package-lock.json @@ -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=" + } + } +} diff --git a/scripts/long-built/package.json b/scripts/long-built/package.json new file mode 100644 index 00000000..ce9e43f2 --- /dev/null +++ b/scripts/long-built/package.json @@ -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" + } +} diff --git a/scripts/long-built/prepare.sh b/scripts/long-built/prepare.sh new file mode 100755 index 00000000..0e499884 --- /dev/null +++ b/scripts/long-built/prepare.sh @@ -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 \ No newline at end of file diff --git a/scripts/long-built/tsconfig.json b/scripts/long-built/tsconfig.json new file mode 100644 index 00000000..d1d4173e --- /dev/null +++ b/scripts/long-built/tsconfig.json @@ -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 ``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. */ + } +}