Skip to content

Commit 004f06a

Browse files
committed
Set up Demos on PS7 for charmed snapcraft.io
1 parent 7456e79 commit 004f06a

5 files changed

Lines changed: 324 additions & 11 deletions

File tree

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
name: Demo Cleanup
2+
on:
3+
pull_request:
4+
types:
5+
- closed
6+
permissions:
7+
pull-requests: write
8+
packages: write
9+
10+
jobs:
11+
cleanup:
12+
name: Cleanup Demo
13+
uses: canonical/webteam-devops/.github/workflows/cleanup-demo.yaml@demos
14+
with:
15+
juju-model-name: "795798e4-922f-49c7-9169-004ffc17df90@serviceaccount/k8s-marketplace-demos-default"
16+
secrets:
17+
demos_juju_client_id: ${{ secrets.DEMOS_JUJU_CLIENT_ID }}
18+
demos_juju_client_secret: ${{ secrets.DEMOS_JUJU_CLIENT_SECRET }}
19+
demos_s3_access_key_id: ${{ secrets.DEMOS_S3_ACCESS_KEY_ID }}
20+
demos_s3_secret_access_key: ${{ secrets.DEMOS_S3_SECRET_ACCESS_KEY }}

.github/workflows/demo.yaml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
name: Demo
2+
on:
3+
pull_request:
4+
types:
5+
- opened
6+
- reopened
7+
- synchronize
8+
permissions:
9+
pull-requests: write
10+
packages: write
11+
12+
# Ensure only one demo runs at a time.
13+
concurrency:
14+
group: ${{ github.workflow }}-${{ github.ref }}
15+
cancel-in-progress: true
16+
17+
jobs:
18+
deploy:
19+
name: Deploy Demo
20+
uses: canonical/webteam-devops/.github/workflows/start-demo.yaml@demos
21+
with:
22+
juju-model-name: "795798e4-922f-49c7-9169-004ffc17df90@serviceaccount/k8s-marketplace-demos-default"
23+
juju-model-uuid: "b765a126-883d-440b-847d-0bd30a4f8318"
24+
secrets:
25+
demos_juju_client_id: ${{ secrets.DEMOS_JUJU_CLIENT_ID }}
26+
demos_juju_client_secret: ${{ secrets.DEMOS_JUJU_CLIENT_SECRET }}
27+
demos_s3_access_key_id: ${{ secrets.DEMOS_S3_ACCESS_KEY_ID }}
28+
demos_s3_secret_access_key: ${{ secrets.DEMOS_S3_SECRET_ACCESS_KEY }}

charm/charmcraft.yaml

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,31 +30,31 @@ config:
3030

3131
marketo-client-id:
3232
description: "Marketo API client ID"
33-
type: string
33+
type: secret
3434

3535
marketo-client-secret:
3636
description: "Marketo API client secret"
37-
type: string
37+
type: secret
3838

3939
github-client-id:
4040
description: "GitHub OAuth application ID for prompting users for access to their repositories"
4141
type: string
4242

4343
github-client-secret:
4444
description: "GitHub OAuth application client secret for prompting users for access to their repositories"
45-
type: string
45+
type: secret
4646

4747
github-snapcraft-user-token:
4848
description: "GitHub application token for automated builds"
49-
type: string
49+
type: secret
5050

5151
github-snapcraft-bot-user-token:
5252
description: "GitHub application token for CVE data"
53-
type: string
53+
type: secret
5454

5555
github-webhook-secret:
5656
description: "Secret salt used for signing automated build webhooks"
57-
type: string
57+
type: secret
5858

5959
github-webhook-host-url:
6060
description: "URL of the automated build webhooks' host"
@@ -66,27 +66,27 @@ config:
6666

6767
lp-api-token:
6868
description: "Launchpad API token"
69-
type: string
69+
type: secret
7070

7171
lp-api-token-secret:
7272
description: "Launchpad API secret"
73-
type: string
73+
type: secret
7474

7575
youtube-api-key:
7676
description: "API key used to access the YouTube Data API for retrieving and displaying YouTube video content on snapcraft.io"
77-
type: string
77+
type: secret
7878

7979
discourse-api-key:
8080
description: "API key used by the application to authenticate with the configured Discourse forum"
81-
type: string
81+
type: secret
8282

8383
discourse-api-username:
8484
description: "Discourse username to associate with API requests to the Discourse forum"
8585
type: string
8686

8787
dns-verification-salt:
8888
description: "Secret salt used when generating DNS verification tokens to confirm domain ownership"
89-
type: string
89+
type: secret
9090

9191
login-url:
9292
description: "Base URL for SSO login redirects"

