Browse Source

Merge pull request #2693 from porter-dev/master

merging into preview-env-fixes
Porter Support 3 năm trước cách đây
mục cha
commit
c775c12995

+ 3 - 3
.github/workflows/porter_preview_env.yml

@@ -26,10 +26,10 @@ jobs:
       uses: actions/checkout@v2.3.4
     - name: Create Porter preview env
       timeout-minutes: 30
-      uses: porter-dev/porter-preview-action@v0.2.1
+      uses: porter-dev/porter-preview-action@dev
       with:
         action_id: ${{ github.run_id }}
-        cluster: "2481"
+        cluster: "2489"
         host: https://dashboard.getporter.dev
         installation_id: "18533943"
         namespace: pr-${{ github.event.inputs.pr_number }}-porter
@@ -40,6 +40,6 @@ jobs:
         project: "6680"
         repo_name: porter
         repo_owner: porter-dev
-        token: ${{ secrets.PORTER_PREVIEW_6680_2481 }}
+        token: ${{ secrets.PORTER_PREVIEW_6680_2489 }}
     concurrency:
       group: ${{ github.workflow }}-${{ github.event.inputs.pr_number }}

+ 0 - 1
README.md

@@ -30,7 +30,6 @@ Porter brings the simplicity of a traditional PaaS to your own cloud provider wh
 - One-click provisioning of a Kubernetes cluster in your own cloud console
   - ✅ AWS
   - ✅ GCP
