Skip to content

Fix supervisor builds #1790

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Mar 12, 2025
Merged

Fix supervisor builds #1790

merged 4 commits into from
Mar 12, 2025

Conversation

nicktrn
Copy link
Collaborator

@nicktrn nicktrn commented Mar 12, 2025

Fixes:

  • Recursive dockerignore patterns causing large local build context
  • Ensure the correct pnpm version is baked into the image
  • Reduce image size by 20%

Bonus: webapp node image is now configurable via build arg.

Summary by CodeRabbit

  • Chores
    • Improved configuration settings to streamline file exclusions and optimize build processes.
    • Enhanced dependency management and deployment steps for more efficient builds.
    • Enabled dynamic runtime version selection to simplify future updates and improve overall system flexibility.

Copy link

changeset-bot bot commented Mar 12, 2025

⚠️ No Changeset found

Latest commit: fb3725d

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

Copy link
Contributor

coderabbitai bot commented Mar 12, 2025

Walkthrough

The changes update several Docker-related configuration files. The .dockerignore file now uses broader patterns and reorganized exclusions, while the apps/supervisor/Containerfile has been modified to streamline the build process by consolidating dependency stages and integrating deployment commands. Additionally, the docker/Dockerfile now introduces an argument for the Node.js image version instead of hardcoding it. No public API or exported entity declarations were altered.

Changes

File(s) Summary
.dockerignore Restructured ignored patterns by replacing specific matches with broader patterns, adding new file types/directories, and reintroducing several previously ignored files.
apps/supervisor/Containerfile Modified build process: removed node_modules deletion, consolidated dependency stages into a deps-fetcher and dev-deps stages, and added a deployment command.
docker/Dockerfile Introduced an argument (NODE_IMAGE) for specifying the Node.js image version across multiple build stages, replacing hardcoded image strings.

Sequence Diagram(s)

sequenceDiagram
  participant Dev as Developer
  participant Builder as Supervisor Builder
  participant Deps as Deps-Fetcher
  participant Runner as Final Runner

  Dev->>Builder: Trigger build process
  Builder->>Deps: Execute "pnpm fetch --frozen-lockfile"
  Deps-->>Builder: Return fetched dependencies
  Builder->>Builder: Install dev dependencies ("pnpm install --frozen-lockfile --offline --ignore-scripts")
  Builder->>Builder: Build Supervisor App
  Builder->>Builder: Run "pnpm deploy --filter=supervisor --prod /prod/supervisor"
  Builder->>Runner: Copy build output to runner
  Runner->>Dev: Container image ready
Loading

Possibly related PRs

Suggested reviewers

  • matt-aitken

Poem

I'm a happy little bunny,
Hopping through code changes under the sun,
Patterns now are broader and clean,
Dependencies fetched with precision,
A docker tale of build and deploy fun,
Skipping and nibbles in every run,
🐇💻 Keep on coding, everyone!


📜 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 3a04759 and fb3725d.

📒 Files selected for processing (3)
  • .dockerignore (2 hunks)
  • apps/supervisor/Containerfile (2 hunks)
  • docker/Dockerfile (3 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: Analyze (javascript-typescript)
🔇 Additional comments (8)
.dockerignore (1)

1-43: Improved dockerignore patterns effectively reduce build context

The refactoring of dockerignore patterns to use recursive **/* syntax properly excludes files across all subdirectories instead of just the root directory. This directly addresses the PR objective of fixing recursive dockerignore patterns and should significantly reduce the build context size.

The additional patterns and better organization of ignored files will also contribute to the image size reduction goal mentioned in the PR.

docker/Dockerfile (2)

1-2: Well-implemented Node.js image configurability

Adding a build argument for the Node.js image version successfully implements the PR objective of making the webapp node image configurable. The default value includes both a specific version tag and SHA256 hash, following security best practices by ensuring reproducible builds.


3-3: Consistent use of NODE_IMAGE variable across all stages

The NODE_IMAGE argument is consistently applied to all stages that require the base Node.js image, ensuring the same version is used throughout the build process. This approach maintains build consistency while enabling version updates through a single parameter change.

Also applies to: 12-12, 58-58

apps/supervisor/Containerfile (5)

19-19: Proper pnpm initialization ensures correct version

Using corepack enable && corepack prepare --activate ensures the correct version of pnpm is properly initialized in the image, directly addressing one of the PR objectives. This approach leverages Node.js's built-in package manager versioning system rather than using external installation methods.


21-27: Optimized dependency management reduces image size

The new dependency management approach with separate deps-fetcher stage and mount caching is excellent:

  1. pnpm fetch downloads dependencies separately from installation
  2. Mount caching prevents dependencies from being stored in image layers
  3. --frozen-lockfile --offline ensures reproducible builds

This contributes significantly to the PR objective of reducing image size by 20%.


37-39: Efficient deployment strategy minimizes final image size

Using pnpm deploy --filter=supervisor --prod to create a minimal production artifact is an excellent approach. This extracts only the necessary production dependencies and built files, eliminating all development dependencies and build artifacts from the final image, which directly contributes to the image size reduction goal.


45-45: Simplified runner stage reduces image layers

The simplified runner stage that copies directly from the deployed artifacts rather than including all dependencies reduces the number of files in the final image. This change contributes to the image size reduction goal mentioned in the PR.


50-52: Preventing runtime pnpm downloads improves reliability

Adding an explicit pnpm version check during the build process prevents silent downloads at runtime, which improves reliability and startup time. This is a good practice to ensure that the required tools are present in the image rather than being downloaded on container startup.


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
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@nicktrn nicktrn merged commit 7f25697 into main Mar 12, 2025
8 of 14 checks passed
@nicktrn nicktrn deleted the fix/supervisor-builds branch March 12, 2025 16:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants