Skip to content

Commit d7eebc0

Browse files
committed
refactor: upgrade compose-go
1 parent f607b5e commit d7eebc0

88 files changed

Lines changed: 16833 additions & 153 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

cmd/init.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,13 @@ func (cmd *InitCmd) initDockerCompose(f factory.Factory, composePath string) err
490490
return err
491491
}
492492

493+
projectName, _, err := getProjectName()
494+
if err != nil {
495+
return err
496+
}
497+
498+
project.Name = projectName
499+
493500
// Prompt user for entrypoints for each container with sync folders.
494501
for idx, service := range project.Services {
495502
localPaths := compose.GetServiceSyncPaths(project, service)

go.mod

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,18 @@ require (
77
github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d
88
github.com/blang/semver v3.5.1+incompatible
99
github.com/bmatcuk/doublestar v1.1.1
10+
github.com/compose-spec/compose-go v1.2.2
1011
github.com/creack/pty v1.1.15
1112
github.com/docker/cli v20.10.0-beta1.0.20201029214301-1d20b15adc38+incompatible
1213
github.com/docker/distribution v2.7.1+incompatible
1314
github.com/docker/docker v20.10.5+incompatible
1415
github.com/docker/go-connections v0.4.0
15-
github.com/docker/go-metrics v0.0.1 // indirect
1616
github.com/evanphx/json-patch v4.12.0+incompatible
1717
github.com/evanphx/json-patch/v5 v5.1.0
1818
github.com/ghodss/yaml v1.0.0
1919
github.com/gliderlabs/ssh v0.3.3
2020
github.com/google/uuid v1.1.2
2121
github.com/gorilla/websocket v1.4.2
22-
github.com/imdario/mergo v0.3.12 // indirect
2322
github.com/inconshreveable/go-update v0.0.0-20160112193335-8152e7eb6ccf // indirect
2423
github.com/jessevdk/go-flags v1.4.0
2524
github.com/joho/godotenv v1.3.0

go.sum

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ github.com/aws/aws-sdk-go v1.20.6/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN
184184
github.com/aws/aws-sdk-go v1.25.11/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
185185
github.com/aws/aws-sdk-go v1.27.1/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
186186
github.com/aws/aws-sdk-go v1.31.6/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0=
187+
github.com/aws/aws-sdk-go v1.34.9/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0=
187188
github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I=
188189
github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM=
189190
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
@@ -210,6 +211,7 @@ github.com/bombsimon/wsl/v3 v3.0.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2
210211
github.com/bombsimon/wsl/v3 v3.1.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc=
211212
github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g=
212213
github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk=
214+
github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk=
213215
github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8=
214216
github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50=
215217
github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE=
@@ -236,6 +238,8 @@ github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnht
236238
github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
237239
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
238240
github.com/codahale/hdrhistogram v0.0.0-20160425231609-f8ad88b59a58/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
241+
github.com/compose-spec/compose-go v1.2.2 h1:y1dwl3KUTBnWPVur6EZno9zUIum6Q87/F5keljnGQB4=
242+
github.com/compose-spec/compose-go v1.2.2/go.mod h1:pAy7Mikpeft4pxkFU565/DRHEbDfR84G6AQuiL+Hdg8=
239243
github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko=
240244
github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM=
241245
github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340 h1:9atoWyI9RtXFwf7UDbme/6M8Ud0rFrx+Q3ZWgSnsxtw=
@@ -303,6 +307,8 @@ github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11
303307
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
304308
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
305309
github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8=
310+
github.com/distribution/distribution/v3 v3.0.0-20210316161203-a01c71e2477e h1:n81KvOMrLZa+VWHwST7dun9f0G98X3zREHS1ztYzZKU=
311+
github.com/distribution/distribution/v3 v3.0.0-20210316161203-a01c71e2477e/go.mod h1:xpWTC2KnJMiDLkoawhsPQcXjvwATEBcbq0xevG2YR9M=
306312
github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
307313
github.com/docker/cli v0.0.0-20190925022749-754388324470/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
308314
github.com/docker/cli v0.0.0-20191017083524-a8ff7f821017/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
@@ -516,6 +522,7 @@ github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunE
516522
github.com/golangci/revgrep v0.0.0-20180812185044-276a5c0a1039/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4=
517523
github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ=
518524
github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk=
525+
github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0=
519526
github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
520527
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
521528
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
@@ -592,6 +599,7 @@ github.com/goreleaser/nfpm v1.2.1/go.mod h1:TtWrABZozuLOttX2uDlYyECfQX7x5XYkVxhj
592599
github.com/goreleaser/nfpm v1.3.0/go.mod h1:w0p7Kc9TAUgWMyrub63ex3M2Mgw88M4GZXoTq5UCb40=
593600
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
594601
github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
602+
github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q=
595603
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
596604
github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
597605
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
@@ -773,6 +781,8 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Ky
773781
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
774782
github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
775783
github.com/mattn/go-shellwords v1.0.10/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y=
784+
github.com/mattn/go-shellwords v1.0.12 h1:M2zGm7EW6UQJvDeQxo4T51eKPurbeFbe8WtebGE2xrk=
785+
github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y=
776786
github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
777787
github.com/mattn/go-zglob v0.0.1/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo=
778788
github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw=
@@ -798,6 +808,8 @@ github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:F
798808
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
799809
github.com/mitchellh/mapstructure v1.3.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
800810
github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
811+
github.com/mitchellh/mapstructure v1.4.3 h1:OVowDSCllw/YjdLkam3/sm7wEtOy59d8ndGgCcyj8cs=
812+
github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
801813
github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A=
802814
github.com/moby/buildkit v0.8.2 h1:kvb0cLWss4mOhCxcXSTENzzA+t1JR1eIyXFhDrI+73g=
803815
github.com/moby/buildkit v0.8.2/go.mod h1:5PZi7ALzuxG604ggYSeN+rzC+CyJscuXS7WetulJr1Y=
@@ -1125,9 +1137,13 @@ github.com/xanzy/go-gitlab v0.31.0/go.mod h1:sPLojNBn68fMUWSxIJtdVVIP8uSBYqesTfD
11251137
github.com/xanzy/go-gitlab v0.32.0/go.mod h1:sPLojNBn68fMUWSxIJtdVVIP8uSBYqesTfDUseX11Ug=
11261138
github.com/xanzy/ssh-agent v0.2.1 h1:TCbipTQL2JiiCprBWx9frJ2eJlCYT00NmctrHxVAr70=
11271139
github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4=
1140+
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c=
11281141
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
1142+
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0=
11291143
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
11301144
github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs=
1145+
github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74=
1146+
github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
11311147
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos=
11321148
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
11331149
github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg=
@@ -1202,6 +1218,7 @@ golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8U
12021218
golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
12031219
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
12041220
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
1221+
golang.org/x/crypto v0.0.0-20200128174031-69ecbb4d6d5d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
12051222
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
12061223
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
12071224
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
@@ -1747,8 +1764,9 @@ gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C
17471764
gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
17481765
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
17491766
gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk=
1750-
gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0=
17511767
gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8=
1768+
gotest.tools/v3 v3.1.0 h1:rVV8Tcg/8jHUkPUorwjaMTtemIMVXfIPKiOqnhEhakk=
1769+
gotest.tools/v3 v3.1.0/go.mod h1:fHy7eyTmJFO5bQbUsEGQ1v4m2J3Jz9eWL54TP2/ZuYQ=
17521770
grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o=
17531771
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
17541772
honnef.co/go/tools v0.0.0-20180920025451-e3ad64cb4ed3/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

pkg/devspace/compose/deployment.go

Lines changed: 33 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -38,41 +38,43 @@ func (cb *configBuilder) AddDeployment(dockerCompose *composetypes.Project, serv
3838
}
3939

4040
ports := []interface{}{}
41-
if len(service.Ports) > 0 {
42-
for _, port := range service.Ports {
43-
var protocol string
44-
switch port.Protocol {
45-
case "tcp":
46-
protocol = string(v1.ProtocolTCP)
47-
case "udp":
48-
protocol = string(v1.ProtocolUDP)
49-
default:
50-
return fmt.Errorf("invalid protocol %s", port.Protocol)
51-
}
52-
53-
if port.Published == 0 {
54-
cb.log.Warnf("Unassigned port ranges are not supported: %s", port.Target)
55-
continue
56-
}
57-
58-
ports = append(ports, map[string]interface{}{
59-
"port": int(port.Published),
60-
"containerPort": int(port.Target),
61-
"protocol": protocol,
62-
})
41+
for _, port := range service.Ports {
42+
var protocol string
43+
switch port.Protocol {
44+
case "tcp":
45+
protocol = string(v1.ProtocolTCP)
46+
case "udp":
47+
protocol = string(v1.ProtocolUDP)
48+
default:
49+
return fmt.Errorf("invalid protocol %s", port.Protocol)
50+
}
51+
52+
// fmt.Println(port.Published)
53+
if port.Published == "" {
54+
cb.log.Warnf("Unassigned ports are not supported: %s", port.Target)
55+
continue
56+
}
57+
58+
portNumber, err := strconv.Atoi(port.Published)
59+
if err != nil {
60+
return err
6361
}
62+
63+
ports = append(ports, map[string]interface{}{
64+
"port": portNumber,
65+
"containerPort": int(port.Target),
66+
"protocol": protocol,
67+
})
6468
}
6569

66-
if len(service.Expose) > 0 {
67-
for _, port := range service.Expose {
68-
intPort, err := strconv.Atoi(port)
69-
if err != nil {
70-
return fmt.Errorf("expected integer for port number: %s", err.Error())
71-
}
72-
ports = append(ports, map[string]interface{}{
73-
"port": intPort,
74-
})
70+
for _, port := range service.Expose {
71+
intPort, err := strconv.Atoi(port)
72+
if err != nil {
73+
return fmt.Errorf("expected integer for port number: %s", err.Error())
7574
}
75+
ports = append(ports, map[string]interface{}{
76+
"port": intPort,
77+
})
7678
}
7779

7880
if len(ports) > 0 {

pkg/devspace/compose/dev.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"os"
66
"path/filepath"
7+
"strconv"
78
"strings"
89

910
composetypes "github.com/compose-spec/compose-go/types"
@@ -15,14 +16,20 @@ func (cb *configBuilder) AddDev(service composetypes.ServiceConfig) error {
1516

1617
devPorts := []*latest.PortMapping{}
1718
for _, port := range service.Ports {
19+
1820
portMapping := &latest.PortMapping{}
1921

20-
if port.Published == 0 {
22+
if port.Published == "" {
2123
cb.log.Warnf("Unassigned port ranges are not supported: %s", port.Target)
2224
continue
2325
}
2426

25-
if port.Published != port.Target {
27+
portNumber, err := strconv.Atoi(port.Published)
28+
if err != nil {
29+
return err
30+
}
31+
32+
if portNumber != int(port.Target) {
2633
portMapping.Port = fmt.Sprint(port.Published) + ":" + fmt.Sprint(port.Target)
2734
} else {
2835
portMapping.Port = fmt.Sprint(port.Published)

pkg/devspace/compose/manager.go

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package compose
22

33
import (
4+
"fmt"
45
"io/ioutil"
56
"os"
67
"path/filepath"
8+
"strconv"
9+
"strings"
710

811
composeloader "github.com/compose-spec/compose-go/loader"
912
composetypes "github.com/compose-spec/compose-go/types"
@@ -47,6 +50,19 @@ func LoadDockerComposeProject(path string) (*composetypes.Project, error) {
4750
return nil, err
4851
}
4952

53+
// Expand service ports
54+
for idx, service := range project.Services {
55+
ports := []composetypes.ServicePortConfig{}
56+
for _, port := range service.Ports {
57+
expandedPorts, err := expandPublishedPortRange(port)
58+
if err != nil {
59+
return nil, err
60+
}
61+
ports = append(ports, expandedPorts...)
62+
}
63+
project.Services[idx].Ports = ports
64+
}
65+
5066
return project, nil
5167
}
5268

@@ -69,7 +85,6 @@ func NewComposeManager(project *composetypes.Project) ComposeManager {
6985
}
7086

7187
func (cm *composeManager) Load(log log.Logger) error {
72-
7388
dependentsMap, err := calculateDependentsMap(cm.project)
7489
if err != nil {
7590
return err
@@ -187,3 +202,37 @@ func calculateDependentsMap(dockerCompose *composetypes.Project) (map[string][]s
187202
})
188203
return tree, err
189204
}
205+
206+
func expandPublishedPortRange(port composetypes.ServicePortConfig) ([]composetypes.ServicePortConfig, error) {
207+
if !strings.Contains(port.Published, "-") {
208+
return []composetypes.ServicePortConfig{port}, nil
209+
}
210+
211+
publishedRange := strings.Split(port.Published, "-")
212+
if len(publishedRange) > 2 {
213+
return nil, fmt.Errorf("invalid port range")
214+
}
215+
216+
begin, err := strconv.Atoi(publishedRange[0])
217+
if err != nil {
218+
return nil, fmt.Errorf("invalid port range %s: beginning value must be numeric", port.Published)
219+
}
220+
221+
end, err := strconv.Atoi(publishedRange[1])
222+
if err != nil {
223+
return nil, fmt.Errorf("invalid port range %s: end value must be numeric", port.Published)
224+
}
225+
226+
var portConfigs []composetypes.ServicePortConfig
227+
for i := begin; i <= end; i++ {
228+
portConfigs = append(portConfigs, composetypes.ServicePortConfig{
229+
HostIP: port.HostIP,
230+
Protocol: port.Protocol,
231+
Target: port.Target,
232+
Published: strconv.Itoa(i),
233+
Mode: "ingress",
234+
})
235+
}
236+
237+
return portConfigs, nil
238+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
version: v2beta1
2+
name: db
3+
4+
deployments:
5+
db:
6+
helm:
7+
values:
8+
containers:
9+
- command:
10+
- tail
11+
- -f
12+
- /dev/null
13+
image: loft.sh/mysql-server:8.0.19
14+
name: db-container
15+
volumeMounts:
16+
- containerPath: /tmp/cache
17+
volume:
18+
name: volume-1
19+
readOnly: false
20+
volumes:
21+
- emptyDir: {}
22+
name: volume-1
23+
24+
dev:
25+
db:
26+
labelSelector:
27+
app.kubernetes.io/component: db
28+
command:
29+
- tail
30+
- -f
31+
- /dev/null
32+
sync:
33+
- startContainer: true
34+
path: ./cache:/tmp/cache
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
version: v2beta1
2+
name: docker-compose
3+
4+
deployments:
5+
backend:
6+
helm:
7+
values:
8+
containers:
9+
- command:
10+
- tail
11+
- -f
12+
- /dev/null
13+
image: rails:latest
14+
name: backend-container
15+
volumeMounts:
16+
- containerPath: /tmp/cache
17+
volume:
18+
name: volume-1
19+
readOnly: false
20+
volumes:
21+
- emptyDir: {}
22+
name: volume-1
23+
24+
dev:
25+
backend:
26+
labelSelector:
27+
app.kubernetes.io/component: backend
28+
command:
29+
- tail
30+
- -f
31+
- /dev/null
32+
sync:
33+
- startContainer: true
34+
path: ./cache:/tmp/cache
35+
36+
dependencies:
37+
db:
38+
path: devspace-db.yaml

0 commit comments

Comments
 (0)