diff --git a/docs/learn/tests/getting-started/plans/local/local.cue b/docs/learn/tests/getting-started/plans/local/local.cue index a9460987..63ed78d3 100644 --- a/docs/learn/tests/getting-started/plans/local/local.cue +++ b/docs/learn/tests/getting-started/plans/local/local.cue @@ -3,6 +3,7 @@ package todoapp import ( "alpha.dagger.io/dagger" "alpha.dagger.io/docker" + "alpha.dagger.io/http" ) // docker local socket @@ -24,10 +25,16 @@ registry: docker.#Run & { socket: dockerSocket } +// As we pushed the registry to our local docker +// we need to wait for the container to be up +wait: http.#Wait & { + url: "localhost:5042" +} + // push to our local registry // this concrete value satisfies the string constraint // we defined in the previous file -push: target: "localhost:5042/todoapp" +push: target: "\(wait.url)/todoapp" // Application URL appURL: "http://localhost:8080/" & dagger.#Output diff --git a/docs/learn/tests/getting-started/plans/todoapp.cue b/docs/learn/tests/getting-started/plans/todoapp.cue index 8fa8b0cd..e3812196 100644 --- a/docs/learn/tests/getting-started/plans/todoapp.cue +++ b/docs/learn/tests/getting-started/plans/todoapp.cue @@ -2,9 +2,9 @@ package todoapp import ( "alpha.dagger.io/dagger" - "alpha.dagger.io/os" "alpha.dagger.io/docker" "alpha.dagger.io/js/yarn" + "alpha.dagger.io/os" ) // Build the source code using Yarn diff --git a/docs/reference/http.md b/docs/reference/http.md index 71d6e0b9..41c83cd6 100644 --- a/docs/reference/http.md +++ b/docs/reference/http.md @@ -72,3 +72,15 @@ _No input._ | ------------- |:-------------: |:-------------: | |*statusCode* | `string` |- | |*body* | `string` |- | + +## http.#Wait + +URL listener Creates a dependency on URL + +### http.#Wait Inputs + +_No input._ + +### http.#Wait Outputs + +_No output._ diff --git a/stdlib/.dagger/env/docker-pull/values.yaml b/stdlib/.dagger/env/docker-pull/values.yaml index 75138a21..1ddc3303 100644 --- a/stdlib/.dagger/env/docker-pull/values.yaml +++ b/stdlib/.dagger/env/docker-pull/values.yaml @@ -3,7 +3,7 @@ plan: name: docker-pull inputs: ref: - text: docker.io/daggerio/ci-test:pncdyzkdemof@sha256:b92cbbfef6b952befc38812cd88cf5c4c1012f6df2891595c226f56cc053334e + text: docker.io/daggerio/ci-test:tyrgcrtlasex@sha256:3b308dec2f3d4c563b9c71ce4ddc660e476b899d06fa37f3b9fef350c1062a1f sops: kms: [] gcp_kms: [] @@ -19,8 +19,8 @@ sops: SG1raUVNTzZIWDltV1pOS3hySHlJeWcKg3blmstOGcxtPww513+mAEA0MWOXwNAT 5ngRvG6MraW3g9dhIuUYOwjuJyz1Z07/DBEocSxnjSyw45ZCkM1/9Q== -----END AGE ENCRYPTED FILE----- - lastmodified: "2021-08-31T10:10:02Z" - mac: ENC[AES256_GCM,data:30qNlAVLJunPEboTzeIxcsZ06LcLiDiXXJLVqHE328hcezcOYGsvhlYTiGEzxtAsv78Mwxw54oSbiFZmCKoew9bTZFUyb6FcFVk4GG8z2I8pn7FkZlcnEknWinVf9Tc/h5R/g4/BBGzsBf2dr4fx4ADewwO2z1Df/8wdup0PD4E=,iv:KJcMdpLCfSU1LvvPMXitSPzm0JPwrDWdLncdvVFngNk=,tag:X2/D+RhEnyizZHXJWYnmmg==,type:str] + lastmodified: "2021-11-23T18:15:32Z" + mac: ENC[AES256_GCM,data:+HpG1ZDND1Japu1hLgTVKF6CfEUbYp+sEBpv0WtsCHcHGYeYVkZT8ZJKajWlz8uFfikpKv76FkBw8XqKVXyPZYTQWuo9VvmPTF5HajiVE6kP5Ax3/5Sh7ecwfGdbqE3mQoj+jaQE8NBnGbCBljij/xFYW63fIaurqsyPWTQl2YI=,iv:fBPseUNueHO4ZUnlwDljfAwUvi4UyjGysXMTCmoAgYw=,tag:Pg4dGX4/05SahATlE6zrsA==,type:str] pgp: [] encrypted_suffix: secret version: 3.7.1 diff --git a/stdlib/.dagger/env/http/values.yaml b/stdlib/.dagger/env/http/values.yaml index 76b6c328..7ef0dfa9 100644 --- a/stdlib/.dagger/env/http/values.yaml +++ b/stdlib/.dagger/env/http/values.yaml @@ -1,6 +1,10 @@ plan: package: ./http/tests name: http +inputs: + TestDockersocket: + socket: + unix: /var/run/docker.sock sops: kms: [] gcp_kms: [] @@ -16,8 +20,8 @@ sops: NHkxc1VXWHBwZFN5WFNxamdPaGZLM3MKaZra2gWvKl7+pXSihV70/mQYel9697z2 eBSMuRPuZSjrg3JCBLhXTdIgUYxbMgWhILLpN5UqhTBVboUlRsURQA== -----END AGE ENCRYPTED FILE----- - lastmodified: "2021-10-19T11:50:42Z" - mac: ENC[AES256_GCM,data:iG/JWnCk8UpThscQBqd9l7R7k1Xae1ED7WbYqPQmK5GRXhb7hIZGENnjn1aARnFjlCtEob6WvutWaZe7q1P90ZCirwXVBGewAeHchHqFA0KmUORRdtjMkZjnlRLMDKYu6CeNkaVK1al+B87CPlCBKz5UMeL9gnvug0k298AxWLY=,iv:RZEtSdbkxwgq5xEucnC+qyD2RCMk1DuaShjCh5Ihe5M=,tag:swW4R7ni0zoxOrc9lrV9Ww==,type:str] + lastmodified: "2021-11-23T17:30:31Z" + mac: ENC[AES256_GCM,data:R82VFQG+vtFoH/H4R3TGfFzcmEBLRWv81/pfbYIoWGTH3iFmVgfiCXuqF2O4suhG6mlmiGVDCFBBGPfFvOIBPSwbAqOoNQrM+pXPk3nrm3KY6RLSiByZX3yS1G2HHzGSbQVDuxlTBGyXhpJZs1ZgysZguHUqtunbrjSpD4+iWE8=,iv:LhTwB1QKXCXz9tu03d5NHIv/Jwrgg3LXQYafXykFz/o=,tag:h0mgHTyfxflAuv/uYuRibw==,type:str] pgp: [] encrypted_suffix: secret version: 3.7.1 diff --git a/stdlib/.dagger/env/sanity-check/plan/cue.mod/pkg/.gitignore b/stdlib/.dagger/env/sanity-check/plan/cue.mod/pkg/.gitignore index a572e9ee..2d4dc1ae 100644 --- a/stdlib/.dagger/env/sanity-check/plan/cue.mod/pkg/.gitignore +++ b/stdlib/.dagger/env/sanity-check/plan/cue.mod/pkg/.gitignore @@ -1,2 +1,3 @@ -# dagger universe +# generated by dagger alpha.dagger.io +dagger.lock diff --git a/stdlib/cue.mod/pkg/.gitignore b/stdlib/cue.mod/pkg/.gitignore index a572e9ee..2d4dc1ae 100644 --- a/stdlib/cue.mod/pkg/.gitignore +++ b/stdlib/cue.mod/pkg/.gitignore @@ -1,2 +1,3 @@ -# dagger universe +# generated by dagger alpha.dagger.io +dagger.lock diff --git a/stdlib/http/http.cue b/stdlib/http/http.cue index d5b99145..2628324f 100644 --- a/stdlib/http/http.cue +++ b/stdlib/http/http.cue @@ -6,6 +6,7 @@ import ( "alpha.dagger.io/alpine" "alpha.dagger.io/dagger" + "alpha.dagger.io/dagger/op" "alpha.dagger.io/os" ) @@ -84,3 +85,70 @@ import ( "statusCode": strconv.Atoi(statusCode) } } + +// URL listener +// Creates a dependency on URL +#Wait: { + // URL to listen + url: string + + // Waiting time between checks (sec.) + interval: int | *30 + + // Max amount of retries + retries: int | *3 + + // Max initialization time (sec.) + startPeriod: int | *0 + + // Time until timeout (sec.) + timeout: int | *30 + + #up: [ + op.#Load & { + from: alpine.#Image & { + package: bash: "=~5.1" + package: curl: true + } + }, + op.#Exec & { + args: ["/bin/bash", "-c", + #""" + # (f: str -> int) + nb_retries=$(($NB_RETRIES+0)) + starting_period=$(($START_PERIOD+0)) + + status="0" + SECONDS=0 + # START_PERIOD implementation + while [ $SECONDS -lt $starting_period ]; do + status="$(curl --connect-timeout 1 -s -o /dev/null -w ''%{http_code}'' $HEALTH_URL)" + if [ "$status" == "200" ]; then + exit 0; + fi + sleep 1; + done + + # TIMEOUT, INTERVAL, INTERVAL implementation + for ((i=0;i/dev/null + test "$STATUS" = "200" + """# } - -#Command: #""" - test "$(cat /content.json | jq -r .current_user_url)" = 'https://api.github.com/user' - test "$STATUS" = "200" - """# diff --git a/stdlib/universe.bats b/stdlib/universe.bats index 86dbeec2..485ab84c 100644 --- a/stdlib/universe.bats +++ b/stdlib/universe.bats @@ -24,7 +24,9 @@ setup() { } @test "http" { - dagger -e http up + dagger -e http up + CONTAINER=$(docker container ls -q --filter "name=daggerci-test-wait-*") + docker stop "$CONTAINER" && docker rm "$CONTAINER" } @test "js/yarn" { @@ -86,7 +88,8 @@ setup() { @test "docker run: ports" { dagger -e docker-run-ports up CONTAINER=$(docker container ls -q --filter "name=daggerci-test-ports-*") - until docker inspect --format "{{json .State.Status }}" "$CONTAINER" | grep -m 1 "running"; do sleep 1 ; done + SECONDS=0 + while [[ "$(docker inspect --format '{{json .State.Status }}' todoapp | grep -m 1 'running')" != "running" && $SECONDS -lt 45 ]]; do sleep 1 ; done run curl -f -LI http://localhost:8080 assert_output --partial '200 OK' docker stop "$CONTAINER" && docker rm "$CONTAINER"