From a4e45ab2b83f43af6d293dd66d3a59f8751604c8 Mon Sep 17 00:00:00 2001 From: Firq Date: Fri, 1 Nov 2024 16:34:51 +0100 Subject: [PATCH] Unlighthouse rework with docker --- .forgejo/workflows/build_preview.yml | 15 ++++ .forgejo/workflows/unlighthouse.yml | 126 +++++++++++++-------------- Dockerfile.reports | 6 ++ package.json | 2 +- unlighthouse.config.ts | 26 +++++- 5 files changed, 106 insertions(+), 69 deletions(-) create mode 100644 Dockerfile.reports diff --git a/.forgejo/workflows/build_preview.yml b/.forgejo/workflows/build_preview.yml index 727892d..36d6eb5 100644 --- a/.forgejo/workflows/build_preview.yml +++ b/.forgejo/workflows/build_preview.yml @@ -80,3 +80,18 @@ jobs: dockge status fgo-ta-com-preview dockge update fgo-ta-com-preview dockge status fgo-ta-com-preview + + run-unlighthouse: + needs: [ build-site ] + if: success() + runs-on: docker + steps: + - name: Launch workflow + run: | + payload="{\"ref\": \"${GITHUB_REF_NAME}\", \"inputs\": { \"containertag\": \"${GITHUB_REF_NAME}\" }}" + curl -X "POST" \ + -H "accept: application/json" \ + -H "Content-Type: application/json" \ + -H "Authorization: token ${GITHUB_TOKEN}" \ + -d "${payload}" \ + "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/actions/workflows/unlighthouse.yml/dispatches" -v diff --git a/.forgejo/workflows/unlighthouse.yml b/.forgejo/workflows/unlighthouse.yml index 4235b01..1222bce 100644 --- a/.forgejo/workflows/unlighthouse.yml +++ b/.forgejo/workflows/unlighthouse.yml @@ -1,17 +1,36 @@ +name: Run unlighthouse-tests [Downstream pipeline] +run-name: Run unlighthouse-tests [Downstream pipeline] for version ${{ inputs.containertag }} on: - push: - tags: - - '[0-9]+\.[0-9]+\.[0-9]+-ulh\.[0-9]+' + workflow_dispatch: + inputs: + containertag: + description: "Tag of the container to test" + default: "preview" + type: "string" jobs: unlighthouse: runs-on: docker - container: forgejo.neshweb.net/ci-docker-images/unlighthouse:0.2.1 + container: + image: forgejo.neshweb.net/ci-docker-images/unlighthouse:0.3.0 + services: + website: + image: forgejo.neshweb.net/firq/fgo-ta-com-website:${{ inputs.containertag }} + options: >- + --workdir / steps: - name: Checkout repository uses: https://code.forgejo.org/actions/checkout@v3 + - name: Check availability + run: | + while [ "$(curl -o /dev/null -s -w '%{http_code}' http://localhost:8081/)" -ne 200 ]; + do echo "Waiting..."; + sleep 5; + done; - name: Run unlighthouse - run: unlighthouse-ci --site "https://preview.fgo-ta.com/" --disable-dynamic-sampling + run: unlighthouse-ci --site "http://localhost:8081/" + - name: Replace URLs + run: find ./unlighthouse-reports -type f | xargs sed -i "s|http://localhost:8081|https://preview.fgo-ta.com|g"; - name: Prepare artifacts run: cp serve.json unlighthouse-reports - name: Upload reports @@ -19,79 +38,54 @@ jobs: with: name: unlighthouse-reports path: unlighthouse-reports/ + - name: Upload Dockerfile + uses: actions/upload-artifact@v3 + with: + name: dockerfile + path: Dockerfile.reports - deploy-unlighthouse-files: + build-site: needs: [ unlighthouse ] if: success() - runs-on: docker - env: - DEPLOY_USER: ${{ secrets.DEPLOY_USER }} - DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} + runs-on: dind steps: - - name: Install and update ssh + rsync - run: | - which rsync || ( apt update -y && apt install rsync -y) - which ssh-agent || ( apt update -y && apt install openssh-client -y) + - name: Downloading static site artifacts + uses: actions/download-artifact@v3 + with: + name: dockerfile - name: Downloading static site artifacts uses: actions/download-artifact@v3 with: name: unlighthouse-reports - path: public - - name: Install SSH Key - uses: https://github.com/shimataro/ssh-key-action@v2 + path: reports + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Log into Docker Package Registry + uses: docker/login-action@v3 with: - key: ${{ secrets.SSH_PRIVATE_KEY }} - known_hosts: unnecessary - - name: Adding Known Hosts - run: ssh-keyscan -H ${{ secrets.DEPLOY_HOST }} >> ~/.ssh/known_hosts - - name: Stop screen session, delete old files - uses: https://github.com/appleboy/ssh-action@master + registry: forgejo.neshweb.net + username: ${{ secrets.FORGEJO_USERNAME }} + password: ${{ secrets.FORGEJO_TOKEN }} + - name: Build and push to Docker Package Registry + uses: docker/build-push-action@v5 with: - host: ${{ env.DEPLOY_HOST }} - username: ${{ env.DEPLOY_USER }} - key: ${{ secrets.SSH_PRIVATE_KEY }} - script: | - screen -X -S fgo_ta_com-unlighthouse kill - rm -r -f fgo_ta_com/unlighthouse/* - - name: Copy files using rsync - run: rsync -az --stats public/* ${{ env.DEPLOY_USER }}@${{ env.DEPLOY_HOST }}:~/fgo_ta_com/unlighthouse - - name: Check files on deploy target - uses: https://github.com/appleboy/ssh-action@master - with: - host: ${{ env.DEPLOY_HOST }} - username: ${{ env.DEPLOY_USER }} - key: ${{ secrets.SSH_PRIVATE_KEY }} - script: | - cd fgo_ta_com - find unlighthouse -maxdepth 1 -printf "%p\n" + context: . + file: Dockerfile.reports + push: true + tags: forgejo.neshweb.net/firq/fgo-ta-com-website-unlighthouse:latest - deploy-unlighthouse-site: - needs: [ deploy-unlighthouse-files ] + auto-deploy-dockge: + needs: [ build-site ] if: success() runs-on: docker - env: - DEPLOY_USER: ${{ secrets.DEPLOY_USER }} - DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} + container: forgejo.neshweb.net/firq/dockge-cli:0.1.2 steps: - - name: Install and update ssh + rsync + - name: Configure Dockge CLI run: | - which rsync || ( apt update -y && apt install rsync -y) - which ssh-agent || ( apt update -y && apt install openssh-client -y) - - name: Install SSH Key - uses: https://github.com/shimataro/ssh-key-action@v2 - with: - key: ${{ secrets.SSH_PRIVATE_KEY }} - known_hosts: unnecessary - - name: Adding Known Hosts - run: ssh-keyscan -H ${{ secrets.DEPLOY_HOST }} >> ~/.ssh/known_hosts - - name: Start new screen session - uses: https://github.com/appleboy/ssh-action@master - with: - host: ${{ env.DEPLOY_HOST }} - username: ${{ env.DEPLOY_USER }} - key: ${{ secrets.SSH_PRIVATE_KEY }} - script: | - PATH="$HOME/.local/bin:$PATH" - screen -ls | grep 'fgo_ta_com-unlighthouse' | awk '{print $1}' | xargs -I % -t screen -X -S % quit - cd fgo_ta_com - screen -S fgo_ta_com-unlighthouse -dm serve unlighthouse/ -p ${{ secrets.UNLIGHTHOUSE_DEPLOY_PORT }} + dockge host '${{ vars.DOCKGE_HOST }}' + dockge login --user '${{ secrets.DOCKGE_USER }}' --password '${{ secrets.DOCKGE_CREDENTIAL }}' + - name: Check status and redeploy + run: | + dockge status fgo-ta-com-unlighthouse + dockge update fgo-ta-com-unlighthouse + dockge status fgo-ta-com-unlighthouse diff --git a/Dockerfile.reports b/Dockerfile.reports new file mode 100644 index 0000000..f745d5e --- /dev/null +++ b/Dockerfile.reports @@ -0,0 +1,6 @@ +FROM forgejo.neshweb.net/ci-docker-images/website-serve:2 AS runtime + +ADD reports /public + +EXPOSE 8081 +CMD serve public/ -p 8081 diff --git a/package.json b/package.json index 672603c..0420254 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "fgo-ta-com-website", "type": "module", - "version": "0.2.2-pre.21", + "version": "0.2.2-pre.22", "scripts": { "dev": "astro dev", "start": "astro dev", diff --git a/unlighthouse.config.ts b/unlighthouse.config.ts index 4d2881a..6f7d007 100644 --- a/unlighthouse.config.ts +++ b/unlighthouse.config.ts @@ -1,10 +1,32 @@ export default { + lighthouseOptions: { + throttlingMethod: "devtools", + throttling: { + cpuSlowdownMultiplier: 4, + requestLatencyMs: 150, + downloadThroughputKbps: 1638.4, + uploadThroughputKbps: 1638.4, + }, + screenEmulation: { + width: 412, + height: 823, + deviceScaleFactor: 1.75, + } + }, puppeteerOptions: { - args: ["--no-sandbox", "--disable-setuid-sandbox"], + args: [ + "--no-sandbox", + "--disable-setuid-sandbox" + ], }, ci: { budget: 50, - buildStatic: true + buildStatic: true, + }, + scanner: { + sitemap: true, + dynamicSampling: false, + samples: 3, }, outputPath: "unlighthouse-reports", }