Stackbrew Packages
aws
Config
AWS Config shared by all AWS packages
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| region | string |
N/A |
cloudformation
Stack
AWS CloudFormation Stack
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| source | string |
Source is the Cloudformation template, either a Cue struct or a JSON/YAML string |
| config | aws.Config |
AWS Config |
| stackName | string |
Stackname is the cloudformation stack |
| parameters | { [string]: string } |
Stack parameters |
| stackOutput | run.output["/outputs/stack_output"] |
Output of the stack apply |
ecr
Credentials
Credentials retriever for ECR
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| status | "completed" | "error" | "cancelled" | "cached" | "skipped" |
N/A |
| code | " export AWS_ACCESS_KEY_ID=\"$(cat /inputs/aws/access_key)\"\n export AWS_SECRET_ACCESS_KEY=\"$(cat /inputs/aws/secret_key)\"\n\n credentials=$(cat /inputs/target | docker-credential-ecr-login get)\n\n echo $credentials | jq -j .Username \> /outputs/username\n echo $credentials | jq -j .Secret \> /outputs/secret\n echo $credentials | \\\n jq -j .ServerURL | \\\n sed \"s=http[s]*://==\" | \\\n cut -d'/' -f1 \> /outputs/registry" |
N/A |
| os | C{alpineVersion: "latest", alpineDigest: "sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d", package: (close((({[]: (pkg: string)-\>true, } & C{bash: true}) & C{jq: true})) & {curl: true}), extraCommand: (close([, ...string]) & ["curl -o \"/usr/local/bin/docker-credential-ecr-login\" \\\n \""+helperUrl+"\" && \\\n chmod +x \"/usr/local/bin/docker-credential-ecr-login\""])} |
N/A |
| input | {[]: (path: string)-\>(Directory | string | bytes | Cache | Secret), "/entrypoint.sh": code, "/inputs/aws/access_key": config.accessKey, "/inputs/aws/secret_key": config.secretKey, "/inputs/target": target} |
N/A |
| command | [(string & "/bin/bash"),(string & "--noprofile"),(string & "--norc"),(string & "-xeo"),(string & "pipefail"),(string & "/entrypoint.sh")] |
N/A |
| $bl | "bl.Run" |
N/A |
| auth | C{[]: (host: string)-\>RegistryCredentials, ""+target+"": credentials} |
Authentication for ECR Registries |
| environment | {[]: (_: string)-\>string, AWS_DEFAULT_REGION: config.region} |
N/A |
| workdir | string | *"/" |
N/A |
| runPolicy | "always" |
N/A |
| output | {[]: (path: string)-\>(Directory | string | bytes), "/outputs/registry": string, "/outputs/username": string, "/outputs/secret": string} |
N/A |
| target | string |
Target is the ECR image |
| config | aws.Config |
AWS Config |
| credentials | bl.RegistryCredentials & { username: output["/outputs/username"] secret: bl.Secret & { // FIXME: we should be able to output a bl.Secret directly value: base64.Encode(null, output["/outputs/secret"]) } } |
ECR credentials |
| helperUrl | "https://amazon-ecr-credential-helper-releases.s3.us-east-2.amazonaws.com/0.4.0/linux-amd64/docker-credential-ecr-login" |
N/A |
ecs
Task
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| cpu | *256 | uint |
N/A |
| memory | *512 | uint |
N/A |
| networkMode | *"bridge" | string |
N/A |
| containers | [...Container] |
N/A |
| resources | { ECSTaskDefinition: { Type: "AWS::ECS::TaskDefinition" Properties: { Cpu: strconv.FormatUint(cpu, 10) Memory: strconv.FormatUint(memory, 10) if (roleArn & string) != _|_ { TaskRoleArn: roleArn } NetworkMode: networkMode ContainerDefinitions: containers } } } |
N/A |
Container
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| Command | [...string] |
N/A |
| Name | string |
N/A |
| Image | string |
N/A |
Service
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| config | aws.Config |
N/A |
| resources | { ECSListenerRule: { Type: "AWS::ElasticLoadBalancingV2::ListenerRule" Properties: { ListenerArn: elbListenerArn Priority: elbRulePriority Conditions: [{ Field: "host-header" Values: [hostName] }] Actions: [{ Type: "forward" TargetGroupArn: Ref: "ECSTargetGroup" }] } } ECSTargetGroup: { Type: "AWS::ElasticLoadBalancingV2::TargetGroup" Properties: { VpcId: vpcID Port: 80 Protocol: "HTTP" } } ECSService: { Type: "AWS::ECS::Service" Properties: { Cluster: cluster DesiredCount: desiredCount LaunchType: launchType LoadBalancers: [{ TargetGroupArn: Ref: "ECSTargetGroup" ContainerName: containerName ContainerPort: containerPort }] ServiceName: serviceName TaskDefinition: Ref: "ECSTaskDefinition" DeploymentConfiguration: { MaximumPercent: 100 MinimumHealthyPercent: 50 } } DependsOn: "ECSListenerRule" } } |
N/A |
| cluster | string |
ECS cluster name or ARN |
| containerPort | int & \>=0 |
Container port |
| containerName | string |
Container name |
| launchType | "FARGATE" | "EC2" |
Service launch type |
| vpcID | string |
VPC id of the cluster |
| elbListenerArn | string |
ARN of the ELB listener |
| elbRulePriority | uint | *100 |
ELB rule priority |
| hostName | string |
Hostname of the publicly accessible service |
| serviceName | string |
Name of the service |
SimpleECSApp
SimpleECSApp is a simplified interface for ECS
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| config | aws.Config |
N/A |
| resources | C{ECSTaskDefinition: C{Type: "AWS::ECS::TaskDefinition", Properties: C{Cpu: FormatUint (cpu,10), Memory: FormatUint (memory,10), NetworkMode: networkMode, ContainerDefinitions: containers if ((roleArn & string) != _|_(from source)) yield C{TaskRoleArn: roleArn}}}, ECSListenerRule: C{Type: "AWS::ElasticLoadBalancingV2::ListenerRule", Properties: C{ListenerArn: elbListenerArn, Priority: elbRulePriority, Conditions: [C{Field: "host-header", Values: [hostName]}], Actions: [C{Type: "forward", TargetGroupArn: C{Ref: "ECSTargetGroup"}}]}}, ECSTargetGroup: C{Type: "AWS::ElasticLoadBalancingV2::TargetGroup", Properties: C{Protocol: "HTTP", VpcId: vpcID, Port: 80}}, ECSService: C{Type: "AWS::ECS::Service", Properties: C{Cluster: cluster, DesiredCount: desiredCount, LaunchType: launchType, LoadBalancers: [C{ContainerPort: containerPort, TargetGroupArn: C{Ref: "ECSTargetGroup"}, ContainerName: containerName}], ServiceName: serviceName, TaskDefinition: C{Ref: "ECSTaskDefinition"}, DeploymentConfiguration: C{MaximumPercent: 100, MinimumHealthyPercent: 50}}, DependsOn: "ECSListenerRule"}} |
N/A |
| containerPort | *80 | uint |
N/A |
| hostname | string |
N/A |
| containerImage | string |
N/A |
| infra | { cluster: string vpcID: string elbListenerArn: string } |
N/A |
| subDomain | strings.Split(hostname, ".")[0] |
N/A |
| out | cfn.stackOutput |
N/A |
| cfn | cloudformation.Stack & { config: inputConfig source: json.Marshal({ AWSTemplateFormatVersion: "2010-09-09" Description: "ECS App deployed with Blocklayer" Resources: resources }) stackName: "bl-ecs-\(subDomain)" } |
N/A |
eks
KubeConfig
KubeConfig config outputs a valid kube-auth-config for kubectl client
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| config | aws.Config |
AWS Config |
| cluster | string |
EKS cluster name |
elasticbeanstalk
Application
Elastic Beanstalk Application
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| config | aws.Config |
AWS Config |
| applicationName | string |
Beanstalk application name |
| out | run.output["/outputs/out"] |
N/A |
Environment
Elastic Beanstalk Environment
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| platform | string |
Elastic Beanstalk platform to use |
| config | aws.Config |
AWS Config |
| applicationName | string |
Application name |
| out | run.output["/outputs/out"] |
N/A |
| environmentName | string |
Beanstalk environment name |
| createOptions | { cname?: string tier?: string instance_type?: string instance_profile?: string service_role?: string keyname?: string scale?: string elb_type?: string } |
Environment create options; check eb create --help |
| cname | strings.TrimRight(run.output["/outputs/cname"], "\n") |
N/A |
Deployment
Elastic Beanstalk Deployment
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| config | aws.Config |
AWS Config |
| applicationName | string |
Application name |
| environmentName | string |
Beanstalk environment name |
| cname | strings.TrimRight(run.output["/outputs/cname"], "\n") |
N/A |
elb
NextRulePriority
Returns a non-taken rule priority
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| status | "completed" | "error" | "cancelled" | "cached" | "skipped" |
N/A |
| code | "export AWS_ACCESS_KEY_ID=\"$(cat /inputs/aws/access_key)\"\nexport AWS_SECRET_ACCESS_KEY=\"$(cat /inputs/aws/secret_key)\"\n\nif [ -s /inputs/vhost ]; then\n # We passed a vhost as input, try to recycle priority from previously allocated vhost\n vhost=\"$(cat /inputs/vhost)\"\n\n priority=$(aws elbv2 describe-rules --no-paginate \\\n --listener-arn \"$(cat /inputs/listenerArn)\" | \\\n jq -r --arg vhost \"$vhost\" '.Rules[] | select(.Conditions[].HostHeaderConfig.Values[] == $vhost) | .Priority')\n\n if [ -n \"${priority}\" ]; then\n echo -n \"${priority}\" \> /outputs/priority\n exit 0\n fi\nfi\n\n# Find the next priority available that we can allocate\naws elbv2 describe-rules --no-paginate \\\n --listener-arn \"$(cat /inputs/listenerArn)\" \\\n | jq '[ .Rules[].Priority | select(. != \"default\") | tonumber ] | max + 1' \\\n \> /outputs/priority" |
N/A |
| os | C{alpineVersion: "latest", alpineDigest: "sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d", package: (close((({[]: (pkg: string)-\>true, } & C{bash: true}) & C{jq: true})) & {python: true, coreutils: true}), extraCommand: (close([, ...string]) & ["apk add --no-cache py-pip && pip install awscli && apk del py-pip"])} |
N/A |
| input | {[]: (path: string)-\>(Directory | string | bytes | Cache | Secret), "/entrypoint.sh": code, "/inputs/aws/access_key": config.accessKey, "/inputs/aws/secret_key": config.secretKey, "/inputs/listenerArn": listenerArn, "/inputs/vhost": vhost, "/cache/aws": Cache} |
N/A |
| command | [(string & "/bin/bash"),(string & "--noprofile"),(string & "--norc"),(string & "-xeo"),(string & "pipefail"),(string & "/entrypoint.sh")] |
N/A |
| $bl | "bl.Run" |
N/A |
| environment | {[]: (_: string)-\>string, AWS_DEFAULT_REGION: config.region, AWS_CONFIG_FILE: "/cache/aws/config"} |
N/A |
| workdir | string | *"/" |
N/A |
| runPolicy | "always" |
N/A |
| output | {[]: (path: string)-\>(Directory | string | bytes), "/outputs/priority": string} |
N/A |
| config | aws.Config |
AWS Config |
| listenerArn | string |
ListenerArn |
| vhost | string | *"" |
Optional vhost for reusing priorities |
| priority | strconv.Atoi(strings.TrimRight(output["/outputs/priority"], "\n")) |
Priority number |
rds
CreateDB
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| name | string |
DB name |
| status | "completed" | "error" | "cancelled" | "cached" | "skipped" |
N/A |
| code | "set +o pipefail\n\nexport AWS_ACCESS_KEY_ID=\"$(cat /inputs/aws/access_key)\"\nexport AWS_SECRET_ACCESS_KEY=\"$(cat /inputs/aws/secret_key)\"\n\naws rds-data execute-statement \\\n --resource-arn \"$(cat /inputs/db_arn)\" \\\n --secret-arn \"$(cat /inputs/secret_arn)\" \\\n --sql \"CREATE DATABASE \\`$(cat /inputs/name)\\`\" \\\n --no-include-result-metadata \\\n|& tee /tmp/out\nexit_code=${PIPESTATUS[0]}\nif [ $exit_code -ne 0 ]; then\n cat /tmp/out\n grep -q \"database exists\" /tmp/out\n [ $? -ne 0 ] && exit $exit_code\nfi\ncp /inputs/name /outputs/dbCreated" |
N/A |
| os | C{alpineVersion: "latest", alpineDigest: "sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d", package: (close((({[]: (pkg: string)-\>true, } & C{bash: true}) & C{jq: true})) & {python: true, coreutils: true}), extraCommand: (close([, ...string]) & ["apk add --no-cache py-pip && pip install awscli && apk del py-pip"])} |
N/A |
| input | {[]: (path: string)-\>(Directory | string | bytes | Cache | Secret), "/entrypoint.sh": code, "/inputs/aws/access_key": config.accessKey, "/inputs/aws/secret_key": config.secretKey, "/inputs/name": name, "/inputs/db_arn": dbArn, "/inputs/secret_arn": secretArn} |
N/A |
| command | [(string & "/bin/bash"),(string & "--noprofile"),(string & "--norc"),(string & "-xeo"),(string & "pipefail"),(string & "/entrypoint.sh")] |
N/A |
| $bl | "bl.Run" |
N/A |
| environment | {[]: (_: string)-\>string, AWS_DEFAULT_REGION: config.region} |
N/A |
| workdir | string | *"/" |
N/A |
| runPolicy | *"onChange" | "always" | "never" |
N/A |
| output | {[]: (path: string)-\>(Directory | string | bytes), "/outputs/dbCreated": string} |
N/A |
| config | aws.Config |
AWS Config |
| dbArn | string |
ARN of the database instance |
| secretArn | string |
ARN of the database secret (for connecting via rds api) |
| dbCreated | output["/outputs/dbCreated"] |
N/A |
CreateUser
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| status | "completed" | "error" | "cancelled" | "cached" | "skipped" |
N/A |
| code | "set +o pipefail\n\nexport AWS_ACCESS_KEY_ID=\"$(cat /inputs/aws/access_key)\"\nexport AWS_SECRET_ACCESS_KEY=\"$(cat /inputs/aws/secret_key)\"\n\naws rds-data execute-statement \\\n --resource-arn \"$(cat /inputs/db_arn)\" \\\n --secret-arn \"$(cat /inputs/secret_arn)\" \\\n --sql \"CREATE USER '$(cat /inputs/username)'@'%' IDENTIFIED BY '$(cat /inputs/password)'\" \\\n --no-include-result-metadata \\\n|& tee tmp/out\nexit_code=${PIPESTATUS[0]}\nif [ $exit_code -ne 0 ]; then\n cat tmp/out\n grep -q \"Operation CREATE USER failed for\" tmp/out\n [ $? -ne 0 ] && exit $exit_code\nfi\ncp /inputs/username /outputs/username\ncp /inputs/password /outputs/password\n\naws rds-data execute-statement \\\n --resource-arn \"$(cat /inputs/db_arn)\" \\\n --secret-arn \"$(cat /inputs/secret_arn)\" \\\n --sql \"SET PASSWORD FOR '$(cat /inputs/username)'@'%' = PASSWORD('$(cat /inputs/password)')\" \\\n --no-include-result-metadata\n\nif [ -s /inputs/grant_database ]; then\n aws rds-data execute-statement \\\n --resource-arn \"$(cat /inputs/db_arn)\" \\\n --secret-arn \"$(cat /inputs/secret_arn)\" \\\n --sql \"GRANT ALL ON \\`$(cat /inputs/grant_database)\\`.* to '$(cat /inputs/username)'@'%'\" \\\n --no-include-result-metadata\nfi" |
N/A |
| os | C{alpineVersion: "latest", alpineDigest: "sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d", package: (close((({[]: (pkg: string)-\>true, } & C{bash: true}) & C{jq: true})) & {python: true, coreutils: true}), extraCommand: (close([, ...string]) & ["apk add --no-cache py-pip && pip install awscli && apk del py-pip"])} |
N/A |
| input | {[]: (path: string)-\>(Directory | string | bytes | Cache | Secret), "/entrypoint.sh": code, "/inputs/aws/access_key": config.accessKey, "/inputs/aws/secret_key": config.secretKey, "/inputs/db_arn": dbArn, "/inputs/secret_arn": secretArn, "/inputs/username": username, "/inputs/password": password, "/inputs/grant_database": grantDatabase} |
N/A |
| command | [(string & "/bin/bash"),(string & "--noprofile"),(string & "--norc"),(string & "-xeo"),(string & "pipefail"),(string & "/entrypoint.sh")] |
N/A |
| $bl | "bl.Run" |
N/A |
| environment | {[]: (_: string)-\>string, AWS_DEFAULT_REGION: config.region} |
N/A |
| workdir | string | *"/" |
N/A |
| runPolicy | *"onChange" | "always" | "never" |
N/A |
| output | {[]: (path: string)-\>(Directory | string | bytes), "/outputs/username": string, "/outputs/password": string} |
N/A |
| username | string |
Username |
| config | aws.Config |
AWS Config |
| dbArn | string |
ARN of the database instance |
| secretArn | string |
ARN of the database secret (for connecting via rds api) |
| password | string |
Password |
| grantDatabase | string | *"" |
N/A |
s3
Put
S3 file or Directory upload
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| url | run.output["/outputs/url"] |
URL of the uploaded S3 object |
| source | string | bl.Directory |
Source Directory, File or String to Upload to S3 |
| target | string |
Target S3 URL (eg. s3://<bucket-name>/<path>/<sub-path>) |
| config | aws.Config |
AWS Config |
bl
Task
Task is the interface implemented by the core actions (Build, Run, Push).
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| status | "completed" | "error" | "cancelled" | "cached" | "skipped" |
N/A |
| $bl | string |
N/A |
Run
Run executes command inside the filesystem fs
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| status | "completed" | "error" | "cancelled" | "cached" | "skipped" |
N/A |
| input | { [path=string]: Directory | string | bytes | Cache | Secret } |
N/A |
| command | string | [...string] |
N/A |
| $bl | "bl.Run" |
N/A |
| environment | { [string]: string } |
N/A |
| workdir | string | *"/" |
N/A |
| runPolicy | *"onChange" | "always" | "never" |
N/A |
| output | { [path=string]: Directory | string | bytes } |
N/A |
BashScript
BashScript is a helper to run bash scripts within an alpine environment.
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| status | "completed" | "error" | "cancelled" | "cached" | "skipped" |
N/A |
| code | string |
N/A |
| os | { alpineVersion: "latest" alpineDigest: "sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d" package: [pkg=string]: true package: bash: true // always install bash package: jq: true // always install jq extraCommand: [...string] } |
N/A |
| input | {[]: (path: string)-\>(Directory | string | bytes | Cache | Secret), "/entrypoint.sh": code} |
N/A |
| command | [(string & "/bin/bash"),(string & "--noprofile"),(string & "--norc"),(string & "-xeo"),(string & "pipefail"),(string & "/entrypoint.sh")] |
N/A |
| $bl | "bl.Run" |
N/A |
| environment | { [string]: string } |
N/A |
| workdir | string | *"/" |
N/A |
| runPolicy | *"onChange" | "always" | "never" |
N/A |
| output | { [path=string]: Directory | string | bytes } |
N/A |
Build
Build takes a Dockerfile and/or a build context and produces an OCI image as a Directory.
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| status | "completed" | "error" | "cancelled" | "cached" | "skipped" |
N/A |
| $bl | "bl.Build" |
N/A |
| auth | RegistryAuth |
credentials for the registry (optional) used to pull images in FROM statements |
Directory
Directory is a core type representing a directory. There are multiple implementations of directory, a directory can map to a registry, to the local filesystem, and so on.
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| path | string | *"/" |
N/A |
| $bl | "bl.Directory" |
N/A |
| source | Registry | Context | Directory |
N/A |
Secret
Secret is a core type holding a secret value. Secrets are encrypted at rest and only decrypted on demand when passed as an input to a Run
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| $bl | "bl.Secret" |
N/A |
| value | string |
N/A |
Cache
Cache is a core type. It behaves like a directory but it's content is persistenly cached between runs
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| $bl | "bl.Cache" |
N/A |
| key | string | *"" |
N/A |
RegistryAuth
RegistryAuth maps registry hosts to credentials
Fields
| FIELD | SPEC | DOC |
|---|
Push
Push exports the source directory to the target registry
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| status | "completed" | "error" | "cancelled" | "cached" | "skipped" |
N/A |
| $bl | "bl.Push" |
N/A |
| auth | RegistryAuth |
credentials for the registry (optional) |
| target | string |
N/A |
| ref | string |
ref will be filled in with the canonical push reference |
Pull
Push exports the source directory to the target registry
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| status | "completed" | "error" | "cancelled" | "cached" | "skipped" |
N/A |
| $bl | "bl.Pull" |
N/A |
| auth | RegistryAuth |
credentials for the registry (optional) |
| ref | string |
registry ref to pull |
RegistryCredentials
RegistryCredentials encodes Docker Registry credentials
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| username | string |
N/A |
dockerhub
Credentials
Credentials retriever for Docker Hub
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| auth | C{[]: (host: string)-\>RegistryCredentials, "https://index.docker.io/v1/": credentials} |
Authentication for Docker Hub |
| target | string |
Target is the Docker Hub image |
| config | { username: string password: bl.Secret } |
Docker Hub Config |
| credentials | bl.RegistryCredentials & { username: config.username secret: config.password } |
Registry Credentials |
nodejs
Container
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| environment | { [string]: string } |
N/A |
| buildScript | string |
N/A |
| runScript | string |
N/A |
file
Read
Read reads the contents of a file.
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| filename | !="" |
filename names the file to read. |
| contents | script.output["/output"] |
contents is the read contents. |
Create
Create writes contents to the given file.
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| filename | !="" |
filename names the file to write. |
| contents | bytes | string |
contents specifies the bytes to be written. |
| permissions | int | *0o644 |
permissions defines the permissions to use if the file does not yet exist. |
Append
Append writes contents to the given file.
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| filename | !="" |
filename names the file to append. |
| contents | bytes | string |
contents specifies the bytes to be written. |
| permissions | int | *0o644 |
permissions defines the permissions to use if the file does not yet exist. |
Glob
Glob returns a list of files.
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| glob | !="" |
glob specifies the pattern to match files with. |
| files | _|_(cannot use string (type string) as bytes in argument 0 to encoding/json.Unmarshal: non-concrete value string) |
files that matched |
git
Repository
Git repository
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| status | "completed" | "error" | "cancelled" | "cached" | "skipped" |
N/A |
| url | string |
URL of the Repository |
| code | " export GIT_SSH_COMMAND='ssh -o StrictHostKeyChecking=no'\n\n if [ -f \"/inputs/ssh-key\" ]; then\n # FIXME: ssh wants this. There must be a better way.\n cp /inputs/ssh-key /tmp/ssh-key\n chmod 0600 /tmp/ssh-key\n\n export GIT_SSH_COMMAND=\"$GIT_SSH_COMMAND -i /tmp/ssh-key\"\n fi\n\n url=\"$(cat /inputs/url)\"\n\n if [ -f /inputs/username ]; then\n creds=\"$(cat /inputs/username)\"\n if [ -f /inputs/http-password ]; then\n creds=\"$creds:$(cat /inputs/http-password)\"\n fi\n url=\"${url/\\/\\////$creds@}\"\n fi\n\n ref=\"$(cat /inputs/ref)\"\n\n cache_key=\"$(base64 \< /inputs/url)\"\n mirror=\"/cache/git/${cache_key}\"\n\n # Set up a mirror as a cache\n if [ ! -d \"$mirror\" ]; then\n git clone --progress --verbose --mirror \"$url\" -- \"$mirror\"\n fi\n # Refresh the cache.\n git -C \"$mirror\" remote update\n\n # Fetch the repository, using the cache\n git clone --dissociate --reference \"$mirror\" -- \"$url\" /outputs/out\n\n # Checkout ref\n git -C /outputs/out reset --hard \"$ref\"\n\n # Extract the revision\n git -C /outputs/out rev-parse \"$ref\" \> /outputs/commit\n git -C /outputs/out rev-parse --short \"$ref\" \> /outputs/short-commit\n\n if [ ! -f /inputs/keep-gitdir ]; then\n # Remove gitdir by default\n rm -rf /outputs/out/.git\n fi" |
N/A |
| os | C{alpineVersion: "latest", alpineDigest: "sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d", package: (close((({[]: (pkg: string)-\>true, } & C{bash: true}) & C{jq: true})) & {git: true, openssh: true}), extraCommand: [, ...string]} |
N/A |
| input | {[]: (path: string)-\>(Directory | string | bytes | Cache | Secret), "/entrypoint.sh": code, "/inputs/url": url, "/inputs/ref": ref, "/cache/git": Cache} |
N/A |
| command | [(string & "/bin/bash"),(string & "--noprofile"),(string & "--norc"),(string & "-xeo"),(string & "pipefail"),(string & "/entrypoint.sh")] |
N/A |
| $bl | "bl.Run" |
N/A |
| environment | { [string]: string } |
N/A |
| workdir | "/workdir" |
N/A |
| runPolicy | *"onChange" | "always" | "never" |
N/A |
| output | {[]: (path: string)-\>(Directory | string | bytes), "/outputs/out": Directory, "/outputs/commit": string, "/outputs/short-commit": string} |
N/A |
| ref | *"master" | string |
Git Ref to checkout |
| keepGitDir | *false | bool |
Keep .git directory after clone |
| commit | strings.TrimRight(output["/outputs/commit"], "\n") |
Output commit ID of the Repository |
| shortCommit | strings.TrimRight(output["/outputs/short-commit"], "\n") |
Output short-commit ID of the Repository |
PathCommit
Retrieve commit IDs from a git working copy (ie. cloned repository)
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| path | *"./" | string |
Optional path to retrieve git commit IDs from |
| commit | strings.TrimRight(pathCommit.output["/outputs/commit"], "\n") |
Output commit ID of the Repository |
| shortCommit | strings.TrimRight(pathCommit.output["/outputs/short-commit"], "\n") |
Output short-commit ID of the Repository |
github
CommentFields
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| body | string |
N/A |
| id | string |
N/A |
AddComment
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| method | "POST" |
N/A |
| response | C{body: string, close(output["/response"]), statusCode: Atoi (output["/status"])} |
N/A |
| body | string |
N/A |
| status | "completed" | "error" | "cancelled" | "cached" | "skipped" |
N/A |
| url | "https://api.github.com/graphql" |
N/A |
| request | C{body: ((string | *"") & Marshal ({query: query, variables: Marshal (variable)})), header: (close({[]: (_: string)-\>(string | [, ...string]), }) & {"Content-Type": "application/json"}), token: (close(Secret) & token)} |
N/A |
| code | "curlArgs=(\n \"$(cat /url)\"\n -L --fail --silent --show-error\n --write-out \"%{http_code}\"\n -X \"$(cat /method)\"\n -d \"$(cat /body)\"\n -o /response\n)\n\nheaders=\"$(cat /headers | jq -r 'to_entries | map(.key + \": \" + (.value | tostring) + \"\\n\") | add')\"\nwhile read h; do\n curlArgs+=(\"-H\" \"$h\")\ndone \<\<\< \"$headers\"\n\nif [ -e /token ]; then\n curlArgs+=(\"-H\" \"Authorization: bearer $(cat /token)\")\nfi\n\ncurl \"${curlArgs[@]}\" \> /status" |
N/A |
| os | C{alpineVersion: "latest", alpineDigest: "sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d", package: (close((({[]: (pkg: string)-\>true, } & C{bash: true}) & C{jq: true})) & {curl: true}), extraCommand: [, ...string]} |
N/A |
| input | {[]: (path: string)-\>(Directory | string | bytes | Cache | Secret), "/entrypoint.sh": code, "/token": request.token, "/method": method, "/headers": Marshal (request.header), "/body": request.body, "/url": url} |
N/A |
| command | [(string & "/bin/bash"),(string & "--noprofile"),(string & "--norc"),(string & "-xeo"),(string & "pipefail"),(string & "/entrypoint.sh")] |
N/A |
| $bl | "bl.Run" |
N/A |
| environment | { [string]: string } |
N/A |
| workdir | string | *"/" |
N/A |
| runPolicy | "always" |
N/A |
| output | {[]: ((_: string)-\>string & (path: string)-\>(Directory | string | bytes)), "/response": string, "/status": string} |
N/A |
| subjectId | string |
N/A |
| data | _|_(cannot use string (type string) as bytes in argument 0 to encoding/json.Unmarshal: non-concrete value string) |
N/A |
| comment | _|_(cannot use string (type string) as bytes in argument 0 to encoding/json.Unmarshal: non-concrete value string) |
N/A |
| query | "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n subject {\n id\n }\n commentEdge {\n node {\n ...CommentParts\n }\n }\n }\n}\nfragment CommentParts on IssueComment {\n id\n body\n}" |
Contents of the graphql query |
| variable | {input: {body: body, subjectId: subjectId}, ...} |
graphql variables |
| payload | _|_(cannot use string (type string) as bytes in argument 0 to encoding/json.Unmarshal: non-concrete value string) |
N/A |
Query
GitHub v4 GraphQL Query
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| method | "POST" |
N/A |
| response | C{body: string, close(output["/response"]), statusCode: Atoi (output["/status"])} |
N/A |
| status | "completed" | "error" | "cancelled" | "cached" | "skipped" |
N/A |
| url | "https://api.github.com/graphql" |
N/A |
| request | C{body: ((string | *"") & Marshal ({query: query, variables: Marshal (variable)})), header: (close({[]: (_: string)-\>(string | [, ...string]), }) & {"Content-Type": "application/json"}), token: (close(Secret) & token)} |
N/A |
| code | "curlArgs=(\n \"$(cat /url)\"\n -L --fail --silent --show-error\n --write-out \"%{http_code}\"\n -X \"$(cat /method)\"\n -d \"$(cat /body)\"\n -o /response\n)\n\nheaders=\"$(cat /headers | jq -r 'to_entries | map(.key + \": \" + (.value | tostring) + \"\\n\") | add')\"\nwhile read h; do\n curlArgs+=(\"-H\" \"$h\")\ndone \<\<\< \"$headers\"\n\nif [ -e /token ]; then\n curlArgs+=(\"-H\" \"Authorization: bearer $(cat /token)\")\nfi\n\ncurl \"${curlArgs[@]}\" \> /status" |
N/A |
| os | C{alpineVersion: "latest", alpineDigest: "sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d", package: (close((({[]: (pkg: string)-\>true, } & C{bash: true}) & C{jq: true})) & {curl: true}), extraCommand: [, ...string]} |
N/A |
| input | {[]: (path: string)-\>(Directory | string | bytes | Cache | Secret), "/entrypoint.sh": code, "/token": request.token, "/method": method, "/headers": Marshal (request.header), "/body": request.body, "/url": url} |
N/A |
| command | [(string & "/bin/bash"),(string & "--noprofile"),(string & "--norc"),(string & "-xeo"),(string & "pipefail"),(string & "/entrypoint.sh")] |
N/A |
| $bl | "bl.Run" |
N/A |
| environment | { [string]: string } |
N/A |
| workdir | string | *"/" |
N/A |
| runPolicy | "always" |
N/A |
| output | {[]: ((_: string)-\>string & (path: string)-\>(Directory | string | bytes)), "/response": string, "/status": string} |
N/A |
| data | payload.data |
N/A |
| query | string |
Contents of the graphql query |
| variable | { [key=string]: _ } |
graphql variables |
| payload | _|_(cannot use string (type string) as bytes in argument 0 to encoding/json.Unmarshal: non-concrete value string) |
N/A |
UpdateComment
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| method | "POST" |
N/A |
| response | C{body: string, close(output["/response"]), statusCode: Atoi (output["/status"])} |
N/A |
| body | string |
N/A |
| status | "completed" | "error" | "cancelled" | "cached" | "skipped" |
N/A |
| url | "https://api.github.com/graphql" |
N/A |
| request | C{body: ((string | *"") & Marshal ({query: query, variables: Marshal (variable)})), header: (close({[]: (_: string)-\>(string | [, ...string]), }) & {"Content-Type": "application/json"}), token: (close(Secret) & token)} |
N/A |
| code | "curlArgs=(\n \"$(cat /url)\"\n -L --fail --silent --show-error\n --write-out \"%{http_code}\"\n -X \"$(cat /method)\"\n -d \"$(cat /body)\"\n -o /response\n)\n\nheaders=\"$(cat /headers | jq -r 'to_entries | map(.key + \": \" + (.value | tostring) + \"\\n\") | add')\"\nwhile read h; do\n curlArgs+=(\"-H\" \"$h\")\ndone \<\<\< \"$headers\"\n\nif [ -e /token ]; then\n curlArgs+=(\"-H\" \"Authorization: bearer $(cat /token)\")\nfi\n\ncurl \"${curlArgs[@]}\" \> /status" |
N/A |
| os | C{alpineVersion: "latest", alpineDigest: "sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d", package: (close((({[]: (pkg: string)-\>true, } & C{bash: true}) & C{jq: true})) & {curl: true}), extraCommand: [, ...string]} |
N/A |
| input | {[]: (path: string)-\>(Directory | string | bytes | Cache | Secret), "/entrypoint.sh": code, "/token": request.token, "/method": method, "/headers": Marshal (request.header), "/body": request.body, "/url": url} |
N/A |
| command | [(string & "/bin/bash"),(string & "--noprofile"),(string & "--norc"),(string & "-xeo"),(string & "pipefail"),(string & "/entrypoint.sh")] |
N/A |
| $bl | "bl.Run" |
N/A |
| environment | { [string]: string } |
N/A |
| workdir | string | *"/" |
N/A |
| runPolicy | "always" |
N/A |
| output | {[]: ((_: string)-\>string & (path: string)-\>(Directory | string | bytes)), "/response": string, "/status": string} |
N/A |
| data | _|_(cannot use string (type string) as bytes in argument 0 to encoding/json.Unmarshal: non-concrete value string) |
N/A |
| comment | _|_(cannot use string (type string) as bytes in argument 0 to encoding/json.Unmarshal: non-concrete value string) |
N/A |
| query | "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n issueComment {\n ...CommentParts\n }\n }\n}\nfragment CommentParts on IssueComment {\n id\n body\n}" |
Contents of the graphql query |
| variable | {input: {body: body, id: commentId}, ...} |
graphql variables |
| commentId | string |
N/A |
| payload | _|_(cannot use string (type string) as bytes in argument 0 to encoding/json.Unmarshal: non-concrete value string) |
N/A |
Comment
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| response | editComment.output["/response"] |
N/A |
| body | string |
N/A |
| status | editComment.output["/status"] |
N/A |
| subjectId | string |
N/A |
| commentId | [ for n in listComments.data.node.comments.nodes if strings.Contains(n.body, "\(marker)") { n.id } ] |
Contains a list of comment ID matching the marker |
| marker | *"\<!-- bl-marker-do-not-remove --\>" | string |
N/A |
| updateCommentQuery | json.Marshal({ query: UpdateComment.query variables: input: { if len(commentId) \> 0 { id: commentId[0] } "body": "\(body)\n\(marker)" } }) |
N/A |
| addCommentQuery | json.Marshal({ query: AddComment.query variables: input: { "subjectId": subjectId "body": "\(body)\n\(marker)" } }) |
N/A |
Event
GitHub Event https://developer.github.com/v3/activity/events
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| number | int |
The pull request number. |
| name | "pull_request" |
N/A |
| sender | {...} |
N/A |
| action | "assigned" | "unassigned" | "review_requested" | "review_request_removed" | "labeled" | "unlabeled" | "opened" | "edited" | "closed" | "ready_for_review" | "locked" | "unlocked" | "reopened" | "synchronize" |
N/A |
| changes | {...} |
The changes to the comment if the action was edited. |
| pull_request | {...} |
The pull request itself. |
PullRequestEvent
PullRequestEvent https://developer.github.com/v3/activity/events/types/#pullrequestevent
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| number | int |
The pull request number. |
| action | "assigned" | "unassigned" | "review_requested" | "review_request_removed" | "labeled" | "unlabeled" | "opened" | "edited" | "closed" | "ready_for_review" | "locked" | "unlocked" | "reopened" | "synchronize" |
N/A |
| changes | {...} |
The changes to the comment if the action was edited. |
| pull_request | {...} |
The pull request itself. |
Repository
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| name | string |
Github repository name |
| owner | string |
Github repository owner |
PullRequest
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| number | int |
N/A |
| id | string |
N/A |
| state | string |
N/A |
| title | string |
N/A |
| headRepository | { sshUrl: string url: string } |
N/A |
| headRef | { name: string prefix: string target: oid: string } |
N/A |
GetPullRequest
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| number | int |
N/A |
| method | "POST" |
N/A |
| response | C{body: string, close(output["/response"]), statusCode: Atoi (output["/status"])} |
N/A |
| status | "completed" | "error" | "cancelled" | "cached" | "skipped" |
N/A |
| url | "https://api.github.com/graphql" |
N/A |
| request | C{body: ((string | *"") & Marshal ({query: query, variables: Marshal (variable)})), header: (close({[]: (_: string)-\>(string | [, ...string]), }) & {"Content-Type": "application/json"}), token: (close(Secret) & token)} |
N/A |
| code | "curlArgs=(\n \"$(cat /url)\"\n -L --fail --silent --show-error\n --write-out \"%{http_code}\"\n -X \"$(cat /method)\"\n -d \"$(cat /body)\"\n -o /response\n)\n\nheaders=\"$(cat /headers | jq -r 'to_entries | map(.key + \": \" + (.value | tostring) + \"\\n\") | add')\"\nwhile read h; do\n curlArgs+=(\"-H\" \"$h\")\ndone \<\<\< \"$headers\"\n\nif [ -e /token ]; then\n curlArgs+=(\"-H\" \"Authorization: bearer $(cat /token)\")\nfi\n\ncurl \"${curlArgs[@]}\" \> /status" |
N/A |
| os | C{alpineVersion: "latest", alpineDigest: "sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d", package: (close((({[]: (pkg: string)-\>true, } & C{bash: true}) & C{jq: true})) & {curl: true}), extraCommand: [, ...string]} |
N/A |
| input | {[]: (path: string)-\>(Directory | string | bytes | Cache | Secret), "/entrypoint.sh": code, "/token": request.token, "/method": method, "/headers": Marshal (request.header), "/body": request.body, "/url": url} |
N/A |
| command | [(string & "/bin/bash"),(string & "--noprofile"),(string & "--norc"),(string & "-xeo"),(string & "pipefail"),(string & "/entrypoint.sh")] |
N/A |
| $bl | "bl.Run" |
N/A |
| environment | { [string]: string } |
N/A |
| workdir | string | *"/" |
N/A |
| runPolicy | "always" |
N/A |
| output | {[]: ((_: string)-\>string & (path: string)-\>(Directory | string | bytes)), "/response": string, "/status": string} |
N/A |
| data | _|_(cannot use string (type string) as bytes in argument 0 to encoding/json.Unmarshal: non-concrete value string) |
N/A |
| query | "query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n ...PullRequestParts\n }\n }\n}\nfragment PullRequestParts on PullRequest {\n id\n state\n number\n title\n headRepository {\n sshUrl\n url\n }\n headRef {\n name\n prefix\n target {\n oid\n }\n }\n}" |
Contents of the graphql query |
| variable | {number: number, name: repo.name, owner: repo.owner, ...} |
graphql variables |
| repo | { owner: string name: string } |
N/A |
| pullRequest | _|_(cannot use string (type string) as bytes in argument 0 to encoding/json.Unmarshal: non-concrete value string) |
N/A |
| payload | _|_(cannot use string (type string) as bytes in argument 0 to encoding/json.Unmarshal: non-concrete value string) |
N/A |
CheckoutPullRequest
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| status | "completed" | "error" | "cancelled" | "cached" | "skipped" |
N/A |
| url | string |
URL of the Repository |
| code | " export GIT_SSH_COMMAND='ssh -o StrictHostKeyChecking=no'\n\n if [ -f \"/inputs/ssh-key\" ]; then\n # FIXME: ssh wants this. There must be a better way.\n cp /inputs/ssh-key /tmp/ssh-key\n chmod 0600 /tmp/ssh-key\n\n export GIT_SSH_COMMAND=\"$GIT_SSH_COMMAND -i /tmp/ssh-key\"\n fi\n\n url=\"$(cat /inputs/url)\"\n\n if [ -f /inputs/username ]; then\n creds=\"$(cat /inputs/username)\"\n if [ -f /inputs/http-password ]; then\n creds=\"$creds:$(cat /inputs/http-password)\"\n fi\n url=\"${url/\\/\\////$creds@}\"\n fi\n\n ref=\"$(cat /inputs/ref)\"\n\n cache_key=\"$(base64 \< /inputs/url)\"\n mirror=\"/cache/git/${cache_key}\"\n\n # Set up a mirror as a cache\n if [ ! -d \"$mirror\" ]; then\n git clone --progress --verbose --mirror \"$url\" -- \"$mirror\"\n fi\n # Refresh the cache.\n git -C \"$mirror\" remote update\n\n # Fetch the repository, using the cache\n git clone --dissociate --reference \"$mirror\" -- \"$url\" /outputs/out\n\n # Checkout ref\n git -C /outputs/out reset --hard \"$ref\"\n\n # Extract the revision\n git -C /outputs/out rev-parse \"$ref\" \> /outputs/commit\n git -C /outputs/out rev-parse --short \"$ref\" \> /outputs/short-commit\n\n if [ ! -f /inputs/keep-gitdir ]; then\n # Remove gitdir by default\n rm -rf /outputs/out/.git\n fi" |
N/A |
| os | C{alpineVersion: "latest", alpineDigest: "sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d", package: (close((({[]: (pkg: string)-\>true, } & C{bash: true}) & C{jq: true})) & {git: true, openssh: true}), extraCommand: [, ...string]} |
N/A |
| input | {[]: (path: string)-\>(Directory | string | bytes | Cache | Secret), "/entrypoint.sh": code, "/inputs/url": url, "/inputs/ref": ref, "/inputs/username": username, "/inputs/http-password": httpPassword, "/cache/git": Cache} |
N/A |
| command | [(string & "/bin/bash"),(string & "--noprofile"),(string & "--norc"),(string & "-xeo"),(string & "pipefail"),(string & "/entrypoint.sh")] |
N/A |
| $bl | "bl.Run" |
N/A |
| environment | { [string]: string } |
N/A |
| workdir | "/workdir" |
N/A |
| runPolicy | *"onChange" | "always" | "never" |
N/A |
| output | {[]: (path: string)-\>(Directory | string | bytes), "/outputs/out": Directory, "/outputs/commit": string, "/outputs/short-commit": string} |
N/A |
| ref | (*"master" | string) |
Git Ref to checkout |
| username | "apikey" |
SSH or HTTP username to use in the git URL |
| keepGitDir | *false | bool |
Keep .git directory after clone |
| commit | strings.TrimRight(output["/outputs/commit"], "\n") |
Output commit ID of the Repository |
| shortCommit | strings.TrimRight(output["/outputs/short-commit"], "\n") |
Output short-commit ID of the Repository |
| pullRequest | PullRequest |
N/A |
ListPullRequests
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| method | "POST" |
N/A |
| response | C{body: string, close(output["/response"]), statusCode: Atoi (output["/status"])} |
N/A |
| status | "completed" | "error" | "cancelled" | "cached" | "skipped" |
N/A |
| url | "https://api.github.com/graphql" |
N/A |
| request | C{body: ((string | *"") & Marshal ({query: query, variables: Marshal (variable)})), header: (close({[]: (_: string)-\>(string | [, ...string]), }) & {"Content-Type": "application/json"}), token: (close(Secret) & token)} |
N/A |
| code | "curlArgs=(\n \"$(cat /url)\"\n -L --fail --silent --show-error\n --write-out \"%{http_code}\"\n -X \"$(cat /method)\"\n -d \"$(cat /body)\"\n -o /response\n)\n\nheaders=\"$(cat /headers | jq -r 'to_entries | map(.key + \": \" + (.value | tostring) + \"\\n\") | add')\"\nwhile read h; do\n curlArgs+=(\"-H\" \"$h\")\ndone \<\<\< \"$headers\"\n\nif [ -e /token ]; then\n curlArgs+=(\"-H\" \"Authorization: bearer $(cat /token)\")\nfi\n\ncurl \"${curlArgs[@]}\" \> /status" |
N/A |
| os | C{alpineVersion: "latest", alpineDigest: "sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d", package: (close((({[]: (pkg: string)-\>true, } & C{bash: true}) & C{jq: true})) & {curl: true}), extraCommand: [, ...string]} |
N/A |
| input | {[]: (path: string)-\>(Directory | string | bytes | Cache | Secret), "/entrypoint.sh": code, "/token": request.token, "/method": method, "/headers": Marshal (request.header), "/body": request.body, "/url": url} |
N/A |
| command | [(string & "/bin/bash"),(string & "--noprofile"),(string & "--norc"),(string & "-xeo"),(string & "pipefail"),(string & "/entrypoint.sh")] |
N/A |
| $bl | "bl.Run" |
N/A |
| environment | { [string]: string } |
N/A |
| workdir | string | *"/" |
N/A |
| runPolicy | "always" |
N/A |
| output | {[]: ((_: string)-\>string & (path: string)-\>(Directory | string | bytes)), "/response": string, "/status": string} |
N/A |
| data | _|_(cannot use string (type string) as bytes in argument 0 to encoding/json.Unmarshal: non-concrete value string) |
N/A |
| query | "query($owner: String!, $name: String!, $last: Int, $states: [PullRequestState!]) {\n repository(owner: $owner, name: $name) {\n pullRequests(last: $last, states: $states) {\n nodes {\n ...PullRequestParts\n }\n }\n }\n}\nfragment PullRequestParts on PullRequest {\n id\n state\n number\n title\n headRepository {\n sshUrl\n url\n }\n headRef {\n name\n prefix\n target {\n oid\n }\n }\n}" |
Contents of the graphql query |
| variable | {name: repo.name, owner: repo.owner, states: states, last: pageSize, ...} |
graphql variables |
| repo | { owner: string name: string } |
N/A |
| pageSize | int | *25 |
N/A |
| states | [string] | *[] |
N/A |
| pullRequests | _|_(cannot use string (type string) as bytes in argument 0 to encoding/json.Unmarshal: non-concrete value string) |
N/A |
| payload | _|_(cannot use string (type string) as bytes in argument 0 to encoding/json.Unmarshal: non-concrete value string) |
N/A |
User
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| id | string |
N/A |
| login | string |
N/A |
GetViewer
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| method | "POST" |
N/A |
| response | C{body: string, close(output["/response"]), statusCode: Atoi (output["/status"])} |
N/A |
| status | "completed" | "error" | "cancelled" | "cached" | "skipped" |
N/A |
| url | "https://api.github.com/graphql" |
N/A |
| request | C{body: ((string | *"") & Marshal ({query: query, variables: Marshal (variable)})), header: (close({[]: (_: string)-\>(string | [, ...string]), }) & {"Content-Type": "application/json"}), token: (close(Secret) & token)} |
N/A |
| code | "curlArgs=(\n \"$(cat /url)\"\n -L --fail --silent --show-error\n --write-out \"%{http_code}\"\n -X \"$(cat /method)\"\n -d \"$(cat /body)\"\n -o /response\n)\n\nheaders=\"$(cat /headers | jq -r 'to_entries | map(.key + \": \" + (.value | tostring) + \"\\n\") | add')\"\nwhile read h; do\n curlArgs+=(\"-H\" \"$h\")\ndone \<\<\< \"$headers\"\n\nif [ -e /token ]; then\n curlArgs+=(\"-H\" \"Authorization: bearer $(cat /token)\")\nfi\n\ncurl \"${curlArgs[@]}\" \> /status" |
N/A |
| os | C{alpineVersion: "latest", alpineDigest: "sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d", package: (close((({[]: (pkg: string)-\>true, } & C{bash: true}) & C{jq: true})) & {curl: true}), extraCommand: [, ...string]} |
N/A |
| input | {[]: (path: string)-\>(Directory | string | bytes | Cache | Secret), "/entrypoint.sh": code, "/token": request.token, "/method": method, "/headers": Marshal (request.header), "/body": request.body, "/url": url} |
N/A |
| command | [(string & "/bin/bash"),(string & "--noprofile"),(string & "--norc"),(string & "-xeo"),(string & "pipefail"),(string & "/entrypoint.sh")] |
N/A |
| $bl | "bl.Run" |
N/A |
| environment | { [string]: string } |
N/A |
| workdir | string | *"/" |
N/A |
| runPolicy | "always" |
N/A |
| output | {[]: ((_: string)-\>string & (path: string)-\>(Directory | string | bytes)), "/response": string, "/status": string} |
N/A |
| data | _|_(cannot use string (type string) as bytes in argument 0 to encoding/json.Unmarshal: non-concrete value string) |
N/A |
| query | "query {\n viewer {\n ...UserParts\n }\n}\nfragment UserParts on User {\n id\n login\n}" |
Contents of the graphql query |
| variable | { [key=string]: _ } |
graphql variables |
| payload | _|_(cannot use string (type string) as bytes in argument 0 to encoding/json.Unmarshal: non-concrete value string) |
N/A |
| user | data.viewer |
N/A |
go
App
Go application built with go build
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| os | *"linux" | string |
Target OS |
| version | *"1.14.1" | string |
Go version to use |
| generate | *false | true |
Run go generate before building |
| arch | *"amd64" | string |
Target architecture |
| tags | *"netgo" | string |
Build tags to use for building |
| ldflags | *"-w -extldflags \"-static\"" | string |
LDFLAGS to use for linking |
| binaryName | string |
Specify the targeted binary name |
googlecloud
Config
Google Cloud Config shared by all packages
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| region | string |
N/A |
| project | string |
N/A |
gcr
Credentials
Credentials retriever for GCR
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| status | "completed" | "error" | "cancelled" | "cached" | "skipped" |
N/A |
| code | " export GOOGLE_APPLICATION_CREDENTIALS=\"/inputs/gcp/service_key\"\n\n credentials=$(cat /inputs/target | docker-credential-gcr get)\n\n echo $credentials | jq -j .Username \> /outputs/username\n echo $credentials | jq -j .Secret \> /outputs/secret" |
N/A |
| os | C{alpineVersion: "latest", alpineDigest: "sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d", package: (close((({[]: (pkg: string)-\>true, } & C{bash: true}) & C{jq: true})) & {curl: true}), extraCommand: (close([, ...string]) & ["curl -L \""+helperUrl+"\" | tar -C /usr/local/bin -zx && \\\n chmod +x \"/usr/local/bin/docker-credential-gcr\""])} |
N/A |
| input | {[]: (path: string)-\>(Directory | string | bytes | Cache | Secret), "/entrypoint.sh": code, "/inputs/gcp/service_key": config.serviceKey, "/inputs/target": target} |
N/A |
| command | [(string & "/bin/bash"),(string & "--noprofile"),(string & "--norc"),(string & "-xeo"),(string & "pipefail"),(string & "/entrypoint.sh")] |
N/A |
| $bl | "bl.Run" |
N/A |
| auth | C{[]: (host: string)-\>RegistryCredentials, ""+target+"": credentials} |
Authentication for GCR Registries |
| environment | { [string]: string } |
N/A |
| workdir | string | *"/" |
N/A |
| runPolicy | "always" |
N/A |
| output | {[]: (path: string)-\>(Directory | string | bytes), "/outputs/username": string, "/outputs/secret": string} |
N/A |
| target | string |
Target is the GCR image |
| config | googlecloud.Config |
GCP Config |
| credentials | bl.RegistryCredentials & { username: output["/outputs/username"] secret: bl.Secret & { // FIXME: we should be able to output a bl.Secret directly value: base64.Encode(null, output["/outputs/secret"]) } } |
Registry Credentials |
| helperUrl | "https://github.com/GoogleCloudPlatform/docker-credential-gcr/releases/download/v2.0.1/docker-credential-gcr_linux_amd64-2.0.1.tar.gz" |
N/A |
gke
KubeConfig
KubeConfig config outputs a valid kube-auth-config for kubectl client
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| config | googlecloud.Config |
GCP Config |
| cluster | string |
GKE cluster name |
graphql
Query
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| method | "POST" |
N/A |
| response | C{body: string, close(output["/response"]), statusCode: Atoi (output["/status"])} |
N/A |
| status | "completed" | "error" | "cancelled" | "cached" | "skipped" |
N/A |
| url | string |
N/A |
| request | C{body: ((string | *"") & Marshal ({query: query, variables: Marshal (variable)})), header: (close({[]: (_: string)-\>(string | [, ...string]), }) & {"Content-Type": "application/json"}), token?: Secret} |
N/A |
| code | "curlArgs=(\n \"$(cat /url)\"\n -L --fail --silent --show-error\n --write-out \"%{http_code}\"\n -X \"$(cat /method)\"\n -d \"$(cat /body)\"\n -o /response\n)\n\nheaders=\"$(cat /headers | jq -r 'to_entries | map(.key + \": \" + (.value | tostring) + \"\\n\") | add')\"\nwhile read h; do\n curlArgs+=(\"-H\" \"$h\")\ndone \<\<\< \"$headers\"\n\nif [ -e /token ]; then\n curlArgs+=(\"-H\" \"Authorization: bearer $(cat /token)\")\nfi\n\ncurl \"${curlArgs[@]}\" \> /status" |
N/A |
| os | C{alpineVersion: "latest", alpineDigest: "sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d", package: (close((({[]: (pkg: string)-\>true, } & C{bash: true}) & C{jq: true})) & {curl: true}), extraCommand: [, ...string]} |
N/A |
| input | {[]: (path: string)-\>(Directory | string | bytes | Cache | Secret), "/entrypoint.sh": code, "/method": method, "/headers": Marshal (request.header), "/body": request.body, "/url": url} |
N/A |
| command | [(string & "/bin/bash"),(string & "--noprofile"),(string & "--norc"),(string & "-xeo"),(string & "pipefail"),(string & "/entrypoint.sh")] |
N/A |
| $bl | "bl.Run" |
N/A |
| environment | { [string]: string } |
N/A |
| workdir | string | *"/" |
N/A |
| runPolicy | "always" |
N/A |
| output | {[]: ((_: string)-\>string & (path: string)-\>(Directory | string | bytes)), "/response": string, "/status": string} |
N/A |
| query | string |
Contents of the graphql query |
| variable | { [key=string]: _ } |
graphql variables |
| payload | _|_(cannot use string (type string) as bytes in argument 0 to encoding/json.Unmarshal: non-concrete value string) |
N/A |
| data | payload.data |
N/A |
http
Do
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| method | "GET" | "POST" | "PUT" | "DELETE" | "PATH" | "HEAD" |
N/A |
| response | { body: output["/response"] statusCode: strconv.Atoi(output["/status"]) } |
N/A |
| status | "completed" | "error" | "cancelled" | "cached" | "skipped" |
N/A |
| url | string |
N/A |
| request | { body: string | *"" header: [string]: string | [...string] token?: bl.Secret } |
N/A |
| code | "curlArgs=(\n \"$(cat /url)\"\n -L --fail --silent --show-error\n --write-out \"%{http_code}\"\n -X \"$(cat /method)\"\n -d \"$(cat /body)\"\n -o /response\n)\n\nheaders=\"$(cat /headers | jq -r 'to_entries | map(.key + \": \" + (.value | tostring) + \"\\n\") | add')\"\nwhile read h; do\n curlArgs+=(\"-H\" \"$h\")\ndone \<\<\< \"$headers\"\n\nif [ -e /token ]; then\n curlArgs+=(\"-H\" \"Authorization: bearer $(cat /token)\")\nfi\n\ncurl \"${curlArgs[@]}\" \> /status" |
N/A |
| os | C{alpineVersion: "latest", alpineDigest: "sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d", package: (close((({[]: (pkg: string)-\>true, } & C{bash: true}) & C{jq: true})) & {curl: true}), extraCommand: [, ...string]} |
N/A |
| input | {[]: (path: string)-\>(Directory | string | bytes | Cache | Secret), "/entrypoint.sh": code, "/method": method, "/headers": Marshal (request.header), "/body": request.body, "/url": url} |
N/A |
| command | [(string & "/bin/bash"),(string & "--noprofile"),(string & "--norc"),(string & "-xeo"),(string & "pipefail"),(string & "/entrypoint.sh")] |
N/A |
| $bl | "bl.Run" |
N/A |
| environment | { [string]: string } |
N/A |
| workdir | string | *"/" |
N/A |
| runPolicy | "always" |
N/A |
| output | {[]: ((_: string)-\>string & (path: string)-\>(Directory | string | bytes)), "/response": string, "/status": string} |
N/A |
kubernetes
Kustomize
Exposes kubectl kustomize
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| source | string | bl.Directory |
Kubernetes config to take as input |
| kustomization | *"" | string |
Optionnal kustomization.yaml |
| version | *"v1.14.7" | string |
Version of kubectl client |
| out | kustomize.output["/kube/out"] |
Output of kustomize |
Apply
Apply a Kubernetes configuration
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| source | string | bl.Directory |
Kubernetes config to deploy |
| version | *"v1.14.7" | string |
Version of kubectl client |
| namespace | string |
Kubernetes Namespace to deploy to |
kubernetes
Kustomize
Exposes kubectl kustomize
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| source | string | bl.Directory |
Kubernetes config to take as input |
| kustomization | *"" | string |
Optionnal kustomization.yaml |
| version | *"v1.14.7" | string |
Version of kubectl client |
| out | kustomize.output["/kube/out"] |
Output of kustomize |
Apply
Apply a Kubernetes configuration
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| source | string | bl.Directory |
Kubernetes config to deploy |
| version | *"v1.14.7" | string |
Version of kubectl client |
| namespace | string |
Kubernetes Namespace to deploy to |
helm
Chart
Install a Helm chart
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| name | string |
Helm deployment name |
| chart | string | bl.Directory |
Helm chart to install |
| repository | *"https://kubernetes-charts.storage.googleapis.com/" | string |
Helm chart repository (defaults to stable) |
| namespace | string |
Kubernetes Namespace to deploy to |
| action | *"installOrUpgrade" | "install" | "upgrade" |
Helm action to apply |
| timeout | string | *"5m" |
time to wait for any individual Kubernetes operation (like Jobs for hooks) |
| wait | *true | bool |
if set, will wait until all Pods, PVCs, Services, and minimum number of Pods of a Deployment, StatefulSet, or ReplicaSet are in a ready state before marking the release as successful. It will wait for as long as timeout |
| atomic | *true | bool |
if set, installation process purges chart on fail. The wait option will be set automatically if atomic is used |
| version | string | *"3.1.2" |
Helm version |
krane
Render
Render a Krane template
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| source | string | bl.Directory |
Kubernetes config to render |
| version | string | *"1.1.2" |
Krane version |
| result | run.output["/krane/result"] |
Rendered config |
Deploy
Deploy a Kubernetes configuration using Krane
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| source | string | bl.Directory |
Kubernetes config to deploy |
| version | string | *"1.1.2" |
Krane version |
| namespace | string |
Kubernetes Namespace to deploy to |
| prune | bool | *true |
Prune resources that are no longer in your Kubernetes template set |
mysql
Database
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| name | string |
N/A |
| create | *true | bool |
N/A |
| server | Server |
N/A |
Server
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| host | string |
N/A |
| port | *3306 | int |
N/A |
| adminUser | string |
N/A |
| adminPassword | string |
N/A |
netlify
Account
A Netlify account
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| name | string | *"" |
Use this Netlify account name (also referred to as "team" in the Netlify docs) |
Site
A Netlify site
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| name | string |
Deploy to this Netlify site |
| url | strings.TrimRight(deploy.output["/info/url"], "\n") |
Deployment url |
| account | Account |
Netlify account this site is attached to |
| domain | string |
Host the site at this address |
| create | bool | *true |
Create the Netlify site if it doesn't exist? |
ssh
Endpoint
A SSH endpoint
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| host | string |
Endpoint hostname |
| port | int | *22 |
Endpoint TCP port |
| user | string |
Endpoint user |
yarn
App
A javascript application built by Yarn
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| environment | { [string]: string } |
Set these environment variables during the build |
| loadEnv | bool | *true |
Load the contents of environment into the yarn process? |
| yarnScript | string | *"build" |
Run this yarn script |
| writeEnvFile | string | *"" |
Write the contents of environment to this file, in the "envfile" format. |
| buildDirectory | string | *"build" |
Read build output from this directory (path must be relative to working directory). |
zip
Archive
Zip archive
Fields
| FIELD | SPEC | DOC |
|---|---|---|
| source | bl.Directory | string |
Source Directory, File or String to Zip from |