From 9facaa65f4d4876438be2e7cec187b749763be02 Mon Sep 17 00:00:00 2001 From: Andrea Luzzardi Date: Sat, 29 May 2021 01:20:31 -0700 Subject: [PATCH 1/7] stdlib: aws: s3: default to "always: true" Signed-off-by: Andrea Luzzardi --- stdlib/aws/s3/s3.cue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/aws/s3/s3.cue b/stdlib/aws/s3/s3.cue index 5207066a..485755a6 100644 --- a/stdlib/aws/s3/s3.cue +++ b/stdlib/aws/s3/s3.cue @@ -25,7 +25,7 @@ import ( contentType: string | *"" @dagger(input) // Always write the object to S3 - always?: bool @dagger(input) + always: bool | *true @dagger(input) // URL of the uploaded S3 object url: { From 3605d399c9c61061afe76974d46503193b52c136 Mon Sep 17 00:00:00 2001 From: Andrea Luzzardi Date: Sat, 29 May 2021 01:20:57 -0700 Subject: [PATCH 2/7] stdlib: aws: s3: add #Sync Signed-off-by: Andrea Luzzardi --- stdlib/aws/s3/s3.cue | 77 +++++++++++++++++++ .../aws/s3/.dagger/env/default/plan/s3.cue | 20 +++++ 2 files changed, 97 insertions(+) diff --git a/stdlib/aws/s3/s3.cue b/stdlib/aws/s3/s3.cue index 485755a6..99e8a20e 100644 --- a/stdlib/aws/s3/s3.cue +++ b/stdlib/aws/s3/s3.cue @@ -90,3 +90,80 @@ import ( ] } } + +// S3 Sync +#Sync: { + // AWS Config + config: aws.#Config + + // Source Artifact to upload to S3 + source: dagger.#Artifact @dagger(input) + + // Target S3 URL (eg. s3:////) + target: string @dagger(input) + + // Files that exist in the destination but not in the + // source are deleted during sync. + delete: *false | bool @dagger(input) + + // Object content type + contentType: string | *"" @dagger(input) + + // Always write the object to S3 + always: bool | *true @dagger(input) + + // URL of the uploaded S3 object + url: { + @dagger(output) + string + + #up: [ + op.#Load & { + from: aws.#CLI & { + "config": config + } + }, + + op.#Exec & { + if always != _|_ { + "always": always + } + env: { + TARGET: target + OPT_CONTENT_TYPE: contentType + if delete { + OPT_DELETE: "1" + } + } + + mount: "/source": from: source + + args: [ + "/bin/bash", + "--noprofile", + "--norc", + "-eo", + "pipefail", + "-c", + #""" + opts=() + if [ -d /source ]; then + op=sync + fi + [ -n "$OPT_CONTENT_TYPE" ] && opts+="--content-type $OPT_CONTENT_TYPE" + [ -n "$OPT_DELETE" ] && opts+="--delete" + aws s3 sync ${opts[@]} /source "$TARGET" + echo -n "$TARGET" \ + | sed -E 's=^s3://([^/]*)/=https://\1.s3.amazonaws.com/=' \ + > /url + """#, + ] + }, + + op.#Export & { + source: "/url" + format: "string" + }, + ] + } +} diff --git a/tests/stdlib/aws/s3/.dagger/env/default/plan/s3.cue b/tests/stdlib/aws/s3/.dagger/env/default/plan/s3.cue index e5a9f690..8968493c 100644 --- a/tests/stdlib/aws/s3/.dagger/env/default/plan/s3.cue +++ b/tests/stdlib/aws/s3/.dagger/env/default/plan/s3.cue @@ -49,3 +49,23 @@ TestS3UploadDir: { file: "foo.txt" } } + +TestS3Sync: { + deploy: s3.#Sync & { + config: TestConfig.awsConfig + source: TestDirectory + target: "s3://\(bucket)/" + } + + verifyFile: #VerifyS3 & { + config: TestConfig.awsConfig + target: deploy.target + file: "dirFile.txt" + } + + verifyDir: #VerifyS3 & { + config: TestConfig.awsConfig + target: deploy.target + file: "foo.txt" + } +} From 39527b761d7cb5e480c9c38841f887d6d69a1cfa Mon Sep 17 00:00:00 2001 From: Andrea Luzzardi Date: Sat, 29 May 2021 01:21:52 -0700 Subject: [PATCH 3/7] stdlib: yarn: support cwd, args and packages Signed-off-by: Andrea Luzzardi --- stdlib/js/yarn/yarn.cue | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/stdlib/js/yarn/yarn.cue b/stdlib/js/yarn/yarn.cue index 81b9bbed..cefb2f29 100644 --- a/stdlib/js/yarn/yarn.cue +++ b/stdlib/js/yarn/yarn.cue @@ -15,6 +15,14 @@ import ( // Application source code source: dagger.#Artifact @dagger(input) + // Extra alpine packages to install + package: { + [string]: true | false | string @dagger(input) + } + + // working directory to use + cwd: *"." | string @dagger(input) + // Environment variables env: { [string]: string @dagger(input) @@ -31,6 +39,9 @@ import ( // Run this yarn script script: string | *"build" @dagger(input) + // Optional arguments for the script + args: [...string] | *[] @dagger(input) + build: os.#Dir & { from: ctr path: "/build" @@ -38,7 +49,7 @@ import ( ctr: os.#Container & { image: alpine.#Image & { - package: { + "package": package & { bash: "=~5.1" yarn: "=~1.22" } @@ -46,13 +57,17 @@ import ( shell: path: "/bin/bash" command: """ [ -n "$ENVFILE_NAME" ] && echo "$ENVFILE" > "$ENVFILE_NAME" - yarn install --production false - yarn run "$YARN_BUILD_SCRIPT" + yarn --cwd "$YARN_CWD" install --production false + + opts=( $(echo $YARN_ARGS) ) + yarn --cwd "$YARN_CWD" run "$YARN_BUILD_SCRIPT" ${opts[@]} mv "$YARN_BUILD_DIRECTORY" /build """ "env": env & { YARN_BUILD_SCRIPT: script + YARN_ARGS: strings.Join(args, "\n") YARN_CACHE_FOLDER: "/cache/yarn" + YARN_CWD: cwd YARN_BUILD_DIRECTORY: buildDir if writeEnvFile != "" { ENVFILE_NAME: writeEnvFile From c95b5d2bae53006434e876fc4bce92cf9a07e1e7 Mon Sep 17 00:00:00 2001 From: Andrea Luzzardi Date: Fri, 28 May 2021 20:11:17 -0700 Subject: [PATCH 4/7] docs: deploy using dagger Signed-off-by: Andrea Luzzardi --- .dagger/env/docs/.gitignore | 2 + .dagger/env/docs/plan/main.cue | 95 ++++++++++++++++++++++++++++++++++ .dagger/env/docs/values.yaml | 35 +++++++++++++ environment/pipeline.go | 10 ++++ stdlib/dagger/op/op.cue | 5 ++ stdlib/dagger/op/op_fullop.cue | 1 + stdlib/git/git.cue | 81 +++++++++++++++++++++++++++++ 7 files changed, 229 insertions(+) create mode 100644 .dagger/env/docs/.gitignore create mode 100644 .dagger/env/docs/plan/main.cue create mode 100644 .dagger/env/docs/values.yaml diff --git a/.dagger/env/docs/.gitignore b/.dagger/env/docs/.gitignore new file mode 100644 index 00000000..01ec19b0 --- /dev/null +++ b/.dagger/env/docs/.gitignore @@ -0,0 +1,2 @@ +# dagger state +state/** diff --git a/.dagger/env/docs/plan/main.cue b/.dagger/env/docs/plan/main.cue new file mode 100644 index 00000000..183b628d --- /dev/null +++ b/.dagger/env/docs/plan/main.cue @@ -0,0 +1,95 @@ +package main + +import ( + "encoding/json" + + "dagger.io/dagger" + "dagger.io/os" + + "dagger.io/js/yarn" + "dagger.io/git" + "dagger.io/docker" + + "dagger.io/aws" + "dagger.io/aws/s3" +) + +// dagger repository +repository: dagger.#Artifact @dagger(input) + +// docs version +version: string | *"devel" @dagger(input) + +// if repository is checked out at a tag, use it as the version +tag: git.#CurrentBranch & { + "repository": repository +} +if (tag.name & =~"^v") != _|_ { + version: tag.name +} + +// AWS credentials +awsConfig: aws.#Config @dagger(input) + +// Lint the markdowns +lint: os.#Container & { + image: docker.#Pull & { + from: "tmknom/markdownlint:0.23.1" + } + + command: "markdownlint ./docs" + dir: "/src" + mount: "/src": from: repository +} + +// Build the docs website +docs: yarn.#Package & { + source: repository + cwd: "./tools/gendocs" + buildDir: "./tools/gendocs/public" + args: ["--prefix-paths"] + env: VERSION: version +} + +// Upload to S3 +website: s3.#Sync & { + config: awsConfig + source: docs.build + delete: true + target: "s3://docs.dagger.io/\(version)/" +} + +// generate and upload a `tags.json` file for the navbar version selector +tags: git.#Tags & { + "repository": repository +} +versions: [ for name in tags.tags {tag: name}, { + tag: "devel" +}] + +versionsObject: s3.#Put & { + config: awsConfig + sourceInline: json.Marshal(versions) + contentType: "application/json" + target: "s3://docs.dagger.io/tags.json" +} + +// if we're building a release, redirect the docs website to this page +if version != "devel" { + redirect: s3.#Put & { + config: awsConfig + sourceInline: #""" + + + + + + + Nothing to see here; see the latest version of the docs. + + + """# + contentType: "text/html" + target: "s3://docs.dagger.io/index.html" + } +} diff --git a/.dagger/env/docs/values.yaml b/.dagger/env/docs/values.yaml new file mode 100644 index 00000000..27e3888f --- /dev/null +++ b/.dagger/env/docs/values.yaml @@ -0,0 +1,35 @@ +name: docs +inputs: + awsConfig.accessKey: + secret: ENC[AES256_GCM,data:/KR+mkBb51etyZqiQnl4kxIl4vw=,iv:lFBuaqK9MVr5fYGMM8bN/XyZ9/oUInDWvzhYuK8Yj20=,tag:sHwcSTJ1lKzIDRYzr4Z/yg==,type:str] + awsConfig.region: + text: us-east-1 + awsConfig.secretKey: + secret: ENC[AES256_GCM,data:0bHcnNwbKR2F+PKB/Xzs06zsvJHENPZHEcx9SUN3Sn2/fzf0fA2G2w==,iv:A306R2ldjigteL6c0jkvOxZbHtxhlobP2FuPknuf+N4=,tag:CvDqdrej34Kbh8Y7zG5O8Q==,type:str] + repository: + dir: + path: . + exclude: + - '**/node_modules' + - cmd/dagger/dagger + - cmd/dagger/dagger-debug +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1gxwmtwahzwdmrskhf90ppwlnze30lgpm056kuesrxzeuyclrwvpsupwtpk + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBaZVVuYThsYk9YcWhYb0g4 + TDhZQ21YN0FCRExKV2tqbVVUNTg5MWRUVUJzCndjc28yVUZEK3ZoQzVDQkk4emZQ + WGx2bUxSZlBENXlibzQ1MVkvc2I2MVkKLS0tIFJKS0ZENFhuVmdUM2h1a2xrK01a + ejRKQXNFZzBTbUxpc05acnkxQ2U2UkEKX1byNj64xOiRGAJ9lwh55d/mlasI3H6H + b+o3HbXSbV0G0UwQxEOisntR6o27ry/l12ai/sOQ4f9MXm6FRw2XTg== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2021-05-29T02:37:17Z" + mac: ENC[AES256_GCM,data:mXlkcR6U0sQwXdk4mYMKmA6/tcZWVtQt76RVfYOj3uE89XgIUQhk5qts/fp8DMpOB90KZtUJB2Im2+ppqdhtKQO2xcp0Cj6WN1omYRdGbSAMBMPtIbbAdzMcZwvCScRvfDn1ecCSeHikTpDlvUImmoOJLH4ItvLq7JK3oUgPvUs=,iv:ckI70eAguY4p8eTI2W5Iws1zYaqkZuHcNWwjGBjbVYk=,tag:/hoRjWxK/5oxbmia4TgcKA==,type:str] + pgp: [] + encrypted_suffix: secret + version: 3.7.1 diff --git a/environment/pipeline.go b/environment/pipeline.go index a94de13f..08c4f74b 100644 --- a/environment/pipeline.go +++ b/environment/pipeline.go @@ -213,6 +213,8 @@ func (p *Pipeline) doOp(ctx context.Context, op *compiler.Value, st llb.State) ( return p.Local(ctx, op, st) case "load": return p.Load(ctx, op, st) + case "workdir": + return p.Workdir(ctx, op, st) case "subdir": return p.Subdir(ctx, op, st) case "docker-build": @@ -232,6 +234,14 @@ func (p *Pipeline) vertexNamef(format string, a ...interface{}) string { return prefix + " " + name } +func (p *Pipeline) Workdir(ctx context.Context, op *compiler.Value, st llb.State) (llb.State, error) { + path, err := op.Lookup("path").String() + if err != nil { + return st, err + } + return st.Dir(path), nil +} + func (p *Pipeline) Subdir(ctx context.Context, op *compiler.Value, st llb.State) (llb.State, error) { // FIXME: this could be more optimized by carrying subdir path as metadata, // and using it in copy, load or mount. diff --git a/stdlib/dagger/op/op.cue b/stdlib/dagger/op/op.cue index 3961e7e2..aeb94423 100644 --- a/stdlib/dagger/op/op.cue +++ b/stdlib/dagger/op/op.cue @@ -40,6 +40,11 @@ package op dir: string } +#Workdir: { + do: "workdir" + path: string +} + #Exec: { do: "exec" args: [...string] diff --git a/stdlib/dagger/op/op_fullop.cue b/stdlib/dagger/op/op_fullop.cue index fc763832..3fa35920 100644 --- a/stdlib/dagger/op/op_fullop.cue +++ b/stdlib/dagger/op/op_fullop.cue @@ -12,6 +12,7 @@ package op #Copy | #Load | #Subdir | + #Workdir | #WriteFile | #Mkdir | #DockerBuild) & {do: string} diff --git a/stdlib/git/git.cue b/stdlib/git/git.cue index 35713db0..aa07e4eb 100644 --- a/stdlib/git/git.cue +++ b/stdlib/git/git.cue @@ -1,7 +1,9 @@ package git import ( + "dagger.io/dagger" "dagger.io/dagger/op" + "dagger.io/alpine" ) // A git repository @@ -23,3 +25,82 @@ import ( }, ] } + +// Get the name of the current checked out branch or tag +#CurrentBranch: { + repository: dagger.#Artifact @dagger(input) + name: { + string + @dagger(output) + + #up: [ + op.#Load & { + from: alpine.#Image & { + package: bash: "=~5.1" + package: git: "=~2.30" + } + }, + + op.#Exec & { + mount: "/repository": from: repository + dir: "/repository" + args: [ + "/bin/bash", + "--noprofile", + "--norc", + "-eo", + "pipefail", + "-c", + #""" + printf "$(git symbolic-ref -q --short HEAD || git describe --tags --exact-match)" > /name.txt + """#, + ] + }, + + op.#Export & { + source: "/name.txt" + format: "string" + }, + ] + } +} + +// List tags of a repository +#Tags: { + repository: dagger.#Artifact @dagger(input) + tags: { + [...string] + @dagger(output) + + #up: [ + op.#Load & { + from: alpine.#Image & { + package: bash: "=~5.1" + package: jq: "=~1.6" + package: git: "=~2.30" + } + }, + + op.#Exec & { + mount: "/repository": from: repository + dir: "/repository" + args: [ + "/bin/bash", + "--noprofile", + "--norc", + "-eo", + "pipefail", + "-c", + #""" + git tag -l | jq --raw-input --slurp 'split("\n") | map(select(. != ""))' > /tags.json + """#, + ] + }, + + op.#Export & { + source: "/tags.json" + format: "json" + }, + ] + } +} From a949bbf15710ad8435e97ec27a26a3fc9b231e98 Mon Sep 17 00:00:00 2001 From: Andrea Luzzardi Date: Wed, 2 Jun 2021 15:36:43 -0700 Subject: [PATCH 5/7] docs: deploy: switch to docusaurus based deploys Signed-off-by: Andrea Luzzardi --- .dagger/env/docs/plan/main.cue | 86 +++------------------------------- .dagger/env/docs/values.yaml | 14 +++--- 2 files changed, 13 insertions(+), 87 deletions(-) diff --git a/.dagger/env/docs/plan/main.cue b/.dagger/env/docs/plan/main.cue index 183b628d..e61a3d8f 100644 --- a/.dagger/env/docs/plan/main.cue +++ b/.dagger/env/docs/plan/main.cue @@ -1,95 +1,23 @@ package main import ( - "encoding/json" - "dagger.io/dagger" - "dagger.io/os" - "dagger.io/js/yarn" - "dagger.io/git" - "dagger.io/docker" - - "dagger.io/aws" - "dagger.io/aws/s3" + "dagger.io/netlify" ) // dagger repository repository: dagger.#Artifact @dagger(input) -// docs version -version: string | *"devel" @dagger(input) - -// if repository is checked out at a tag, use it as the version -tag: git.#CurrentBranch & { - "repository": repository -} -if (tag.name & =~"^v") != _|_ { - version: tag.name -} - -// AWS credentials -awsConfig: aws.#Config @dagger(input) - -// Lint the markdowns -lint: os.#Container & { - image: docker.#Pull & { - from: "tmknom/markdownlint:0.23.1" - } - - command: "markdownlint ./docs" - dir: "/src" - mount: "/src": from: repository -} - // Build the docs website docs: yarn.#Package & { source: repository - cwd: "./tools/gendocs" - buildDir: "./tools/gendocs/public" - args: ["--prefix-paths"] - env: VERSION: version + cwd: "tools/daggosaurus/" + buildDir: "tools/daggosaurus/build" } -// Upload to S3 -website: s3.#Sync & { - config: awsConfig - source: docs.build - delete: true - target: "s3://docs.dagger.io/\(version)/" -} - -// generate and upload a `tags.json` file for the navbar version selector -tags: git.#Tags & { - "repository": repository -} -versions: [ for name in tags.tags {tag: name}, { - tag: "devel" -}] - -versionsObject: s3.#Put & { - config: awsConfig - sourceInline: json.Marshal(versions) - contentType: "application/json" - target: "s3://docs.dagger.io/tags.json" -} - -// if we're building a release, redirect the docs website to this page -if version != "devel" { - redirect: s3.#Put & { - config: awsConfig - sourceInline: #""" - - - - - - - Nothing to see here; see the latest version of the docs. - - - """# - contentType: "text/html" - target: "s3://docs.dagger.io/index.html" - } +// Deploy the docs website +site: netlify.#Site & { + name: string | *"docs-dagger-io" @dagger(input) + contents: docs.build } diff --git a/.dagger/env/docs/values.yaml b/.dagger/env/docs/values.yaml index 27e3888f..c7d9acdd 100644 --- a/.dagger/env/docs/values.yaml +++ b/.dagger/env/docs/values.yaml @@ -1,11 +1,5 @@ name: docs inputs: - awsConfig.accessKey: - secret: ENC[AES256_GCM,data:/KR+mkBb51etyZqiQnl4kxIl4vw=,iv:lFBuaqK9MVr5fYGMM8bN/XyZ9/oUInDWvzhYuK8Yj20=,tag:sHwcSTJ1lKzIDRYzr4Z/yg==,type:str] - awsConfig.region: - text: us-east-1 - awsConfig.secretKey: - secret: ENC[AES256_GCM,data:0bHcnNwbKR2F+PKB/Xzs06zsvJHENPZHEcx9SUN3Sn2/fzf0fA2G2w==,iv:A306R2ldjigteL6c0jkvOxZbHtxhlobP2FuPknuf+N4=,tag:CvDqdrej34Kbh8Y7zG5O8Q==,type:str] repository: dir: path: . @@ -13,6 +7,10 @@ inputs: - '**/node_modules' - cmd/dagger/dagger - cmd/dagger/dagger-debug + site.account.name: + text: blocklayer + site.account.token: + secret: ENC[AES256_GCM,data:jPJ8N6cAmtYnQh2SyhM9bQGfkhz777S4fyPDm2YhujwgXH6EogN2Uyw6Ew==,iv:gDchoJYLdQ8IPxrUUIsQ9s2f12JOhh7p573DwOIV2zE=,tag:okatHyjVGPGNOt+aw4iUHg==,type:str] sops: kms: [] gcp_kms: [] @@ -28,8 +26,8 @@ sops: ejRKQXNFZzBTbUxpc05acnkxQ2U2UkEKX1byNj64xOiRGAJ9lwh55d/mlasI3H6H b+o3HbXSbV0G0UwQxEOisntR6o27ry/l12ai/sOQ4f9MXm6FRw2XTg== -----END AGE ENCRYPTED FILE----- - lastmodified: "2021-05-29T02:37:17Z" - mac: ENC[AES256_GCM,data:mXlkcR6U0sQwXdk4mYMKmA6/tcZWVtQt76RVfYOj3uE89XgIUQhk5qts/fp8DMpOB90KZtUJB2Im2+ppqdhtKQO2xcp0Cj6WN1omYRdGbSAMBMPtIbbAdzMcZwvCScRvfDn1ecCSeHikTpDlvUImmoOJLH4ItvLq7JK3oUgPvUs=,iv:ckI70eAguY4p8eTI2W5Iws1zYaqkZuHcNWwjGBjbVYk=,tag:/hoRjWxK/5oxbmia4TgcKA==,type:str] + lastmodified: "2021-06-02T22:14:46Z" + mac: ENC[AES256_GCM,data:x/Up/GCLTwIWSbyxvy3S79j4gbKRRYnDguvgPJFAii2PS6rjSU7KHtwM9WbUqQtd+NDbe1eWjdmAC4jPwVsa9OY7s+heR3597OpTh0pHcOgTrc4fTVN9IVHwehlg4hJU00iL1oiiHfeCD5dMUGeIRyqRqoAyMJrPdC9IDwjnp6E=,iv:IUbrkPQqLC/wnfKZMnOK9jKSc+xDXpeJwKLXuioifyE=,tag:2l+FhV3k5WvhQyvvf37Hjw==,type:str] pgp: [] encrypted_suffix: secret version: 3.7.1 From 335e2f7c2464f7df15546825760abe50752e5f83 Mon Sep 17 00:00:00 2001 From: Andrea Luzzardi Date: Wed, 2 Jun 2021 15:38:52 -0700 Subject: [PATCH 6/7] docs: switch release flow to dagger Signed-off-by: Andrea Luzzardi --- .dagger/env/docs/plan/main.cue | 2 +- .github/workflows/docs.yml | 72 ++-------------------------------- 2 files changed, 4 insertions(+), 70 deletions(-) diff --git a/.dagger/env/docs/plan/main.cue b/.dagger/env/docs/plan/main.cue index e61a3d8f..e8f07048 100644 --- a/.dagger/env/docs/plan/main.cue +++ b/.dagger/env/docs/plan/main.cue @@ -18,6 +18,6 @@ docs: yarn.#Package & { // Deploy the docs website site: netlify.#Site & { - name: string | *"docs-dagger-io" @dagger(input) + name: string | *"docs-dagger-io" @dagger(input) contents: docs.build } diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 6f1ba43e..dcd3541d 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -2,8 +2,6 @@ name: Docs on: push: - branches: - - main tags: - v* paths: @@ -15,75 +13,11 @@ on: jobs: deploy: runs-on: ubuntu-latest - env: - AWS_ACCESS_KEY_ID: ${{ secrets.DOCS_AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.DOCS_AWS_SECRET_ACCESS_KEY }} - AWS_DEFAULT_REGION: "us-east-1" - steps: - - name: Set Version - id: vars - run: | - tag=${GITHUB_REF#refs/*/} - [ "$tag" = "main" ] && echo ::set-output name=tag::devel || echo ::set-output name=tag::$tag - - # fetch-depth: '0' enables listing all tags for version selector - uses: actions/checkout@v2 with: fetch-depth: "0" - - ################################################################# - # BUILD SITE - ################################################################# - - # Install Node - - uses: actions/setup-node@v2 + - uses: dagger/dagger-action@v1 with: - node-version: "14" - - run: yarn --cwd ./tools/gendocs - - name: Build Site - run: yarn --cwd ./tools/gendocs build --prefix-paths - env: - VERSION: ${{steps.vars.outputs.tag}} - - ################################################################# - # DEPLOY TO S3 - ################################################################# - - # deploy the site in the right foder ( tag or devel) - - name: S3 Sync - uses: ItsKarma/aws-cli@v1.70.0 - with: - args: s3 sync --delete ./tools/gendocs/public/ s3://docs.dagger.io/${{steps.vars.outputs.tag}}/ - - # list All Tags in json file for version selector - # upload to /tags.json - - name: Create tags.json - run: echo "[" {\"tag\"':' \"$(git tag -l "v*" | tr '\n' '|' | sed -e 's/|/"}, {\"tag\"':' "/g')devel\"} "]" > tags.json - - name: Copy tags.json - uses: ItsKarma/aws-cli@v1.70.0 - with: - args: s3 cp ./tags.json s3://docs.dagger.io/ - - # landing alway on latest tag - # use S3 Rediret objet - # upload to /docs/index.html - - name: Create index.html - run: | - cat < index.html - - - - - - - Nothing to see here; see the - latest version of the docs. - - - EOF - - name: Copy index.html - if: ${{ steps.vars.outputs.tag != 'devel' }} - uses: ItsKarma/aws-cli@v1.70.0 - with: - args: s3 cp --cache-control max-age=0 ./index.html s3://docs.dagger.io/ + age-key: ${{ secrets.DAGGER_AGE_KEY }} + args: up -e docs From 65c9b7de17963a8d526089614311f12ca0673ab0 Mon Sep 17 00:00:00 2001 From: Andrea Luzzardi Date: Wed, 2 Jun 2021 15:49:41 -0700 Subject: [PATCH 7/7] docs: remove tools/gendocs Signed-off-by: Andrea Luzzardi --- tools/gendocs/.gitignore | 71 - tools/gendocs/LICENSE | 21 - tools/gendocs/README.md | 61 - tools/gendocs/docs | 1 - tools/gendocs/gatsby-config.js | 28 - tools/gendocs/package.json | 34 - .../gatsby-theme-docs/assets/dagger-logo.png | Bin 25249 -> 0 bytes .../gatsby-theme-docs/components/Logos.js | 6 - .../components/Sidebar/ExternalLink/index.js | 19 - .../components/Sidebar/InternalLink/index.js | 17 - .../components/Sidebar/Select/index.js | 30 - .../components/Sidebar/index.js | 95 - .../components/Sidebar/styles.js | 139 - .../gatsby-theme-docs/styles/theme.js | 15 - .../util/copy-to-clipboard.js | 27 - .../gatsby-theme-docs/util/slug.js | 11 - .../@rocketseat/gatsby-theme-docs/util/url.js | 5 - tools/gendocs/src/pages/404.js | 18 - tools/gendocs/static/banner.png | Bin 79075 -> 0 bytes tools/gendocs/static/favicon.png | Bin 9653 -> 0 bytes tools/gendocs/yarn.lock | 14640 ---------------- 21 files changed, 15238 deletions(-) delete mode 100644 tools/gendocs/.gitignore delete mode 100644 tools/gendocs/LICENSE delete mode 100644 tools/gendocs/README.md delete mode 120000 tools/gendocs/docs delete mode 100644 tools/gendocs/gatsby-config.js delete mode 100644 tools/gendocs/package.json delete mode 100644 tools/gendocs/src/@rocketseat/gatsby-theme-docs/assets/dagger-logo.png delete mode 100644 tools/gendocs/src/@rocketseat/gatsby-theme-docs/components/Logos.js delete mode 100644 tools/gendocs/src/@rocketseat/gatsby-theme-docs/components/Sidebar/ExternalLink/index.js delete mode 100644 tools/gendocs/src/@rocketseat/gatsby-theme-docs/components/Sidebar/InternalLink/index.js delete mode 100644 tools/gendocs/src/@rocketseat/gatsby-theme-docs/components/Sidebar/Select/index.js delete mode 100644 tools/gendocs/src/@rocketseat/gatsby-theme-docs/components/Sidebar/index.js delete mode 100644 tools/gendocs/src/@rocketseat/gatsby-theme-docs/components/Sidebar/styles.js delete mode 100644 tools/gendocs/src/@rocketseat/gatsby-theme-docs/styles/theme.js delete mode 100644 tools/gendocs/src/@rocketseat/gatsby-theme-docs/util/copy-to-clipboard.js delete mode 100644 tools/gendocs/src/@rocketseat/gatsby-theme-docs/util/slug.js delete mode 100644 tools/gendocs/src/@rocketseat/gatsby-theme-docs/util/url.js delete mode 100644 tools/gendocs/src/pages/404.js delete mode 100644 tools/gendocs/static/banner.png delete mode 100644 tools/gendocs/static/favicon.png delete mode 100644 tools/gendocs/yarn.lock diff --git a/tools/gendocs/.gitignore b/tools/gendocs/.gitignore deleted file mode 100644 index 542ebfb2..00000000 --- a/tools/gendocs/.gitignore +++ /dev/null @@ -1,71 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Typescript v1 declaration files -typings/ - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# dotenv environment variable files -.env* - -# gatsby files -.cache/ -public - -# Mac files -.DS_Store - -# Yarn -yarn-error.log -.pnp/ -.pnp.js -# Yarn Integrity file -.yarn-integrity - -.idea/ diff --git a/tools/gendocs/LICENSE b/tools/gendocs/LICENSE deleted file mode 100644 index e74feb36..00000000 --- a/tools/gendocs/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2021 Rocketseat - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/tools/gendocs/README.md b/tools/gendocs/README.md deleted file mode 100644 index 9dcc6808..00000000 --- a/tools/gendocs/README.md +++ /dev/null @@ -1,61 +0,0 @@ -

- A illustration of file that is the @rocketseat/gatsby-theme-docs logo -

- -

- Gatsby Starter: Rocket Docs -

- -

- Out of the box Gatsby Starter for creating documentation websites easily and quickly. With support for MDX, code highlight, Analytics, SEO and more 🔥 Using the theme: @rocketseat/gatsby-theme-docs -

- -

- PRs welcome! - - License - - - Follow @rocketseat - -

- -## 🚀 Features - -- 📝 MDX for docs; -- 🛣 Yaml-based sidebar navigation; -- 📱 Responsive and mobile friendly; -- 🖥 Code highlighting with [prism-react-renderer](https://github.com/FormidableLabs/prism-react-renderer) and [react-live](https://github.com/FormidableLabs/react-live) support; -- 🥇 SEO (Sitemap, schema.org data, Open Graph and Twitter tags). -- 📈 Google Analytics support; -- 📄 Custom docs schema; -- 🖱 Table of Contents; -- ⚡️ Offline Support & WebApp Manifest; -- and much more 🔥 - -## ⚡️ Getting started - -1. Create the website. - - ```sh - npx gatsby new rocket-docs https://github.com/rocketseat/gatsby-starter-rocket-docs - ``` - -2. Start developing. - - ```sh - cd rocket-docs - gatsby develop - ``` - -3. Are you ready for launch? - - Your site is now running at `http://localhost:8000` - -## 📄 Docs - -Looking for docs? Check our live demo and documentation [website](https://rocketdocs.netlify.app). - ---- - -Made with 💜 by Rocketseat :wave: [check our community!](https://discordapp.com/invite/gCRAFhc) diff --git a/tools/gendocs/docs b/tools/gendocs/docs deleted file mode 120000 index 92a7f825..00000000 --- a/tools/gendocs/docs +++ /dev/null @@ -1 +0,0 @@ -../../docs \ No newline at end of file diff --git a/tools/gendocs/gatsby-config.js b/tools/gendocs/gatsby-config.js deleted file mode 100644 index 74f783b3..00000000 --- a/tools/gendocs/gatsby-config.js +++ /dev/null @@ -1,28 +0,0 @@ -module.exports = { - pathPrefix: `/${process.env.VERSION}`, - siteMetadata: { - siteTitle: `Dagger Docs`, - defaultTitle: `Dagger Docs`, - siteTitleShort: `Dagger Docs`, - siteDescription: `Dagger Documentation`, - siteUrl: `https://launch.dagger.io`, - siteAuthor: `@dagger`, - siteImage: `/banner.png`, - siteLanguage: `en`, - themeColor: `#1890FF`, - docVersion : `${process.env.VERSION}`, - }, - flags: { PRESERVE_WEBPACK_CACHE: true }, - plugins: [ - { - resolve: `@rocketseat/gatsby-theme-docs`, - options: { - basePath: `/`, - configPath: `docs/sidebar`, - docsPath: `docs`, - repositoryUrl: `https://github.com/dagger/dagger`, - baseDir: `/`, - }, - }, - ], -}; diff --git a/tools/gendocs/package.json b/tools/gendocs/package.json deleted file mode 100644 index aef687f0..00000000 --- a/tools/gendocs/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "dagger-docs", - "private": true, - "version": "1.0.0", - "description": "dagger dc", - "author": "Dagger", - "license": "MIT", - "starter-name": "dagger-docs-generator", - "dependencies": { - "@rocketseat/gatsby-theme-docs": "^2.3.1", - "gatsby": "^3.0.4", - "gatsby-plugin-canonical-urls": "^3.0.0", - "gatsby-plugin-google-analytics": "^3.0.0", - "gatsby-plugin-manifest": "^3.0.0", - "gatsby-plugin-offline": "^4.0.0", - "gatsby-plugin-remove-trailing-slashes": "^3.0.0", - "gatsby-plugin-sitemap": "^3.0.0", - "prop-types": "^15.7.2", - "react": "^17.0.1", - "react-dom": "^17.0.1" - }, - "devDependencies": {}, - "keywords": [ - "gatsby", - "rocketseat", - "gatsby-starter" - ], - "scripts": { - "build": "gatsby build", - "start": "gatsby develop", - "serve": "gatsby serve", - "clean": "gatsby clean" - } -} diff --git a/tools/gendocs/src/@rocketseat/gatsby-theme-docs/assets/dagger-logo.png b/tools/gendocs/src/@rocketseat/gatsby-theme-docs/assets/dagger-logo.png deleted file mode 100644 index 7c5e64e82a79df9dcaea6322ecdca1ddd3b5a86a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25249 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 -} \ No newline at end of file diff --git a/tools/gendocs/src/@rocketseat/gatsby-theme-docs/components/Sidebar/ExternalLink/index.js b/tools/gendocs/src/@rocketseat/gatsby-theme-docs/components/Sidebar/ExternalLink/index.js deleted file mode 100644 index dcbad43c..00000000 --- a/tools/gendocs/src/@rocketseat/gatsby-theme-docs/components/Sidebar/ExternalLink/index.js +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { FiExternalLink } from 'react-icons/fi'; - -export default function ExternalLink({ link, label }) { - return ( - - {label} - - - ); -} - -ExternalLink.propTypes = { - link: PropTypes.string.isRequired, - label: PropTypes.string.isRequired, -}; diff --git a/tools/gendocs/src/@rocketseat/gatsby-theme-docs/components/Sidebar/InternalLink/index.js b/tools/gendocs/src/@rocketseat/gatsby-theme-docs/components/Sidebar/InternalLink/index.js deleted file mode 100644 index f951b77f..00000000 --- a/tools/gendocs/src/@rocketseat/gatsby-theme-docs/components/Sidebar/InternalLink/index.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import {Link} from 'gatsby'; - -export default function InternalLink({ link, label }) { - - return ( - - {label} - - ); -} - -InternalLink.propTypes = { - link: PropTypes.string.isRequired, - label: PropTypes.string.isRequired, -}; diff --git a/tools/gendocs/src/@rocketseat/gatsby-theme-docs/components/Sidebar/Select/index.js b/tools/gendocs/src/@rocketseat/gatsby-theme-docs/components/Sidebar/Select/index.js deleted file mode 100644 index 22b19355..00000000 --- a/tools/gendocs/src/@rocketseat/gatsby-theme-docs/components/Sidebar/Select/index.js +++ /dev/null @@ -1,30 +0,0 @@ -import React, { useEffect, useState } from "react"; -import { Select as SelectStyled } from '../styles'; - -const Select = () => { - const isBrowser = typeof window !== "undefined" - const [tagsList, setTagsList] = useState([]) - const currentLocation = isBrowser ? window.location.pathname.split('/') : [] - currentLocation.shift() //remove last trailing slash - - useEffect(() => { - async function getTags() { - const fetchTags = await fetch('/tags.json').then(result => result.json()); - if (fetchTags.length > 0) { - setTagsList(fetchTags); - } - } - - getTags() - }, []) - - return ( - isBrowser ? window.location.pathname = `/${e.currentTarget.value}` : null}> - {tagsList.map(t => ( - - ))} - - ); -}; - -export default Select; diff --git a/tools/gendocs/src/@rocketseat/gatsby-theme-docs/components/Sidebar/index.js b/tools/gendocs/src/@rocketseat/gatsby-theme-docs/components/Sidebar/index.js deleted file mode 100644 index e1aff7fe..00000000 --- a/tools/gendocs/src/@rocketseat/gatsby-theme-docs/components/Sidebar/index.js +++ /dev/null @@ -1,95 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { useStaticQuery, graphql, Link } from 'gatsby'; -import { useSidebar } from '@rocketseat/gatsby-theme-docs-core'; - -import { - Container, - LogoContainer, - List, - Heading, - Item, - SubItem, -} from './styles'; -import Select from './Select' -import { isExternalUrl } from '../../util/url'; -import ExternalLink from './ExternalLink'; -import InternalLink from './InternalLink'; -import Logo from '../Logos'; - -function ListWithSubItems({ children, text }) { - return ( - <> - {text} - {children} - - ); -} - -export default function Sidebar({ isMenuOpen }) { - const { - site: { - siteMetadata: { basePath }, - }, - } = useStaticQuery(graphql` - { - site { - siteMetadata { - basePath - } - } - } - `); - - const data = useSidebar(); - - function renderLink(link, label) { - return isExternalUrl(link) ? ( - - ) : ( - - ); - } - - return ( - - - - -