create http universe package
Signed-off-by: jffarge <slumbering.pierrot@gmail.com>
This commit is contained in:
2
stdlib/.dagger/env/http/.gitignore
vendored
Normal file
2
stdlib/.dagger/env/http/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
# dagger state
|
||||
state/**
|
23
stdlib/.dagger/env/http/values.yaml
vendored
Normal file
23
stdlib/.dagger/env/http/values.yaml
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
plan:
|
||||
package: ./http/tests
|
||||
name: http
|
||||
sops:
|
||||
kms: []
|
||||
gcp_kms: []
|
||||
azure_kv: []
|
||||
hc_vault: []
|
||||
age:
|
||||
- recipient: age1gxwmtwahzwdmrskhf90ppwlnze30lgpm056kuesrxzeuyclrwvpsupwtpk
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBhYjNpR1NHc3V4aGxGNzQ1
|
||||
YlZuQ0hrZHBDWGw0elJWZWU3c0U4KzVodEhzCkowME9JVlpWVEc1L2dHUE80Q29t
|
||||
bEpKTzRwYmhyc2N2a3dhaWg4aWZVWTQKLS0tIHNPWDVaQmh6SllzK2V3QjNJSWVH
|
||||
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]
|
||||
pgp: []
|
||||
encrypted_suffix: secret
|
||||
version: 3.7.1
|
81
stdlib/http/http.cue
Normal file
81
stdlib/http/http.cue
Normal file
@@ -0,0 +1,81 @@
|
||||
package http
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"strconv"
|
||||
|
||||
"alpha.dagger.io/alpine"
|
||||
"alpha.dagger.io/dagger"
|
||||
"alpha.dagger.io/os"
|
||||
)
|
||||
|
||||
#Get: #Do & {method: "GET"}
|
||||
#Post: #Do & {method: "POST"}
|
||||
#Put: #Do & {method: "PUT"}
|
||||
#Delete: #Do & {method: "DELETE"}
|
||||
#Do: {
|
||||
url: string
|
||||
method: "GET" | "POST" | "PUT" | "DELETE" | "PATH" | "HEAD"
|
||||
|
||||
request: {
|
||||
body: string | *""
|
||||
header: [string]: string | [...string]
|
||||
token: dagger.#Secret | *null
|
||||
}
|
||||
|
||||
ctr: os.#Container & {
|
||||
image: alpine.#Image & {
|
||||
package: curl: true
|
||||
package: bash: "=5.1.0-r0"
|
||||
package: jq: "~=1.6"
|
||||
}
|
||||
shell: path: "/bin/bash"
|
||||
always: true
|
||||
|
||||
env: {
|
||||
METHOD: method
|
||||
HEADERS: json.Marshal(request.header)
|
||||
BODY: request.body
|
||||
URL: url
|
||||
}
|
||||
if request.token != null {
|
||||
secret: "/token": request.token
|
||||
}
|
||||
command: #"""
|
||||
curlArgs=(
|
||||
"$URL"
|
||||
-L --fail --silent --show-error
|
||||
--write-out "%{http_code}"
|
||||
-X "$METHOD"
|
||||
-d "$BODY"
|
||||
-o /response
|
||||
)
|
||||
|
||||
headers="$(echo $HEADERS | jq -r 'to_entries | map(.key + ": " + (.value | tostring) + "\n") | add')"
|
||||
while read h; do
|
||||
curlArgs+=("-H" "$h")
|
||||
done <<< "$headers"
|
||||
|
||||
if [ -e /token ]; then
|
||||
curlArgs+=("-H" "Authorization: bearer $(cat /token)")
|
||||
fi
|
||||
|
||||
curl "${curlArgs[@]}" > /status
|
||||
"""#
|
||||
}
|
||||
|
||||
response: {
|
||||
body: {
|
||||
os.#File & {
|
||||
from: ctr
|
||||
path: "/response"
|
||||
}
|
||||
}.contents @dagger(output)
|
||||
statusCode: strconv.Atoi({
|
||||
os.#File & {
|
||||
from: ctr
|
||||
path: "/status"
|
||||
}
|
||||
}.contents) @dagger(output)
|
||||
}
|
||||
}
|
42
stdlib/http/tests/http.cue
Normal file
42
stdlib/http/tests/http.cue
Normal file
@@ -0,0 +1,42 @@
|
||||
package http
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
"alpha.dagger.io/alpine"
|
||||
"alpha.dagger.io/os"
|
||||
)
|
||||
|
||||
TestRequest: {
|
||||
req: #Get & {
|
||||
url: "https://api.github.com/"
|
||||
request: header: {
|
||||
Accept: "application/json"
|
||||
Test: ["A", "B"]
|
||||
}
|
||||
}
|
||||
|
||||
testRaw: os.#Container & {
|
||||
image: alpine.#Image & {
|
||||
package: jq: "~=1.6"
|
||||
}
|
||||
env: STATUS: "\(req.response.statusCode)"
|
||||
files: "/content.json": {
|
||||
content: req.response.body
|
||||
mode: 0o500
|
||||
}
|
||||
command: #"""
|
||||
test "$STATUS" = 200
|
||||
test "$(cat /content.json | jq -r .current_user_url)" = "https://api.github.com/user"
|
||||
"""#
|
||||
}
|
||||
|
||||
testJSON: os.#Container & {
|
||||
env: STATUS: "\(req.response.statusCode)"
|
||||
env: CONTENT: json.Unmarshal(req.response.body).current_user_url
|
||||
command: """
|
||||
test "$STATUS" = 200
|
||||
test "$CONTENT" = "https://api.github.com/user"
|
||||
"""
|
||||
}
|
||||
}
|
@@ -23,6 +23,10 @@ setup() {
|
||||
dagger -e go up
|
||||
}
|
||||
|
||||
@test "http" {
|
||||
dagger -e http up
|
||||
}
|
||||
|
||||
@test "js/yarn" {
|
||||
dagger -e js-yarn up
|
||||
}
|
||||
|
Reference in New Issue
Block a user