From 439fb4ee82dbd0deb93ac0d1924573b15a47c6aa Mon Sep 17 00:00:00 2001 From: Sujay Pillai Date: Fri, 10 Sep 2021 12:41:45 +0800 Subject: [PATCH] Adding support for azure static webapp Signed-off-by: Sujay Pillai --- docs/reference/README.md | 1 + docs/reference/azure/staticwebapp.md | 53 +++++++++++++++ stdlib/azure/staticwebapp/stapp.cue | 79 +++++++++++++++++++++++ stdlib/azure/staticwebapp/tests/stapp.cue | 30 +++++++++ stdlib/universe.bats | 5 ++ 5 files changed, 168 insertions(+) create mode 100644 docs/reference/azure/staticwebapp.md create mode 100644 stdlib/azure/staticwebapp/stapp.cue create mode 100644 stdlib/azure/staticwebapp/tests/stapp.cue diff --git a/docs/reference/README.md b/docs/reference/README.md index 833fd163..4a97ba0e 100644 --- a/docs/reference/README.md +++ b/docs/reference/README.md @@ -12,6 +12,7 @@ - [aws/s3](./aws/s3.md) - AWS Simple Storage Service - [azure](./azure/README.md) - Azure base package - [azure/resourcegroup](./azure/resourcegroup.md) - - +- [azure/staticwebapp](./azure/staticwebapp.md) - - - [azure/storage](./azure/storage.md) - - - [dagger](./dagger/README.md) - Dagger core types - [dagger/op](./dagger/op.md) - op: low-level operations for Dagger processing pipelines diff --git a/docs/reference/azure/staticwebapp.md b/docs/reference/azure/staticwebapp.md new file mode 100644 index 00000000..074cb5bd --- /dev/null +++ b/docs/reference/azure/staticwebapp.md @@ -0,0 +1,53 @@ +--- +sidebar_label: staticwebapp +--- + +# alpha.dagger.io/azure/staticwebapp + +```cue +import "alpha.dagger.io/azure/staticwebapp" +``` + +## staticwebapp.#StaticWebApp + +Create a static web app + +### staticwebapp.#StaticWebApp Inputs + +| Name | Type | Description | +| ------------- |:-------------: |:-------------: | +|*config.tenantId* | `dagger.#Secret` |AZURE tenant id | +|*config.subscriptionId* | `dagger.#Secret` |AZURE subscription id | +|*config.appId* | `dagger.#Secret` |AZURE app id for the service principal used | +|*config.password* | `dagger.#Secret` |AZURE password for the service principal used | +|*rgName* | `string` |ResourceGroup name in which to create static webapp | +|*stappLocation* | `string` |StaticWebApp location | +|*stappName* | `string` |StaticWebApp name | +|*remote* | `string` |GitHubRepository URL | +|*ref* | `*"main" \| string` |GitHub Branch | +|*appLocation* | `*"/" \| string` |Location of your application code | +|*buildLocation* | `*"build" \| string` |Location of your build artifacts | +|*authToken* | `dagger.#Secret` |GitHub Personal Access Token | +|*ctr.image.config.tenantId* | `dagger.#Secret` |AZURE tenant id | +|*ctr.image.config.subscriptionId* | `dagger.#Secret` |AZURE subscription id | +|*ctr.image.config.appId* | `dagger.#Secret` |AZURE app id for the service principal used | +|*ctr.image.config.password* | `dagger.#Secret` |AZURE password for the service principal used | +|*ctr.image.image.from* | `"mcr.microsoft.com/azure-cli:2.27.1@sha256:1e117183100c9fce099ebdc189d73e506e7b02d2b73d767d3fc07caee72f9fb1"` |Remote ref (example: "index.docker.io/alpine:latest") | +|*ctr.image.secret."/run/secrets/appId"* | `dagger.#Secret` |- | +|*ctr.image.secret."/run/secrets/password"* | `dagger.#Secret` |- | +|*ctr.image.secret."/run/secrets/tenantId"* | `dagger.#Secret` |- | +|*ctr.image.secret."/run/secrets/subscriptionId"* | `dagger.#Secret` |- | +|*ctr.env.AZURE_DEFAULTS_GROUP* | `string` |- | +|*ctr.env.AZURE_DEFAULTS_LOCATION* | `string` |- | +|*ctr.env.AZURE_STATICWEBAPP_NAME* | `string` |- | +|*ctr.env.GIT_URL* | `string` |- | +|*ctr.env.GIT_BRANCH* | `*"main" \| string` |- | +|*ctr.env.APP_LOCATION* | `*"/" \| string` |- | +|*ctr.env.BUILD_LOCATION* | `*"build" \| string` |- | +|*ctr.secret."/run/secrets/git_pat"* | `dagger.#Secret` |- | + +### staticwebapp.#StaticWebApp Outputs + +| Name | Type | Description | +| ------------- |:-------------: |:-------------: | +|*defaultHostName* | `string` |DefaultHostName generated by Azure | diff --git a/stdlib/azure/staticwebapp/stapp.cue b/stdlib/azure/staticwebapp/stapp.cue new file mode 100644 index 00000000..dd27f981 --- /dev/null +++ b/stdlib/azure/staticwebapp/stapp.cue @@ -0,0 +1,79 @@ +package staticwebapp + +import ( + "alpha.dagger.io/azure" + "alpha.dagger.io/os" + "alpha.dagger.io/dagger" +) + +// Create a static web app +#StaticWebApp: { + // Azure Config + config: azure.#Config + + // ResourceGroup name in which to create static webapp + rgName: string & dagger.#Input + + // StaticWebApp location + stappLocation: string & dagger.#Input + + // StaticWebApp name + stappName: string & dagger.#Input + + // GitHubRepository URL + remote: string & dagger.#Input + + // GitHub Branch + ref: *"main" | string & dagger.#Input + + // Location of your application code + appLocation: *"/" | string & dagger.#Input + + // Location of your build artifacts + buildLocation: *"build" | string & dagger.#Input + + // GitHub Personal Access Token + authToken: dagger.#Secret & dagger.#Input + + // DefaultHostName generated by Azure + defaultHostName: string & dagger.#Output + + // Container image + ctr: os.#Container & { + image: azure.#CLI & { + "config": config + } + always: true + + command: #""" + az staticwebapp create -n "$AZURE_STATICWEBAPP_NAME" \ + -g "$AZURE_DEFAULTS_GROUP" \ + -l "$AZURE_DEFAULTS_LOCATION" \ + -s "$GIT_URL" \ + -b "$GIT_BRANCH" \ + -t "$(cat /run/secrets/git_pat)" \ + --app-location "$APP_LOCATION" \ + --output-location "$BUILD_LOCATION" | jq -r '.defaultHostname' | tr -d "\n" > /defaultHostName + """# + + secret: "/run/secrets/git_pat": authToken + + env: { + AZURE_DEFAULTS_GROUP: rgName + AZURE_DEFAULTS_LOCATION: stappLocation + AZURE_STATICWEBAPP_NAME: stappName + GIT_URL: remote + GIT_BRANCH: ref + APP_LOCATION: appLocation + BUILD_LOCATION: buildLocation + } + } + + // DefaultHostName generated by Azure + defaultHostName: ({ + os.#File & { + from: ctr + path: "/defaultHostName" + } + }).contents +} diff --git a/stdlib/azure/staticwebapp/tests/stapp.cue b/stdlib/azure/staticwebapp/tests/stapp.cue new file mode 100644 index 00000000..a3f9f482 --- /dev/null +++ b/stdlib/azure/staticwebapp/tests/stapp.cue @@ -0,0 +1,30 @@ +package staticwebapp + +import ( + "alpha.dagger.io/azure" + "alpha.dagger.io/azure/resourcegroup" + "alpha.dagger.io/azure/staticwebapp" + "alpha.dagger.io/random" + "strings" +) + +TestConfig: azConfig: azure.#Config & { +} + +TestSuffix: random.#String & { + seed: "azrg" +} + +TestRG: resourcegroup.#ResourceGroup & { + config: TestConfig.azConfig + rgName: "rg-test-\(TestSuffix.out)" + rgLocation: "eastus2" +} + +TestSWA: staticwebapp.#StaticWebApp & { + config: TestRG.config + rgName: "\(strings.Split(TestRG.id, "/")[4])" + stappLocation: "eastus2" + stappName: "stapp-test-\(TestSuffix.out)" + remote: "https://github.com/sujaypillai/todoapp" +} diff --git a/stdlib/universe.bats b/stdlib/universe.bats index 3ba49536..cbaad899 100644 --- a/stdlib/universe.bats +++ b/stdlib/universe.bats @@ -253,3 +253,8 @@ setup() { assert_success assert_output "\"Healthy\"" } + +@test "azure-stapp" { + skip "Azure CI infra not implemented yet - manually tested and working" + #dagger -e azure-stapp up +} \ No newline at end of file