177 lines
6 KiB
YAML
177 lines
6 KiB
YAML
name: CI
|
|
on:
|
|
pull_request:
|
|
jobs:
|
|
build-and-deploy:
|
|
runs-on: ubuntu-latest
|
|
permissions: write-all
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@master
|
|
- name: Setup Java JDK
|
|
uses: actions/setup-java@v1.4.3
|
|
with:
|
|
java-version: 17
|
|
java-package: jre
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: 22
|
|
# cache: "pnpm"
|
|
- name: Install pnpm
|
|
uses: pnpm/action-setup@v4
|
|
- run: pnpm install
|
|
- run: pnpm build-single-file
|
|
- name: Store minecraft.html size
|
|
run: |
|
|
SIZE_BYTES=$(du -s dist/single/minecraft.html 2>/dev/null | cut -f1)
|
|
echo "SIZE_BYTES=$SIZE_BYTES" >> $GITHUB_ENV
|
|
- run: pnpm check-build
|
|
- name: Create zip package for size comparison
|
|
run: |
|
|
mkdir -p package
|
|
cp -r dist package/
|
|
cd package
|
|
zip -r ../self-host.zip .
|
|
- run: pnpm build-playground
|
|
# - run: pnpm build-storybook
|
|
- run: pnpm test-unit
|
|
- run: pnpm lint
|
|
|
|
- name: Parse Bundle Stats
|
|
run: |
|
|
GZIP_BYTES=$(du -s self-host.zip 2>/dev/null | cut -f1)
|
|
SIZE=$(echo "scale=2; $SIZE_BYTES/1024/1024" | bc)
|
|
GZIP_SIZE=$(echo "scale=2; $GZIP_BYTES/1024/1024" | bc)
|
|
echo "{\"total\": ${SIZE}, \"gzipped\": ${GZIP_SIZE}}" > /tmp/bundle-stats.json
|
|
|
|
# - name: Compare Bundle Stats
|
|
# id: compare
|
|
# uses: actions/github-script@v6
|
|
# env:
|
|
# GITHUB_TOKEN: ${{ secrets.GIST_TOKEN }}
|
|
# with:
|
|
# script: |
|
|
# const gistId = '${{ secrets.BUNDLE_STATS_GIST_ID }}';
|
|
|
|
# async function getGistContent() {
|
|
# const { data } = await github.rest.gists.get({
|
|
# gist_id: gistId,
|
|
# headers: {
|
|
# authorization: `token ${process.env.GITHUB_TOKEN}`
|
|
# }
|
|
# });
|
|
# return JSON.parse(data.files['bundle-stats.json'].content || '{}');
|
|
# }
|
|
|
|
# const content = await getGistContent();
|
|
# const baseStats = content['${{ github.event.pull_request.base.ref }}'];
|
|
# const newStats = require('/tmp/bundle-stats.json');
|
|
|
|
# const comparison = `minecraft.html (normal build gzip)\n${baseStats.total}MB (${baseStats.gzipped}MB compressed) -> ${newStats.total}MB (${newStats.gzipped}MB compressed)`;
|
|
# core.setOutput('stats', comparison);
|
|
|
|
# - run: pnpm tsx scripts/buildNpmReact.ts
|
|
- run: nohup pnpm prod-start &
|
|
- run: nohup pnpm test-mc-server &
|
|
- uses: cypress-io/github-action@v5
|
|
with:
|
|
install: false
|
|
- uses: actions/upload-artifact@v4
|
|
if: failure()
|
|
with:
|
|
name: cypress-images
|
|
path: cypress/screenshots/
|
|
# - run: node scripts/outdatedGitPackages.mjs
|
|
# if: ${{ github.event.pull_request.base.ref == 'release' }}
|
|
# env:
|
|
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
# - name: Store Bundle Stats
|
|
# if: github.event.pull_request.base.ref == 'next'
|
|
# uses: actions/github-script@v6
|
|
# env:
|
|
# GITHUB_TOKEN: ${{ secrets.GIST_TOKEN }}
|
|
# with:
|
|
# script: |
|
|
# const gistId = '${{ secrets.BUNDLE_STATS_GIST_ID }}';
|
|
|
|
# async function getGistContent() {
|
|
# const { data } = await github.rest.gists.get({
|
|
# gist_id: gistId,
|
|
# headers: {
|
|
# authorization: `token ${process.env.GITHUB_TOKEN}`
|
|
# }
|
|
# });
|
|
# return JSON.parse(data.files['bundle-stats.json'].content || '{}');
|
|
# }
|
|
|
|
# async function updateGistContent(content) {
|
|
# await github.rest.gists.update({
|
|
# gist_id: gistId,
|
|
# headers: {
|
|
# authorization: `token ${process.env.GITHUB_TOKEN}`
|
|
# },
|
|
# files: {
|
|
# 'bundle-stats.json': {
|
|
# content: JSON.stringify(content, null, 2)
|
|
# }
|
|
# }
|
|
# });
|
|
# }
|
|
|
|
# const stats = require('/tmp/bundle-stats.json');
|
|
# const content = await getGistContent();
|
|
# content['${{ github.event.pull_request.base.ref }}'] = stats;
|
|
# await updateGistContent(content);
|
|
|
|
# - name: Update PR Description
|
|
# uses: actions/github-script@v6
|
|
# with:
|
|
# script: |
|
|
# const { data: pr } = await github.rest.pulls.get({
|
|
# owner: context.repo.owner,
|
|
# repo: context.repo.repo,
|
|
# pull_number: context.issue.number
|
|
# });
|
|
|
|
# let body = pr.body || '';
|
|
# const statsMarker = '### Bundle Size';
|
|
# const comparison = '${{ steps.compare.outputs.stats }}';
|
|
|
|
# if (body.includes(statsMarker)) {
|
|
# body = body.replace(
|
|
# new RegExp(`${statsMarker}[^\n]*\n[^\n]*`),
|
|
# `${statsMarker}\n${comparison}`
|
|
# );
|
|
# } else {
|
|
# body += `\n\n${statsMarker}\n${comparison}`;
|
|
# }
|
|
|
|
# await github.rest.pulls.update({
|
|
# owner: context.repo.owner,
|
|
# repo: context.repo.repo,
|
|
# pull_number: context.issue.number,
|
|
# body
|
|
# });
|
|
# dedupe-check:
|
|
# runs-on: ubuntu-latest
|
|
# if: github.event.pull_request.head.ref == 'next'
|
|
# steps:
|
|
# - name: Checkout repository
|
|
# uses: actions/checkout@v2
|
|
|
|
# - name: Install pnpm
|
|
# run: npm install -g pnpm@9.0.4
|
|
|
|
# - name: Run pnpm dedupe
|
|
# run: pnpm dedupe
|
|
|
|
# - name: Check for changes
|
|
# run: |
|
|
# if ! git diff --exit-code --quiet pnpm-lock.yaml; then
|
|
# echo "pnpm dedupe introduced changes:"
|
|
# git diff --color=always pnpm-lock.yaml
|
|
# exit 1
|
|
# else
|
|
# echo "No changes detected after pnpm dedupe in pnpm-lock.yaml"
|
|
# fi
|