plane icon indicating copy to clipboard operation
plane copied to clipboard

chore(repo): add docker smoke tests

Open lifeiscontent opened this issue 4 months ago • 1 comments

Description

Type of Change

  • [ ] Bug fix (non-breaking change which fixes an issue)
  • [ ] Feature (non-breaking change which adds functionality)
  • [ ] Improvement (change that would cause existing functionality to not work as expected)
  • [ ] Code refactoring
  • [ ] Performance improvements
  • [ ] Documentation update

Screenshots and Media (if applicable)

Test Scenarios

References

Summary by CodeRabbit

  • New Features

    • Introduced a CLI to run local Docker-based smoke tests for web, admin, space, and live apps with configurable ports/paths and selective services.
    • Added a build benchmarking tool to compare cold vs warm Docker builds and report timings and image sizes.
  • Tests

    • Automated smoke tests in CI run per app via a dynamic matrix based on changed paths, with logs, readiness checks, and automatic cleanup.
  • Chores

    • New CI workflow with path-based triggers, conditional execution, concurrency control, and timeouts for reliable PR and push validation.

lifeiscontent avatar Aug 19 '25 22:08 lifeiscontent

[!NOTE]

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

Walkthrough

Adds a Docker smoke-test GitHub Actions workflow that dynamically selects app targets based on changed paths, plus two Bash scripts: one to benchmark Docker builds (cold vs warm) and another to build, run, and probe containerized Next.js apps (web, admin, space, live) with up/down lifecycle and readiness checks.

Changes

Cohort / File(s) Summary
CI: Docker smoke workflow
.github/workflows/docker-smoke.yml
New workflow using dorny/paths-filter to compute a per-app test matrix (web/admin/space/live) and run smoke tests via scripts/smoke.sh; includes triggers, permissions, concurrency, and conditional execution based on changed paths.
Tooling: Build benchmarking
scripts/bench-builds.sh
New Bash script to benchmark cold vs warm Docker builds for web/admin/space/live; measures times, image sizes, cache usage; supports pruning modes, verbosity, and service selection.
Tooling: Smoke test harness
scripts/smoke.sh
New Bash script to build images, run containers on configured ports, probe readiness URLs, and clean up for web/admin/space/live; supports up/down commands, selective services, and environment overrides.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor Dev as Developer/PR
  participant GA as GitHub Actions
  participant PF as paths-filter
  participant GS as github-script
  participant SM as scripts/smoke.sh
  participant DK as Docker

  Dev->>GA: Push/PR triggers workflow
  GA->>PF: Detect changed paths
  PF-->>GA: Changed components map
  GA->>GS: Build matrix (targets with config)
  alt has_targets
    GA->>SM: smoke up (per target)
    SM->>DK: build images (DOCKER_BUILDKIT=1)
    SM->>DK: run containers (port mapping)
    SM->>SM: probe readiness (HTTP 2xx/3xx)
    alt failure
      SM->>DK: fetch container logs
      SM-->>GA: non-zero exit
    else success
      SM-->>GA: success for target
    end
    GA->>SM: smoke down (cleanup)
  else no targets
    GA-->>Dev: Skip smoke job
  end
sequenceDiagram
  autonumber
  actor Eng as Engineer
  participant BB as scripts/bench-builds.sh
  participant DK as Docker
  participant BX as buildx (optional)

  Eng->>BB: Run with selected services
  BB->>DK: Validate Docker availability
  opt prune (unless disabled)
    BB->>BX: buildx prune/du (if available)
    BB->>DK: docker system prune/df (fallback)
  end
  loop per service
    BB->>DK: Cold build (no-cache) -> time, size
    BB->>DK: Warm build (with cache) -> time
  end
  BB-->>Eng: Summary table (times, sizes, cache notes)

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • makeplane/plane#7322 — Adjusts Dockerfile copy paths to apps/*; related because the new scripts/workflow reference Dockerfiles under apps/.
  • makeplane/plane#7605 — Modifies apps/live/Dockerfile.live; directly tied to the workflow and scripts that build/run the live image.

Suggested reviewers

  • sriramveeraghanta
  • prateekshourya29

Poem

I thump my paw: containers rise,
Four apps puff steam beneath the skies.
Smoke says “ready!”—logs say “fine!”
Benchmarks tick in tidy time.
Ports all mapped, the burrow’s bright—
Hop, ship, nibble—green checks tonight! 🐇✨

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Description Check ⚠️ Warning The pull request description is empty aside from the template placeholders and does not include any of the required information such as a detailed description, selected type of change, test scenarios, or references, making it largely incomplete. Please fill out the PR description by providing a clear summary of the changes, marking the appropriate type of change, describing the tests performed, and adding any relevant issue or reference links as per the template.
✅ Passed checks (2 passed)
Check name Status Explanation
Title Check ✅ Passed The pull request title succinctly states the addition of Docker smoke tests and correctly reflects the primary focus of the changes without unnecessary detail or noise.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • [ ] Create PR with unit tests
  • [ ] Post copyable unit tests in a comment
  • [ ] Commit unit tests in branch feat/docker-frozen-lock

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 01dd81cd87628e244be3f771cf9c7a20adc0041b and 8b1d4311d3cc64d5826379048135559b0a795d2a.

📒 Files selected for processing (1)
  • .github/workflows/docker-smoke.yml (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Build and smoke test live
  • GitHub Check: Build and smoke test admin
  • GitHub Check: Build and smoke test space
  • GitHub Check: Build and smoke test web

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

coderabbitai[bot] avatar Aug 19 '25 22:08 coderabbitai[bot]