terraform/demo/demo.tf

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
resource "juju_application" "demo" {
2+
name = var.demo_id
3+
model_uuid = data.juju_model.demos.uuid
4+
5+
charm {
6+
name = "snapcraft-io"
7+
}
8+
9+
config = {
10+
bsi-url = "https://build.snapcraft.io"
11+
devicegw-url = "https://api.snapcraft.io/"
12+
discourse-api-key = data.juju_secret.snapcraft_io-discourse_api_key.secret_uri
13+
discourse-api-username = "system"
14+
dns-verification-salt = data.juju_secret.snapcraft_io-dns_verification_salt.secret_uri
15+
environment = "production"
16+
flask-preferred-url-scheme = "HTTPS"
17+
flask-secret-key = data.juju_secret.snapcraft_io-flask_secret_key.secret_uri
18+
github-client-id = "029a65c1d9dc821b0227"
19+
github-client-secret = data.juju_secret.snapcraft_io-github_client_secret.secret_uri
20+
github-snapcraft-bot-user-token = data.juju_secret.snapcraft_io-github_snapcraft_bot_user_token.secret_uri
21+
github-snapcraft-user-token = data.juju_secret.snapcraft_io-github_snapcraft_user_token.secret_uri
22+
github-webhook-host-url = "https://snapcraft.io/"
23+
github-webhook-secret = data.juju_secret.snapcraft_io-github_webhook_secret.secret_uri
24+
login-url = "https://login.ubuntu.com"
25+
lp-api-token = data.juju_secret.snapcraft_io-lp_api_token.secret_uri
26+
lp-api-token-secret = data.juju_secret.snapcraft_io-lp_api_token_secret.secret_uri
27+
lp-api-username = "build.snapcraft.io"
28+
marketo-client-id = data.juju_secret.snapcraft_io-marketo_client_id.secret_uri
29+
marketo-client-secret = data.juju_secret.snapcraft_io-marketo_client_secret.secret_uri
30+
publishergw-url = "https://api.charmhub.io"
31+
report-sheet-url = "https://script.google.com/macros/s/AKfycbywNDNVeD4_xnE36HP7gJUbbLHNrrcxgy0yVuwr0poPfGoDnH0Vl1oOWjnRXNtLkrcmlQ/exec"
32+
snapstore-dashboard-api-url = "https://dashboard.snapcraft.io/"
33+
youtube-api-key = data.juju_secret.snapcraft_io-youtube_api_key.secret_uri
34+
}
35+
}
36+
37+
resource "juju_integration" "demo_ingress" {
38+
model_uuid = data.juju_model.demos.uuid
39+
40+
application {
41+
name = juju_application.demo.name
42+
endpoint = "ingress"
43+
}
44+
45+
application {
46+
name = "subdomain-integrator"
47+
endpoint = "ingress"
48+
}
49+
}
50+
51+
// Redis instance and relation
52+
53+
resource "juju_application" "redis" {
54+
name = "${var.demo_id}-redis"
55+
model_uuid = data.juju_model.demos.uuid
56+
57+
charm {
58+
name = "redis-k8s"
59+
}
60+
}
61+
62+
resource "juju_integration" "demo_redis" {
63+
model_uuid = data.juju_model.demos.uuid
64+
65+
application {
66+
name = juju_application.demo.name
67+
endpoint = "redis"
68+
}
69+
70+
application {
71+
name = juju_application.redis.name
72+
endpoint = "redis"
73+
}
74+
}

