From b2bcc064fa3e474be04e2da52e285966ed8ca670 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Thu, 29 May 2025 15:36:43 +0200 Subject: [PATCH] Remove Uffizzi (#3011) --- .github/uffizzi/docker-compose.uffizzi.yml | 18 --- .github/workflows/uffizzi-build.yml | 128 --------------------- .github/workflows/uffizzi-preview.yml | 92 --------------- README.md | 4 - 4 files changed, 242 deletions(-) delete mode 100644 .github/uffizzi/docker-compose.uffizzi.yml delete mode 100644 .github/workflows/uffizzi-build.yml delete mode 100644 .github/workflows/uffizzi-preview.yml diff --git a/.github/uffizzi/docker-compose.uffizzi.yml b/.github/uffizzi/docker-compose.uffizzi.yml deleted file mode 100644 index b7a3beb3a..000000000 --- a/.github/uffizzi/docker-compose.uffizzi.yml +++ /dev/null @@ -1,18 +0,0 @@ -version: "3" -x-uffizzi: - ingress: - service: livebook - port: 8080 -services: - livebook: - image: "${APP_IMAGE}" - environment: - - LIVEBOOK_PORT=8080 - - LIVEBOOK_TOKEN_ENABLED=false - ports: - - 8080:8080 - restart: unless-stopped - deploy: - resources: - limits: - memory: 2000M diff --git a/.github/workflows/uffizzi-build.yml b/.github/workflows/uffizzi-build.yml deleted file mode 100644 index 1ef4e4f16..000000000 --- a/.github/workflows/uffizzi-build.yml +++ /dev/null @@ -1,128 +0,0 @@ -name: Preview (build) -on: - pull_request: - types: [opened, synchronize, reopened, closed] - -jobs: - build-application: - name: Build PR image - runs-on: ubuntu-latest - if: ${{ github.event_name != 'pull_request' || github.event.action != 'closed' }} - outputs: - tags: ${{ steps.meta.outputs.tags }} - steps: - - name: Checkout git repo - uses: actions/checkout@v4 - - run: | - . versions - echo "elixir=$elixir" >> $GITHUB_ENV - echo "otp=$otp" >> $GITHUB_ENV - echo "ubuntu=$ubuntu" >> $GITHUB_ENV - # --- START build assets - - name: Install Erlang & Elixir - uses: erlef/setup-beam@v1 - with: - otp-version: ${{ env.otp }} - elixir-version: ${{ env.elixir }} - - name: Cache Mix - uses: actions/cache@v4 - with: - path: | - deps - _build - key: ${{ runner.os }}-mix-${{ env.elixir }}-${{ env.otp }}-${{ hashFiles('**/mix.lock') }} - restore-keys: | - ${{ runner.os }}-mix-${{ env.elixir }}-${{ env.otp }}- - # Note: we need to get Phoenix and LV because package.json points to them directly - - name: Install mix dependencies - run: mix deps.get - - name: Install Node - uses: actions/setup-node@v4 - with: - node-version: "20.x" - - name: Cache npm dependencies - uses: actions/cache@v4 - with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-node- - - name: Clean generated assets - run: rm -rf static/{js,css} - - name: Install npm dependencies - run: npm ci --prefix assets - - name: Build assets - run: npm run deploy --prefix assets - # --- END build assets - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - name: Generate UUID image name - id: uuid - run: echo "UUID_TAG_APP=livebook-$(uuidgen --time)" >> $GITHUB_ENV - - name: Docker metadata - id: meta - uses: docker/metadata-action@v3 - with: - images: registry.uffizzi.com/${{ env.UUID_TAG_APP }} - tags: type=raw,value=60d - - name: Build and Push Image to registry.uffizzi.com ephemeral registry - uses: docker/build-push-action@v2 - with: - push: true - context: . - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - file: ./Dockerfile - cache-from: type=gha - cache-to: type=gha,mode=max - build-args: | - BASE_IMAGE=hexpm/elixir:${{ env.elixir }}-erlang-${{ env.otp }}-ubuntu-${{ env.ubuntu }} - VARIANT=default - - render-compose-file: - name: Render Docker Compose file - # Pass output of this workflow to another triggered by `workflow_run` event. - runs-on: ubuntu-latest - needs: - - build-application - steps: - - name: Checkout git repo - uses: actions/checkout@v4 - - name: Render Compose File - run: | - APP_IMAGE=$(echo ${{ needs.build-application.outputs.tags }}) - export APP_IMAGE - # Render simple template from environment variables. - envsubst < ./.github/uffizzi/docker-compose.uffizzi.yml > docker-compose.rendered.yml - cat docker-compose.rendered.yml - - name: Serialize PR Event to File - run: | - cat << EOF > event.json - ${{ toJSON(github.event) }} - EOF - - name: Upload Rendered Compose File and PR Event as Artifact - uses: actions/upload-artifact@v4 - with: - name: preview-spec - path: | - docker-compose.rendered.yml - event.json - retention-days: 2 - - delete-preview: - name: Mark preview for deletion - runs-on: ubuntu-latest - if: ${{ github.event.action == 'closed' }} - steps: - # If this PR is closing, we will not render a compose file nor pass it to the next workflow. - - name: Serialize PR Event to File - run: | - cat << EOF > event.json - ${{ toJSON(github.event) }} - EOF - - name: Upload PR Event as Artifact - uses: actions/upload-artifact@v4 - with: - name: preview-spec - path: event.json - retention-days: 2 diff --git a/.github/workflows/uffizzi-preview.yml b/.github/workflows/uffizzi-preview.yml deleted file mode 100644 index 81e8794b2..000000000 --- a/.github/workflows/uffizzi-preview.yml +++ /dev/null @@ -1,92 +0,0 @@ -name: Preview (deploy) - -on: - workflow_run: - workflows: - - "Preview (build)" - types: - - completed - -jobs: - cache-compose-file: - name: Cache Docker Compose file - runs-on: ubuntu-latest - if: ${{ github.event.workflow_run.conclusion == 'success' }} - outputs: - compose-file-cache-key: ${{ steps.hash.outputs.COMPOSE_FILE_HASH }} - git-ref: ${{ steps.event.outputs.GIT_REF }} - pr-number: ${{ steps.event.outputs.PR_NUMBER }} - action: ${{ steps.event.outputs.ACTION }} - steps: - - name: "Download artifacts" - # Fetch output (zip archive) from the workflow run that triggered this workflow. - uses: actions/github-script@v6 - with: - script: | - let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ - owner: context.repo.owner, - repo: context.repo.repo, - run_id: context.payload.workflow_run.id, - }); - let matchArtifact = allArtifacts.data.artifacts.filter((artifact) => { - return artifact.name == "preview-spec" - })[0]; - if (matchArtifact === undefined) { - throw TypeError('Build Artifact not found!'); - } - let download = await github.rest.actions.downloadArtifact({ - owner: context.repo.owner, - repo: context.repo.repo, - artifact_id: matchArtifact.id, - archive_format: 'zip', - }); - let fs = require('fs'); - fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/preview-spec.zip`, Buffer.from(download.data)); - - name: "Unzip artifact" - run: unzip preview-spec.zip event.json - - name: Read Event into ENV - id: event - run: | - echo PR_NUMBER=$(jq '.number | tonumber' < event.json) >> $GITHUB_OUTPUT - echo ACTION=$(jq --raw-output '.action | tostring | [scan("\\w+")][0]' < event.json) >> $GITHUB_OUTPUT - echo GIT_REF=$(jq --raw-output '.pull_request.head.sha | tostring | [scan("\\w+")][0]' < event.json) >> $GITHUB_OUTPUT - - name: Hash Rendered Compose File - id: hash - # If the previous workflow was triggered by a PR close event, we will not have a compose file artifact. - if: ${{ steps.event.outputs.ACTION != 'closed' }} - run: | - unzip preview-spec.zip docker-compose.rendered.yml - echo "COMPOSE_FILE_HASH=$(md5sum docker-compose.rendered.yml | awk '{ print $1 }')" >> $GITHUB_OUTPUT - - name: Cache Rendered Compose File - if: ${{ steps.event.outputs.ACTION != 'closed' }} - uses: actions/cache@v4 - with: - path: docker-compose.rendered.yml - key: ${{ steps.hash.outputs.COMPOSE_FILE_HASH }} - - - name: DEBUG - Print Job Outputs - if: ${{ runner.debug }} - run: | - echo "PR number: ${{ steps.event.outputs.PR_NUMBER }}" - echo "Git Ref: ${{ steps.event.outputs.GIT_REF }}" - echo "Action: ${{ steps.event.outputs.ACTION }}" - echo "Compose file hash: ${{ steps.hash.outputs.COMPOSE_FILE_HASH }}" - cat event.json - - deploy-uffizzi-preview: - name: Run Uffizzi deployment - needs: - - cache-compose-file - if: ${{ github.event.workflow_run.conclusion == 'success' }} - uses: UffizziCloud/preview-action/.github/workflows/reusable.yaml@v2 - with: - # If this workflow was triggered by a PR close event, cache-key will be an empty string - # and this reusable workflow will delete the preview deployment. - compose-file-cache-key: ${{ needs.cache-compose-file.outputs.compose-file-cache-key }} - compose-file-cache-path: docker-compose.rendered.yml - server: https://app.uffizzi.com - pr-number: ${{ needs.cache-compose-file.outputs.pr-number }} - permissions: - contents: read - pull-requests: write - id-token: write diff --git a/README.md b/README.md index b2bfbacaa..d0b2b5524 100644 --- a/README.md +++ b/README.md @@ -342,10 +342,6 @@ mix phx.server mix test ``` -### Acknowledgements - -Thank you to [Uffizzi](https://www.uffizzi.com) for providing ephemeral environments to preview pull requests. - ### Desktop app builds For macOS, run: