feat: solved 2024 day 5 #106
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: typescript | |
on: | |
push: | |
branches: '**' | |
paths-ignore: | |
- '.github/!(workflows)/**' | |
- 'solutions/rust/**' | |
- 'solutions/python/**' | |
pull_request: | |
branches: '**' | |
paths-ignore: | |
- '.github/!(workflows)/**' | |
- 'solutions/rust/**' | |
- 'solutions/python/**' | |
env: | |
TURBO_TOKEN: ${{ secrets.VERCEL_TOKEN }} | |
TURBO_TEAM: ${{ vars.TURBO_TEAM }} | |
TURBO_REMOTE_ONLY: true | |
BUILD_REASON: 'publish' # publint would like to see the .d.ts files | |
permissions: | |
contents: read | |
pages: write | |
id-token: write | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.ref_name }} | |
cancel-in-progress: true | |
jobs: | |
lint: | |
name: lint:${{ matrix.lint-kind }} | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
node-version: [20.x] | |
lint-kind: [tsc, es, md, format, style, svelte, depcheck] | |
steps: | |
- name: checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
submodules: true | |
lfs: true | |
- name: setup node.js ${{ matrix.node-version }} | |
uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ matrix.node-version }} | |
- name: pnpm setup | |
uses: pnpm/action-setup@v2 | |
with: | |
run_install: false | |
- name: get pnpm store directory | |
id: pnpm-cache | |
run: | | |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT | |
- name: cache | |
id: cache | |
uses: actions/cache@v3 | |
with: | |
path: | | |
${{ steps.pnpm-cache.outputs.STORE_PATH }} | |
.cache | |
key: ${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }} | |
restore-keys: | | |
${{ runner.os }}- | |
- name: install | |
run: pnpm install | |
- name: lint:${{ matrix.lint-kind }} | |
run: pnpm run lint:${{ matrix.lint-kind }} | |
typedoc: | |
name: typedoc | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
node-version: [20.x] | |
steps: | |
- name: checkout | |
uses: actions/checkout@v4 | |
if: vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'typedoc' | |
with: | |
fetch-depth: 1 | |
submodules: true | |
lfs: true | |
- name: setup node.js ${{ matrix.node-version }} | |
uses: actions/setup-node@v3 | |
if: vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'typedoc' | |
with: | |
node-version: ${{ matrix.node-version }} | |
- name: pnpm setup | |
uses: pnpm/action-setup@v2 | |
if: vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'typedoc' | |
with: | |
run_install: false | |
- name: get pnpm store directory | |
id: pnpm-cache | |
if: vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'typedoc' | |
run: | | |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT | |
- name: cache | |
id: cache | |
if: vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'typedoc' | |
uses: actions/cache@v3 | |
with: | |
path: | | |
${{ steps.pnpm-cache.outputs.STORE_PATH }} | |
.cache | |
key: ${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }} | |
restore-keys: | | |
${{ runner.os }}- | |
- name: install | |
if: vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'typedoc' | |
run: pnpm install | |
- name: typedoc | |
if: vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'typedoc' | |
run: pnpm run typedoc | |
- name: prepare pages (use index.html as 404.html) | |
if: | | |
vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'typedoc' && | |
vars.PAGES_DEPLOY_ARTIFACT_DIR != '' && | |
github.ref_name == github.event.repository.default_branch && | |
github.event_name != 'pull_request' | |
run: | | |
cp ${{ vars.PAGES_DEPLOY_ARTIFACT_DIR }}/index.html ${{ vars.PAGES_DEPLOY_ARTIFACT_DIR }}/404.html | |
- name: setup pages | |
uses: actions/configure-pages@v3 | |
if: | | |
vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'typedoc' && | |
vars.PAGES_DEPLOY_ARTIFACT_DIR != '' && | |
github.ref_name == github.event.repository.default_branch && | |
github.event_name != 'pull_request' | |
- name: upload artifact | |
uses: actions/upload-pages-artifact@v2 | |
if: | | |
vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'typedoc' && | |
vars.PAGES_DEPLOY_ARTIFACT_DIR != '' && | |
github.ref_name == github.event.repository.default_branch && | |
github.event_name != 'pull_request' | |
with: | |
path: ${{ vars.PAGES_DEPLOY_ARTIFACT_DIR }} | |
vitepress: | |
name: vitepress | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
node-version: [20.x] | |
steps: | |
- name: checkout | |
uses: actions/checkout@v4 | |
if: vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'vitepress' | |
with: | |
fetch-depth: 1 | |
submodules: true | |
lfs: true | |
- name: setup node.js ${{ matrix.node-version }} | |
uses: actions/setup-node@v3 | |
if: vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'vitepress' | |
with: | |
node-version: ${{ matrix.node-version }} | |
- name: pnpm setup | |
uses: pnpm/action-setup@v2 | |
if: vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'vitepress' | |
with: | |
run_install: false | |
- name: get pnpm store directory | |
id: pnpm-cache | |
if: vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'vitepress' | |
run: | | |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT | |
- name: cache | |
id: cache | |
if: vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'vitepress' | |
uses: actions/cache@v3 | |
with: | |
path: | | |
${{ steps.pnpm-cache.outputs.STORE_PATH }} | |
.cache | |
key: ${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }} | |
restore-keys: | | |
${{ runner.os }}- | |
- name: install | |
if: vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'vitepress' | |
run: pnpm install | |
- name: vitepress | |
if: vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'vitepress' | |
run: pnpm run vitepress | |
- name: prepare pages (use index.html as 404.html) | |
if: | | |
vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'vitepress' && | |
vars.PAGES_DEPLOY_ARTIFACT_DIR != '' && | |
github.ref_name == github.event.repository.default_branch && | |
github.event_name != 'pull_request' | |
run: | | |
cp ${{ vars.PAGES_DEPLOY_ARTIFACT_DIR }}/index.html ${{ vars.PAGES_DEPLOY_ARTIFACT_DIR }}/404.html | |
- name: setup pages | |
uses: actions/configure-pages@v3 | |
if: | | |
vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'vitepress' && | |
vars.PAGES_DEPLOY_ARTIFACT_DIR != '' && | |
github.ref_name == github.event.repository.default_branch && | |
github.event_name != 'pull_request' | |
- name: upload artifact | |
uses: actions/upload-pages-artifact@v2 | |
if: | | |
vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'vitepress' && | |
vars.PAGES_DEPLOY_ARTIFACT_DIR != '' && | |
github.ref_name == github.event.repository.default_branch && | |
github.event_name != 'pull_request' | |
with: | |
path: ${{ vars.PAGES_DEPLOY_ARTIFACT_DIR }} | |
test: | |
name: test | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
node-version: [20.x] | |
steps: | |
- name: checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
submodules: true | |
lfs: true | |
- name: setup node.js ${{ matrix.node-version }} | |
uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ matrix.node-version }} | |
- name: pnpm setup | |
uses: pnpm/action-setup@v2 | |
with: | |
run_install: false | |
- name: get pnpm store directory | |
id: pnpm-cache | |
run: | | |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT | |
- name: cache | |
id: cache | |
uses: actions/cache@v3 | |
with: | |
path: | | |
${{ steps.pnpm-cache.outputs.STORE_PATH }} | |
.cache | |
key: ${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }} | |
restore-keys: | | |
${{ runner.os }}- | |
- name: install | |
run: pnpm install | |
- name: test | |
run: pnpm run test | |
- name: upload coverage result to codacy | |
uses: codacy/codacy-coverage-reporter-action@v1 | |
with: | |
project-token: ${{ secrets.CODACY_PROJECT_TOKEN }} | |
coverage-reports: coverage/lcov.info | |
language: ${{ vars.CODACY_REPORT_LANGUAGE }} | |
- name: upload coverage result to codecov | |
uses: codecov/codecov-action@v3 | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
directory: coverage | |
- name: prepare pages (use index.html as 404.html) | |
if: | | |
vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'test' && | |
vars.PAGES_DEPLOY_ARTIFACT_DIR != '' && | |
github.ref_name == github.event.repository.default_branch && | |
github.event_name != 'pull_request' | |
run: | | |
cp ${{ vars.PAGES_DEPLOY_ARTIFACT_DIR }}/index.html ${{ vars.PAGES_DEPLOY_ARTIFACT_DIR }}/404.html | |
- name: setup pages | |
uses: actions/configure-pages@v3 | |
if: | | |
vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'test' && | |
vars.PAGES_DEPLOY_ARTIFACT_DIR != '' && | |
github.ref_name == github.event.repository.default_branch && | |
github.event_name != 'pull_request' | |
- name: upload artifact | |
uses: actions/upload-pages-artifact@v2 | |
if: | | |
vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'test' && | |
vars.PAGES_DEPLOY_ARTIFACT_DIR != '' && | |
github.ref_name == github.event.repository.default_branch && | |
github.event_name != 'pull_request' | |
with: | |
path: ${{ vars.PAGES_DEPLOY_ARTIFACT_DIR }} | |
build: | |
name: build | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
node-version: [20.x] | |
steps: | |
- name: checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
submodules: true | |
lfs: true | |
- name: setup node.js ${{ matrix.node-version }} | |
uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ matrix.node-version }} | |
- name: pnpm setup | |
uses: pnpm/action-setup@v2 | |
with: | |
run_install: false | |
- name: get pnpm store directory | |
id: pnpm-cache | |
run: | | |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT | |
- name: cache | |
id: cache | |
uses: actions/cache@v3 | |
with: | |
path: | | |
${{ steps.pnpm-cache.outputs.STORE_PATH }} | |
.cache | |
key: ${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }} | |
restore-keys: | | |
${{ runner.os }}- | |
- name: install | |
run: pnpm install | |
- name: build | |
env: | |
BASE_HREF: '/${{ github.event.repository.name }}' | |
PLATFORM: 'github-pages' | |
run: pnpm run build | |
- name: publint | |
run: pnpm run publint | |
- name: prepare pages (use index.html as 404.html) | |
if: | | |
vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'build' && | |
vars.PAGES_DEPLOY_ARTIFACT_DIR != '' && | |
github.ref_name == github.event.repository.default_branch && | |
github.event_name != 'pull_request' | |
run: | | |
cp ${{ vars.PAGES_DEPLOY_ARTIFACT_DIR }}/index.html ${{ vars.PAGES_DEPLOY_ARTIFACT_DIR }}/404.html | |
- name: setup pages | |
uses: actions/configure-pages@v3 | |
if: | | |
vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'build' && | |
vars.PAGES_DEPLOY_ARTIFACT_DIR != '' && | |
github.ref_name == github.event.repository.default_branch && | |
github.event_name != 'pull_request' | |
- name: upload artifact | |
uses: actions/upload-pages-artifact@v2 | |
if: | | |
vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'build' && | |
vars.PAGES_DEPLOY_ARTIFACT_DIR != '' && | |
github.ref_name == github.event.repository.default_branch && | |
github.event_name != 'pull_request' | |
with: | |
path: ${{ vars.PAGES_DEPLOY_ARTIFACT_DIR }} | |
deploy-github-pages: | |
name: deploy github pages | |
if: | | |
github.ref_name == github.event.repository.default_branch && | |
github.event_name != 'pull_request' && | |
vars.PAGES_DEPLOY_ARTIFACT_DIR && ( | |
vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'build' || | |
vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'test' || | |
vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'typedoc' || | |
vars.PAGES_DEPLOY_ARTIFACT_BUILDING_JOB == 'vitepress' | |
) | |
runs-on: ubuntu-latest | |
needs: [build, test, lint, typedoc, vitepress] | |
environment: | |
name: github-pages | |
url: ${{ steps.deployment.outputs.page_url }} | |
steps: | |
- name: deploy to github pages | |
uses: actions/deploy-pages@v1 | |
id: deployment | |
collect: | |
runs-on: ubuntu-latest | |
outputs: | |
non_published_packages: | |
${{ steps.collect_packages.outputs.non_published_packages }} | |
steps: | |
- name: checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
submodules: true | |
lfs: true | |
- name: collect public packages | |
id: collect_packages | |
uses: AlexAegis/collect-public-packages@v1 | |
release: | |
name: | | |
release ${{ matrix.package.package_name }}@${{ matrix.package.package_version }} | |
if: | | |
needs.collect.outputs.non_published_packages && | |
github.ref_name == github.event.repository.default_branch && | |
github.event_name != 'pull_request' | |
runs-on: ubuntu-latest | |
needs: [collect, build, test, lint, typedoc, vitepress] | |
strategy: | |
matrix: | |
package: ${{ fromJSON(needs.collect.outputs.non_published_packages) }} | |
steps: | |
- name: checkout | |
uses: actions/checkout@v4 | |
- name: setup node.js | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
registry-url: 'https://registry.npmjs.org' | |
- name: pnpm setup | |
uses: pnpm/action-setup@v2 | |
with: | |
run_install: false | |
- name: get pnpm store directory | |
id: pnpm-cache | |
run: | | |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT | |
- name: cache | |
id: cache | |
uses: actions/cache@v3 | |
with: | |
path: | | |
${{ steps.pnpm-cache.outputs.STORE_PATH }} | |
.cache | |
key: ${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }} | |
restore-keys: | | |
${{ runner.os }}- | |
- name: install | |
run: pnpm install | |
- name: | | |
build ${{ matrix.package.package_name }}@${{ matrix.package.package_version }} | |
run: | | |
npx turbo run build-lib_ --force --filter="${{ matrix.package.package_name }}" --concurrency 16 --cache-dir=.cache/turbo | |
- name: | | |
publint ${{ matrix.package.package_name }}@${{ matrix.package.package_version }} | |
run: | | |
npx turbo run publint_ --filter="${{ matrix.package.package_name }}" --concurrency 16 --cache-dir=.cache/turbo | |
- name: | | |
release ${{ matrix.package.package_name }}@${{ matrix.package.package_version }} on npm | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | |
run: | | |
pnpm publish --access public --provenance ${{ matrix.package.package_path_from_root_package }}/dist/ |