terraform/demo/secrets.tf

Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
// discourse-api-key
2+
data "juju_secret" "snapcraft_io-discourse_api_key" {
3+
name = "snapcraft_io-discourse_api_key"
4+
model_uuid = data.juju_model.demos.uuid
5+
}
6+
7+
resource "juju_access_secret" "discourse_api_key-access" {
8+
model_uuid = data.juju_model.demos.uuid
9+
10+
secret_id = data.juju_secret.snapcraft_io-discourse_api_key.secret_id
11+
12+
applications = [
13+
juju_application.demo.name
14+
]
15+
}
16+
17+
// dns-verification-salt
18+
data "juju_secret" "snapcraft_io-dns_verification_salt" {
19+
name = "snapcraft_io-dns_verification_salt"
20+
model_uuid = data.juju_model.demos.uuid
21+
}
22+
23+
resource "juju_access_secret" "dns_verification_salt-access" {
24+
model_uuid = data.juju_model.demos.uuid
25+
26+
secret_id = data.juju_secret.snapcraft_io-dns_verification_salt.secret_id
27+
28+
applications = [
29+
juju_application.demo.name
30+
]
31+
}
32+
33+
// flask-secret-key
34+
data "juju_secret" "snapcraft_io-flask_secret_key" {
35+
name = "snapcraft_io-flask_secret_key"
36+
model_uuid = data.juju_model.demos.uuid
37+
}
38+
39+
resource "juju_access_secret" "flask_secret_key-access" {
40+
model_uuid = data.juju_model.demos.uuid
41+
42+
secret_id = data.juju_secret.snapcraft_io-flask_secret_key.secret_id
43+
44+
applications = [
45+
juju_application.demo.name
46+
]
47+
}
48+
49+
// github-client-secret
50+
data "juju_secret" "snapcraft_io-github_client_secret" {
51+
name = "snapcraft_io-github_client_secret"
52+
model_uuid = data.juju_model.demos.uuid
53+
}
54+
55+
resource "juju_access_secret" "github_client_secret-access" {
56+
model_uuid = data.juju_model.demos.uuid
57+
58+
secret_id = data.juju_secret.snapcraft_io-github_client_secret.secret_id
59+
60+
applications = [
61+
juju_application.demo.name
62+
]
63+
}
64+
65+
// github-snapcraft-bot-user-token
66+
data "juju_secret" "snapcraft_io-github_snapcraft_bot_user_token" {
67+
name = "snapcraft_io-github_snapcraft_bot_user_token"
68+
model_uuid = data.juju_model.demos.uuid
69+
}
70+
71+
resource "juju_access_secret" "github_snapcraft_bot_user_token-access" {
72+
model_uuid = data.juju_model.demos.uuid
73+
74+
secret_id = data.juju_secret.snapcraft_io-github_snapcraft_bot_user_token.secret_id
75+
76+
applications = [
77+
juju_application.demo.name
78+
]
79+
}
80+
81+
// github-snapcraft-user-token
82+
data "juju_secret" "snapcraft_io-github_snapcraft_user_token" {
83+
name = "snapcraft_io-github_snapcraft_user_token"
84+
model_uuid = data.juju_model.demos.uuid
85+
}
86+
87+
resource "juju_access_secret" "github_snapcraft_user_token-access" {
88+
model_uuid = data.juju_model.demos.uuid
89+
90+
secret_id = data.juju_secret.snapcraft_io-github_snapcraft_user_token.secret_id
91+
92+
applications = [
93+
juju_application.demo.name
94+
]
95+
}
96+
97+
// github-webhook-secret
98+
data "juju_secret" "snapcraft_io-github_webhook_secret" {
99+
name = "snapcraft_io-github_webhook_secret"
100+
model_uuid = data.juju_model.demos.uuid
101+
}
102+
103+
resource "juju_access_secret" "github_webhook_secret-access" {
104+
model_uuid = data.juju_model.demos.uuid
105+
106+
secret_id = data.juju_secret.snapcraft_io-github_webhook_secret.secret_id
107+
108+
applications = [
109+
juju_application.demo.name
110+
]
111+
}
112+
113+
// lp-api-token
114+
data "juju_secret" "snapcraft_io-lp_api_token" {
115+
name = "snapcraft_io-lp_api_token"
116+
model_uuid = data.juju_model.demos.uuid
117+
}
118+
119+
resource "juju_access_secret" "lp_api_token-access" {
120+
model_uuid = data.juju_model.demos.uuid
121+
122+
secret_id = data.juju_secret.snapcraft_io-lp_api_token.secret_id
123+
124+
applications = [
125+
juju_application.demo.name
126+
]
127+
}
128+
129+
// lp-api-token-secret
130+
data "juju_secret" "snapcraft_io-lp_api_token_secret" {
131+
name = "snapcraft_io-lp_api_token_secret"
132+
model_uuid = data.juju_model.demos.uuid
133+
}
134+
135+
resource "juju_access_secret" "lp_api_token_secret-access" {
136+
model_uuid = data.juju_model.demos.uuid
137+
138+
secret_id = data.juju_secret.snapcraft_io-lp_api_token_secret.secret_id
139+
140+
applications = [
141+
juju_application.demo.name
142+
]
143+
}
144+
145+
// marketo-client-id
146+
data "juju_secret" "snapcraft_io-marketo_client_id" {
147+
name = "snapcraft_io-marketo_client_id"
148+
model_uuid = data.juju_model.demos.uuid
149+
}
150+
151+
resource "juju_access_secret" "marketo_client_id-access" {
152+
model_uuid = data.juju_model.demos.uuid
153+
154+
secret_id = data.juju_secret.snapcraft_io-marketo_client_id.secret_id
155+
156+
applications = [
157+
juju_application.demo.name
158+
]
159+
}
160+
161+
// marketo-client-secret
162+
data "juju_secret" "snapcraft_io-marketo_client_secret" {
163+
name = "snapcraft_io-marketo_client_secret"
164+
model_uuid = data.juju_model.demos.uuid
165+
}
166+
167+
resource "juju_access_secret" "marketo_client_secret-access" {
168+
model_uuid = data.juju_model.demos.uuid
169+
170+
secret_id = data.juju_secret.snapcraft_io-marketo_client_secret.secret_id
171+
172+
applications = [
173+
juju_application.demo.name
174+
]
175+
}
176+
177+
// youtube-api-key
178+
data "juju_secret" "snapcraft_io-youtube_api_key" {
179+
name = "snapcraft_io-youtube_api_key"
180+
model_uuid = data.juju_model.demos.uuid
181+
}
182+
183+
resource "juju_access_secret" "youtube_api_key-access" {
184+
model_uuid = data.juju_model.demos.uuid
185+
186+
secret_id = data.juju_secret.snapcraft_io-youtube_api_key.secret_id
187+
188+
applications = [
189+
juju_application.demo.name
190+
]
191+
}

0 commit comments

Comments
 (0)