-  - ✅ Digital Ocean
 - Simple deploy of any public or private Docker image
 - Auto CI/CD with [buildpacks](https://buildpacks.io) for non-Dockerized apps
 - Heroku-like GUI to monitor application status, logs, and history

+ 1 - 1
cli/cmd/preview/v2beta1/app_resource.go

@@ -48,7 +48,7 @@ func (a *AppResource) getV1Resource(b *Build) (*types.Resource, error) {
 	config := &preview.ApplicationConfig{}
 
 	config.Build.Method = "registry"
-	config.Build.Image = fmt.Sprintf("\"{ .%s.image }\"", b.GetName())
+	config.Build.Image = fmt.Sprintf("{ .%s.image }", b.GetName())
 	config.Build.Env = b.GetRawEnv()
 	config.Values = a.HelmValues
 

+ 1 - 1
cli/cmd/preview/v2beta1/build.go

@@ -172,7 +172,7 @@ func (b *Build) getV1BuildImage() (*types.Resource, error) {
 func (b *Build) getV1PushImage() (*types.Resource, error) {
 	config := &preview.PushDriverConfig{}
 
-	config.Push.Image = fmt.Sprintf("\"{ .%s-build-image.image }\"", b.GetName())
+	config.Push.Image = fmt.Sprintf("{ .%s-build-image.image }", b.GetName())
 
 	rawConfig := make(map[string]any)
 

+ 5 - 14
docker/Dockerfile

@@ -7,6 +7,8 @@ WORKDIR /porter
 
 RUN apk update && apk add --no-cache gcc musl-dev git protoc
 
+ARG CGO_ENABLED=0
+
 COPY go.mod go.sum ./
 COPY /cmd ./cmd
 COPY /internal ./internal
@@ -18,33 +20,22 @@ COPY /pkg ./pkg
 RUN go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.26
 RUN go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1
 
-RUN --mount=type=cache,target=$GOPATH/pkg/mod \
-    go mod download
+RUN go mod download
 
 # Go build environment
 # --------------------
 FROM base AS build-go
 
 ARG version=production
-
+ARG CGO_ENABLED=0
 
 # build proto files
 RUN sh ./scripts/build/proto.sh
 
-RUN --mount=type=cache,target=/root/.cache/go-build \
-    --mount=type=cache,target=$GOPATH/pkg/mod \
-    go build -ldflags="-w -s -X 'main.Version=${version}'" -a -o ./bin/app ./cmd/app && \
+RUN go build -ldflags="-w -s -X 'main.Version=${version}'" -a -o ./bin/app ./cmd/app && \
     go build -ldflags '-w -s' -a -o ./bin/migrate ./cmd/migrate && \
     go build -ldflags '-w -s' -a -o ./bin/ready ./cmd/ready
 
-# Go test environment
-# -------------------
-FROM base AS porter-test
-
-RUN --mount=type=cache,target=/root/.cache/go-build \
-    --mount=type=cache,target=$GOPATH/pkg/mod \
-    go test ./...
-
 # Webpack build environment
 # -------------------------
 FROM node:16 as build-webpack

+ 6 - 0
go.work

@@ -0,0 +1,6 @@
+go 1.19
+
+use (
+	.
+	./services/cli_install_script_container
+)

+ 15 - 0
go.work.sum

@@ -0,0 +1,15 @@
+cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU=
+cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=
+github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZCSYp4Z0m2dk6cEM60=
+github.com/containerd/stargz-snapshotter v0.11.3 h1:D3PoF563XmOBdtfx2G6AkhbHueqwIVPBFn2mrsWLa3w=
+github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk=
+github.com/go-redis/redis v6.15.8+incompatible h1:BKZuG6mCnRj5AOaWJXoCgf6rqTYnYJLe4en2hxT7r9o=
+github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/jackc/chunkreader v1.0.0 h1:4s39bBR8ByfqH+DKm8rQA3E1LHZWB9XWcrz8fqaZbe0=
+github.com/jackc/pgproto3 v1.1.0 h1:FYYE4yRw+AgI8wXIinMlNjBbp/UitDJwfj5LqqewP1A=
+github.com/tchap/go-patricia v2.2.6+incompatible h1:JvoDL7JSoIP2HDE8AbDH3zC8QBPxmzYe32HHy5yQ+Ck=
+golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
+golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE=
+golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
+golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=

+ 11 - 4
porter.yaml

@@ -5,7 +5,6 @@ builds:
   method: docker
   dockerfile: ./docker/Dockerfile
   env:
-    raw: {}
     import_from:
       - default/base-env
 
@@ -16,9 +15,11 @@ apps:
   helm_chart:
     name: web
   build_ref: porter
-  helm_values: # refer https://github.com/porter-dev/porter-charts/blob/master/applications/web/values.yaml
+  helm_values:
+    ingress:
+      enabled: true
     container:
-      command: 
+      port: 8080
     resources:
       requests:
         cpu: 400m
@@ -27,4 +28,10 @@ apps:
 addons:
 - name: postgres
   helm_chart:
-    name: postgres
+    name: postgresql
+  helm_values:
+    image:
+      tag: 15-debian-11
+    postgresqlUsername: postgres
+    postgresqlPassword: postgres
+    postgresqlDatabase: postgres

+ 1 - 0
services/cli_install_script_container/Dockerfile

@@ -3,6 +3,7 @@ FROM golang:1.18-alpine
 WORKDIR /app
 COPY . .
 
+RUN go mod download
 RUN go build -o serve main.go
 
 ENTRYPOINT [ "./serve" ]

+ 13 - 0
services/cli_install_script_container/go.mod

@@ -0,0 +1,13 @@
+module github.com/porter-dev/porter/services/cli_install_script_container
+
+go 1.19
+
+require (
+	github.com/golang/protobuf v1.3.2 // indirect
+	github.com/google/go-github/v50 v50.0.0 // indirect
+	github.com/google/go-querystring v1.1.0 // indirect
+	golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 // indirect
+	golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 // indirect
+	golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be // indirect
+	google.golang.org/appengine v1.6.7 // indirect
+)

+ 28 - 0
services/cli_install_script_container/go.sum

@@ -0,0 +1,28 @@
+github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY=
+github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ=
+github.com/google/go-github/v50 v50.0.0 h1:gdO1AeuSZZK4iYWwVbjni7zg8PIQhp7QfmPunr016Jk=
+github.com/google/go-github/v50 v50.0.0/go.mod h1:Ev4Tre8QoKiolvbpOSG3FIi4Mlon3S2Nt9W5JYqKiwA=
+github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
+github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ=
+golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 h1:qWPm9rbaAMKs8Bq/9LRpbMqxWRVUAQwMI9fVrssnTfw=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be h1:vEDujvNQGv4jgYKudGeI/+DAX4Jffq6hpD55MmoEvKs=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
+google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=

+ 1 - 1
services/cli_install_script_container/install.sh

@@ -14,7 +14,7 @@ download_and_install() {
 
     echo "[INFO] Since the Porter CLI gets installed in /usr/local/bin, you may be asked to input your password."
 
-    curl -L $(curl -s https://api.github.com/repos/porter-dev/porter/releases/latest | grep "browser_download_url.*/porter_.*_${osname}_x86_64\.zip" | cut -d ":" -f 2,3 | tr -d \") --output porter.zip
+    curl -L https://github.com/porter-dev/porter/releases/download/{{ .TagName }}/porter_{{ .TagName }}_${osname}_x86_64.zip --output porter.zip
     unzip -a porter.zip
     rm porter.zip
 

+ 44 - 5
services/cli_install_script_container/main.go

@@ -1,21 +1,60 @@
 package main
 
 import (
+	"context"
 	"fmt"
-	"io/ioutil"
 	"net/http"
 	"os"
+	"text/template"
+
+	"github.com/google/go-github/v50/github"
 )
 
+type Tag struct {
+	TagName string
+}
+
+func getLatestCLIRelease() (string, error) {
+	client := github.NewClient(nil)
+
+	rel, _, err := client.Repositories.GetLatestRelease(context.Background(), "porter-dev", "porter")
+
+	if err != nil {
+		return "", err
+	}
+
+	return rel.GetTagName(), nil
+}
+
 func serve(w http.ResponseWriter, req *http.Request) {
-	contents, err := ioutil.ReadFile("install.sh")
+	latestTag, err := getLatestCLIRelease()
+
+	if err != nil {
+		w.WriteHeader(http.StatusInternalServerError)
+		return
+	}
+
+	contents, err := os.ReadFile("install.sh")
+
+	if err != nil {
+		w.WriteHeader(http.StatusInternalServerError)
+		return
+	}
+
+	tmpl, err := template.New("install").Parse(string(contents))
+
 	if err != nil {
 		w.WriteHeader(http.StatusInternalServerError)
 		return
 	}
-	w.WriteHeader(http.StatusOK)
-	w.Header().Add("Content-Type", "text/plain")
-	w.Write(contents)
+
+	err = tmpl.Execute(w, Tag{TagName: latestTag})
+
+	if err != nil {
+		w.WriteHeader(http.StatusInternalServerError)
+	} else {
+		w.Header().Add("Content-Type", "text/plain")
+	}
 }
 
 func main() {