Skip to content

Commit 8868cca

Browse files
authored
Add configurable dockerfile_path to applications (#153)
1 parent 7afe499 commit 8868cca

5 files changed

Lines changed: 55 additions & 11 deletions

File tree

cabotage/celery/tasks/build.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -539,25 +539,25 @@ def file_path(filename):
539539
return os.path.join(image.application.subdirectory, filename)
540540
return filename
541541

542+
dockerfile_candidates = ["Dockerfile.cabotage", "Dockerfile"]
543+
if image.application.dockerfile_path:
544+
dockerfile_candidates = [image.application.dockerfile_path]
545+
542546
dockerfile_name = None
543-
dockerfile_body = _fetch_github_file(
544-
image.application.github_repository,
545-
image.commit_sha,
546-
access_token=access_token,
547-
filename=file_path("Dockerfile.cabotage"),
548-
)
549-
dockerfile_name = "Dockerfile.cabotage"
550-
if dockerfile_body is None:
547+
dockerfile_body = None
548+
for candidate in dockerfile_candidates:
551549
dockerfile_body = _fetch_github_file(
552550
image.application.github_repository,
553551
image.commit_sha,
554552
access_token=access_token,
555-
filename=file_path("Dockerfile"),
553+
filename=file_path(candidate),
556554
)
557-
dockerfile_name = "Dockerfile"
555+
if dockerfile_body is not None:
556+
dockerfile_name = candidate
557+
break
558558
if dockerfile_body is None:
559559
raise BuildError(
560-
"No Dockerfile.cabotage or Dockerfile found in root of "
560+
f"No Dockerfile found in "
561561
f"{git_ref(image.application.github_repository, image.commit_sha)}"
562562
)
563563

cabotage/client/templates/user/project_application_settings.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ <h2>Deployment Automation</h2>
2525
{{ form_field(form.github_repository) }}
2626
{{ form_field(form.auto_deploy_branch) }}
2727
{{ form_field(form.subdirectory) }}
28+
{{ form_field(form.dockerfile_path) }}
2829
{{ form_field(form.github_repository_is_private) }}
2930
{{ form_field(form.github_app_installation_id) }}
3031
{{ form_field(form.github_environment_name ) }}

cabotage/server/models/projects.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,11 @@ class Application(db.Model, Timestamp):
192192
nullable=True,
193193
)
194194

195+
dockerfile_path = db.Column(
196+
db.Text(),
197+
nullable=True,
198+
)
199+
195200
auto_deploy_branch = db.Column(
196201
db.Text(),
197202
nullable=True,

cabotage/server/user/forms.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,14 @@ class EditApplicationSettingsForm(FlaskForm):
262262
"Subdirectory",
263263
description="Subdirectory to build out of",
264264
)
265+
dockerfile_path = StringField(
266+
"Dockerfile Path",
267+
description="Custom path to Dockerfile (e.g. docker/Dockerfile), falls back to Dockerfile.cabotage then Dockerfile",
268+
filters=[
269+
(lambda x: x.strip() if (x and isinstance(x, str)) else x),
270+
(lambda x: x if x else None),
271+
],
272+
)
265273
github_app_installation_id = StringField(
266274
"GitHub Application Installation ID",
267275
description="Application Installation ID from GitHub",
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
"""Add configurable dockerfile_path to applications
2+
3+
Revision ID: a1b2c3d4e5f6
4+
Revises: c2ae2e19e1f2
5+
Create Date: 2026-02-17 20:30:00.000000
6+
7+
"""
8+
9+
from alembic import op
10+
import sqlalchemy as sa
11+
12+
revision = "a1b2c3d4e5f6"
13+
down_revision = "c2ae2e19e1f2"
14+
branch_labels = None
15+
depends_on = None
16+
17+
18+
def upgrade():
19+
op.add_column(
20+
"project_applications", sa.Column("dockerfile_path", sa.Text(), nullable=True)
21+
)
22+
op.add_column(
23+
"project_applications_version",
24+
sa.Column("dockerfile_path", sa.Text(), autoincrement=False, nullable=True),
25+
)
26+
27+
28+
def downgrade():
29+
op.drop_column("project_applications_version", "dockerfile_path")
30+
op.drop_column("project_applications", "dockerfile_path")

0 commit comments

Comments
 (0)