blob: 189a295ef79ef141f74cd6b18033f6158a7810f4 [file] [log] [blame]
# A txtar test version of evaluation phase of the process behind our
# CI workflow generation.
#
# Note: all the non-golden files below are updated automatically by
# the internal/ci updateTxtarTests CUE command (with the exception
# of the cue.mod/module.cue file).
-- workflows.cue --
package ci
import (
"github.com/SchemaStore/schemastore/src/schemas/json"
encjson "encoding/json"
)
workflowsDir: *"./" | string @tag(workflowsDir)
_#masterBranch: "master"
_#releaseTagPattern: "v*"
workflows: [...{
file: string
schema: json.#Workflow
}] & [{
file: "test.yml"
schema: test
}, {
file: "repository_dispatch.yml"
schema: repository_dispatch
}, {
file: "release.yml"
schema: release
}, {
file: "tip_triggers.yml"
schema: tip_triggers
}, {
file: "new_version_triggers.yml"
schema: new_version_triggers
}, {
file: "mirror.yml"
schema: mirror
}]
test: _#bashWorkflow & {
name: "Test"
on: push: {
branches: ["**"]
"tags-ignore": [_#releaseTagPattern]
}
jobs: {
start: {
"runs-on": _#linuxMachine
steps: [..._ & {
if: "${{ \(_#isCLCITestBranch) }}"
}] & [_#writeCookiesFile, _#startCLBuild]
}
test: {
needs: "start"
strategy: _#testStrategy
"runs-on": "${{ matrix.os }}"
steps: [_#writeCookiesFile, _#installGo, _#checkoutCode, _#cacheGoModules, _#setGoBuildTags & {
_#tags: "long"
if: "${{ \(_#isMaster) }}"
}, _#goGenerate, _#goTest, _#goTestRace & {
if: "${{ \(_#isMaster) || \(_#isCLCITestBranch) && matrix.go-version == '\(_#latestStableGo)' && matrix.os == '\(_#linuxMachine)' }}"
}, _#goReleaseCheck, _#checkGitClean, _#pullThroughProxy, _#failCLBuild]
}
mark_ci_success: {
"runs-on": _#linuxMachine
if: "${{ \(_#isCLCITestBranch) }}"
needs: "test"
steps: [_#writeCookiesFile, _#passCLBuild]
}
delete_build_branch: {
"runs-on": _#linuxMachine
if: "${{ \(_#isCLCITestBranch) && always() }}"
needs: "test"
steps: [_#step & {
run: """
\(_#tempCueckooGitDir)
git push https://github.com/cuelang/cue :${GITHUB_REF#\(_#branchRefPrefix)}
"""
}]
}
}
// _#isCLCITestBranch is an expression that evaluates to true
// if the job is running as a result of a CL triggered CI build
_#isCLCITestBranch: "startsWith(github.ref, '\(_#branchRefPrefix)ci/')"
// _#isMaster is an expression that evaluates to true if the
// job is running as a result of a master commit push
_#isMaster: "github.ref == '\(_#branchRefPrefix+_#masterBranch)'"
_#pullThroughProxy: _#step & {
name: "Pull this commit through the proxy on \(_#masterBranch)"
run: """
v=$(git rev-parse HEAD)
cd $(mktemp -d)
go mod init mod.com
GOPROXY=https://proxy.golang.org go get -d cuelang.org/go/cmd/cue@$v
"""
if: "${{ \(_#isMaster) }}"
}
_#startCLBuild: _#step & {
name: "Update Gerrit CL message with starting message"
run: (_#gerrit._#setCodeReview & {
#args: {
message: "Started the build... see progress at ${{ github.event.repository.html_url }}/actions/runs/${{ github.run_id }}"
}
}).res
}
_#failCLBuild: _#step & {
if: "${{ \(_#isCLCITestBranch) && failure() }}"
name: "Post any failures for this matrix entry"
run: (_#gerrit._#setCodeReview & {
#args: {
message: "Build failed for ${{ runner.os }}-${{ matrix.go-version }}; see ${{ github.event.repository.html_url }}/actions/runs/${{ github.run_id }} for more details"
labels: "Code-Review": -1
}
}).res
}
_#passCLBuild: _#step & {
name: "Update Gerrit CL message with success message"
run: (_#gerrit._#setCodeReview & {
#args: {
message: "Build succeeded for ${{ github.event.repository.html_url }}/actions/runs/${{ github.run_id }}"
labels: "Code-Review": 1
}
}).res
}
_#gerrit: {
// _#setCodeReview assumes that it is invoked from a job where
// _#isCLCITestBranch is true
_#setCodeReview: {
#args: {
tag: "trybot"
message: string
labels?: "Code-Review": int
}
res: "\(_#curl) -H \"Content-Type: application/json\" --request POST --data '\(encjson.Marshal(#args))' -b ~/.gitcookies https://cue-review.googlesource.com/a/changes/$(basename $(dirname $GITHUB_REF))/revisions/$(basename $GITHUB_REF)/review"
}
}
}
repository_dispatch: _#bashWorkflow & {
// These constants are defined by github.com/cue-sh/tools/cmd/cueckoo
_#runtrybot: "runtrybot"
_#mirror: "mirror"
_#importpr: "importpr"
_#unity: "unity"
_#dispatchJob: _#job & {
_#type: string
"runs-on": _#linuxMachine
if: "${{ github.event.client_payload.type == '\(_#type)' }}"
}
name: "Repository Dispatch"
on: ["repository_dispatch"]
jobs: {
"\(_#runtrybot)": _#dispatchJob & {
_#type: _#runtrybot
steps: [_#step & {
name: "Trigger trybot"
run: """
\(_#tempCueckooGitDir)
git fetch https://cue-review.googlesource.com/cue ${{ github.event.client_payload.payload.ref }}
git checkout -b ci/${{ github.event.client_payload.payload.changeID }}/${{ github.event.client_payload.payload.commit }} FETCH_HEAD
git push https://github.com/cuelang/cue ci/${{ github.event.client_payload.payload.changeID }}/${{ github.event.client_payload.payload.commit }}
"""
}]
}
"\(_#mirror)": _#dispatchJob & {
_#type: _#mirror
steps: _#copybaraSteps & {
_
_#name: "Mirror Gerrit to GitHub"
_#cmd: "github"
}
}
"\(_#importpr)": _#dispatchJob & {
_#type: _#importpr
steps: _#copybaraSteps & {
_
_#name: "Import PR #${{ github.event.client_payload.commit }} from GitHub to Gerrit"
_#cmd: "github-pr ${{ github.event.client_payload.payload.pr }}"
}
}
}
}
mirror: _#bashWorkflow & {
name: "Scheduled repo mirror"
on: schedule: [{
cron: "*/30 * * * *"
}]
jobs: mirror: {
"runs-on": _#linuxMachine
steps: _#copybaraSteps & {
_
_#name: "Mirror Gerrit to GitHub"
_#cmd: "github"
}
}
}
release: _#bashWorkflow & {
name: "Release"
on: push: tags: [_#releaseTagPattern]
jobs: {
goreleaser: {
"runs-on": _#linuxMachine
steps: [_#checkoutCode & {
with: "fetch-depth": 0
}, _#installGo & {
with: version: _#latestStableGo
}, _#step & {
name: "Run GoReleaser"
env: GITHUB_TOKEN: "${{ secrets.ACTIONS_GITHUB_TOKEN }}"
uses: "goreleaser/goreleaser-action@v2"
with: {
args: "release --rm-dist"
version: "v0.155.1"
}
}]
}
docker: {
name: "docker"
"runs-on": _#linuxMachine
steps: [_#checkoutCode, _#step & {
name: "Set version environment"
run: """
CUE_VERSION=$(echo ${GITHUB_REF##refs/tags/v})
echo \"CUE_VERSION=$CUE_VERSION\"
echo \"CUE_VERSION=$(echo $CUE_VERSION)\" >> $GITHUB_ENV
"""
}, _#step & {
name: "Push to Docker Hub"
env: {
DOCKER_BUILDKIT: 1
GOLANG_VERSION: 1.14
CUE_VERSION: "${{ env.CUE_VERSION }}"
}
uses: "docker/build-push-action@v1"
with: {
tags: "${{ env.CUE_VERSION }},latest"
repository: "cuelang/cue"
username: "${{ secrets.DOCKER_USERNAME }}"
password: "${{ secrets.DOCKER_PASSWORD }}"
tag_with_ref: false
tag_with_sha: false
target: "cue"
always_pull: true
build_args: "GOLANG_VERSION=${{ env.GOLANG_VERSION }},CUE_VERSION=v${{ env.CUE_VERSION }}"
add_git_labels: true
}
}]
}
}
}
tip_triggers: _#bashWorkflow & {
name: "Push to tip triggers"
on: push: branches: [_#masterBranch]
jobs: push: {
"runs-on": _#linuxMachine
steps: [{
name: "Rebuild tip.cuelang.org"
run: "\(_#curl) -X POST -d {} https://api.netlify.com/build_hooks/${{ secrets.CuelangOrgTipRebuildHook }}"
}, {
name: "Trigger unity build"
run: "echo \(_#curl) -H \"Content-Type: application/json\" -u cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }} --request POST --data-binary \"{\"event_type\": \"Check against ${GITHUB_SHA}\", \"client_payload\": {\"type\": \"unity\", \"payload\": {\"versions\": \"\\\"commit:${GITHUB_SHA}\\\"\"}}}\" https://api.github.com/repos/cue-sh/unity/dispatches"
}]
}
}
new_version_triggers: _#bashWorkflow & {
name: "New release triggers"
on: push: tags: [_#releaseTagPattern]
jobs: push: {
"runs-on": _#linuxMachine
steps: [{
name: "Rebuild tip.cuelang.org"
run: "\(_#curl) -H \"Content-Type: application/json\" -u cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }} --request POST --data-binary \"{\"event_type\": \"Re-test post release of ${GITHUB_REF##refs/tags/}\"}\" https://api.github.com/repos/cuelang/cuelang.org/dispatches"
}, {
name: "Trigger unity build"
run: "\(_#curl) -H \"Content-Type: application/json\" -u cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }} --request POST --data-binary \"{\"event_type\": \"Check against CUE ${GITHUB_REF##refs/tags/}\", \"client_payload\": {\"type\": \"unity\", \"payload\": {\"versions\": \"\\\"${GITHUB_REF##refs/tags/}\\\"}}}\" https://api.github.com/repos/cue-sh/unity/dispatches"
}]
}
}
_#bashWorkflow: json.#Workflow & {
jobs: [string]: defaults: run: shell: "bash"
}
// TODO: drop when cuelang.org/issue/390 is fixed.
// Declare definitions for sub-schemas
_#job: ((json.#Workflow & {}).jobs & {
x: _
}).x
_#step: ((_#job & {
steps: _
}).steps & [_])[0]
// We need at least go1.14 for code generation
_#codeGenGo: "1.14.14"
// Use a specific latest version for release builds
_#latestStableGo: "1.15.8"
_#linuxMachine: "ubuntu-18.04"
_#macosMachine: "macos-10.15"
_#windowsMachine: "windows-2019"
_#testStrategy: {
"fail-fast": false
matrix: {
// Use a stable version of 1.14.x for go generate
"go-version": [_#codeGenGo, _#latestStableGo, "1.16"]
os: [_#linuxMachine, _#macosMachine, _#windowsMachine]
}
}
_#setGoBuildTags: _#step & {
_#tags: string
name: "Set go build tags"
run: "go env -w GOFLAGS=-tags=\(_#tags)"
}
_#installGo: _#step & {
name: "Install Go"
uses: "actions/setup-go@v2"
with: {
"go-version": *"${{ matrix.go-version }}" | string
stable: false
}
}
_#checkoutCode: _#step & {
name: "Checkout code"
uses: "actions/checkout@v2"
}
_#cacheGoModules: _#step & {
name: "Cache Go modules"
uses: "actions/cache@v1"
with: {
path: "~/go/pkg/mod"
key: "${{ runner.os }}-${{ matrix.go-version }}-go-${{ hashFiles('**/go.sum') }}"
"restore-keys": """
${{ runner.os }}-${{ matrix.go-version }}-go-
"""
}
}
_#goGenerate: _#step & {
name: "Generate"
run: "go generate ./..."
// The Go version corresponds to the precise version specified in
// the matrix. Skip windows for now until we work out why re-gen is flaky
if: "matrix.go-version == '\(_#codeGenGo)' && matrix.os != '\(_#windowsMachine)'"
}
_#goTest: _#step & {
name: "Test"
run: "go test ./..."
}
_#goTestRace: _#step & {
name: "Test with -race"
run: "go test -race ./..."
}
_#goReleaseCheck: _#step & {
name: "gorelease check"
run: "go run golang.org/x/exp/cmd/gorelease"
}
_#checkGitClean: _#step & {
name: "Check that git is clean post generate and tests"
run: "test -z \"$(git status --porcelain)\" || (git status; git diff; false)"
}
_#writeCookiesFile: _#step & {
name: "Write the gitcookies file"
run: "echo \"${{ secrets.gerritCookie }}\" > ~/.gitcookies"
}
_#branchRefPrefix: "refs/heads/"
_#tempCueckooGitDir: """
mkdir tmpgit
cd tmpgit
git init
git config user.name cueckoo
git config user.email cueckoo@gmail.com
git config http.https://github.com/.extraheader "AUTHORIZATION: basic $(echo -n cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }} | base64)"
"""
// The cueckoo/copybara Docker image to use
_#cueckooCopybaraImage: "cueckoo/copybara:afc4ae03eed00b0c9d7415141cd1b5dfa583da7c"
// Define the base command for copybara
_#copybaraCmd: {
"""
cd _scripts
docker run --rm -v $PWD/cache:/root/copybara/cache -v $PWD:/usr/src/app --entrypoint="" \(_#cueckooCopybaraImage) bash -c " \\
\tset -eu; \\
\techo \\"${{ secrets.gerritCookie }}\\" > ~/.gitcookies; \\
\tchmod 600 ~/.gitcookies; \\
\tgit config --global user.name cueckoo; \\
\tgit config --global user.email cueckoo@gmail.com; \\
\tgit config --global http.cookiefile \\$HOME/.gitcookies; \\
\techo https://cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }}@github.com > ~/.git-credentials; \\
\tchmod 600 ~/.git-credentials; \\
\tjava -jar /opt/copybara/copybara_deploy.jar migrate copy.bara.sky \(_#cmd); \\
\t"
"""
_#cmd: string
}
_#copybaraSteps: {
let cmdCmd = _#cmd
[_#checkoutCode, _#step & {
name: _#name
run: _#copybaraCmd & {
_
_#cmd: cmdCmd
}
}]
_#name: string
_#cmd: string
}
_#curl: "curl -s"
-- cue.mod/module.cue --
module: "mod.com"
-- cue.mod/pkg/github.com/SchemaStore/schemastore/src/schemas/json/github-workflow.cue --
package json
import "strings"
#Workflow: {
@jsonschema(schema="http://json-schema.org/draft-07/schema")
null | bool | number | string | [...] | {
// The name of your workflow. GitHub displays the names of your
// workflows on your repository's actions page. If you omit this
// field, GitHub sets the name to the workflow's filename.
name?: string
// The name of the GitHub event that triggers the workflow. You
// can provide a single event string, array of events, array of
// event types, or an event configuration map that schedules a
// workflow or restricts the execution of a workflow to specific
// files, tags, or branch changes. For a list of available
// events, see
// https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows.
on: #event | [...#event] & [_, ...] | {
// Runs your workflow anytime the check_run event occurs. More
// than one activity type triggers this event. For information
// about the REST API, see
// https://developer.github.com/v3/checks/runs.
check_run?: #eventObject & {
types?: #types & [..."created" | "rerequested" | "completed" | "requested_action"] | *["created", "rerequested", "completed", "requested_action"]
...
}
// Runs your workflow anytime the check_suite event occurs. More
// than one activity type triggers this event. For information
// about the REST API, see
// https://developer.github.com/v3/checks/suites/.
check_suite?: #eventObject & {
types?: #types & [..."completed" | "requested" | "rerequested"] | *["completed", "requested", "rerequested"]
...
}
// Runs your workflow anytime someone creates a branch or tag,
// which triggers the create event. For information about the
// REST API, see
// https://developer.github.com/v3/git/refs/#create-a-reference.
create?: #eventObject
// Runs your workflow anytime someone deletes a branch or tag,
// which triggers the delete event. For information about the
// REST API, see
// https://developer.github.com/v3/git/refs/#delete-a-reference.
delete?: #eventObject
// Runs your workflow anytime someone creates a deployment, which
// triggers the deployment event. Deployments created with a
// commit SHA may not have a Git ref. For information about the
// REST API, see
// https://developer.github.com/v3/repos/deployments/.
deployment?: #eventObject
// Runs your workflow anytime a third party provides a deployment
// status, which triggers the deployment_status event.
// Deployments created with a commit SHA may not have a Git ref.
// For information about the REST API, see
// https://developer.github.com/v3/repos/deployments/#create-a-deployment-status.
deployment_status?: #eventObject
// Runs your workflow anytime when someone forks a repository,
// which triggers the fork event. For information about the REST
// API, see
// https://developer.github.com/v3/repos/forks/#create-a-fork.
fork?: #eventObject
// Runs your workflow when someone creates or updates a Wiki page,
// which triggers the gollum event.
gollum?: #eventObject
// Runs your workflow anytime the issue_comment event occurs. More
// than one activity type triggers this event. For information
// about the REST API, see
// https://developer.github.com/v3/issues/comments/.
issue_comment?: #eventObject & {
types?: #types & [..."created" | "edited" | "deleted"] | *["created", "edited", "deleted"]
...
}
// Runs your workflow anytime the issues event occurs. More than
// one activity type triggers this event. For information about
// the REST API, see https://developer.github.com/v3/issues.
issues?: #eventObject & {
types?: #types & [..."opened" | "edited" | "deleted" | "transferred" | "pinned" | "unpinned" | "closed" | "reopened" | "assigned" | "unassigned" | "labeled" | "unlabeled" | "locked" | "unlocked" | "milestoned" | "demilestoned"] | *["opened", "edited", "deleted", "transferred", "pinned", "unpinned", "closed", "reopened", "assigned", "unassigned", "labeled", "unlabeled", "locked", "unlocked", "milestoned", "demilestoned"]
...
}
// Runs your workflow anytime the label event occurs. More than
// one activity type triggers this event. For information about
// the REST API, see
// https://developer.github.com/v3/issues/labels/.
label?: #eventObject & {
types?: #types & [..."created" | "edited" | "deleted"] | *["created", "edited", "deleted"]
...
}
// Runs your workflow anytime the member event occurs. More than
// one activity type triggers this event. For information about
// the REST API, see
// https://developer.github.com/v3/repos/collaborators/.
member?: #eventObject & {
types?: #types & [..."added" | "edited" | "deleted"] | *["added", "edited", "deleted"]
...
}
// Runs your workflow anytime the milestone event occurs. More
// than one activity type triggers this event. For information
// about the REST API, see
// https://developer.github.com/v3/issues/milestones/.
milestone?: #eventObject & {
types?: #types & [..."created" | "closed" | "opened" | "edited" | "deleted"] | *["created", "closed", "opened", "edited", "deleted"]
...
}
// Runs your workflow anytime someone pushes to a GitHub
// Pages-enabled branch, which triggers the page_build event. For
// information about the REST API, see
// https://developer.github.com/v3/repos/pages/.
page_build?: #eventObject
// Runs your workflow anytime the project event occurs. More than
// one activity type triggers this event. For information about
// the REST API, see https://developer.github.com/v3/projects/.
project?: #eventObject & {
types?: #types & [..."created" | "updated" | "closed" | "reopened" | "edited" | "deleted"] | *["created", "updated", "closed", "reopened", "edited", "deleted"]
...
}
// Runs your workflow anytime the project_card event occurs. More
// than one activity type triggers this event. For information
// about the REST API, see
// https://developer.github.com/v3/projects/cards.
project_card?: #eventObject & {
types?: #types & [..."created" | "moved" | "converted" | "edited" | "deleted"] | *["created", "moved", "converted", "edited", "deleted"]
...
}
// Runs your workflow anytime the project_column event occurs.
// More than one activity type triggers this event. For
// information about the REST API, see
// https://developer.github.com/v3/projects/columns.
project_column?: #eventObject & {
types?: #types & [..."created" | "updated" | "moved" | "deleted"] | *["created", "updated", "moved", "deleted"]
...
}
// Runs your workflow anytime someone makes a private repository
// public, which triggers the public event. For information about
// the REST API, see https://developer.github.com/v3/repos/#edit.
public?: #eventObject
// Runs your workflow anytime the pull_request event occurs. More
// than one activity type triggers this event. For information
// about the REST API, see https://developer.github.com/v3/pulls.
// Note: Workflows do not run on private base repositories when
// you open a pull request from a forked repository.
// When you create a pull request from a forked repository to the
// base repository, GitHub sends the pull_request event to the
// base repository and no pull request events occur on the forked
// repository.
// Workflows don't run on forked repositories by default. You must
// enable GitHub Actions in the Actions tab of the forked
// repository.
// The permissions for the GITHUB_TOKEN in forked repositories is
// read-only. For more information about the GITHUB_TOKEN, see
// https://help.github.com/en/articles/virtual-environments-for-github-actions.
pull_request?: #ref & {
types?: #types & [..."assigned" | "unassigned" | "labeled" | "unlabeled" | "opened" | "edited" | "closed" | "reopened" | "synchronize" | "ready_for_review" | "locked" | "unlocked" | "review_requested" | "review_request_removed"] | *["opened", "synchronize", "reopened"]
{[=~"^(branche|tag|path)s(-ignore)?$" & !~"^(types)$"]: _}
}
// Runs your workflow anytime the pull_request_review event
// occurs. More than one activity type triggers this event. For
// information about the REST API, see
// https://developer.github.com/v3/pulls/reviews.
// Note: Workflows do not run on private base repositories when
// you open a pull request from a forked repository.
// When you create a pull request from a forked repository to the
// base repository, GitHub sends the pull_request event to the
// base repository and no pull request events occur on the forked
// repository.
// Workflows don't run on forked repositories by default. You must
// enable GitHub Actions in the Actions tab of the forked
// repository.
// The permissions for the GITHUB_TOKEN in forked repositories is
// read-only. For more information about the GITHUB_TOKEN, see
// https://help.github.com/en/articles/virtual-environments-for-github-actions.
pull_request_review?: #eventObject & {
types?: #types & [..."submitted" | "edited" | "dismissed"] | *["submitted", "edited", "dismissed"]
...
}
// Runs your workflow anytime a comment on a pull request's
// unified diff is modified, which triggers the
// pull_request_review_comment event. More than one activity type
// triggers this event. For information about the REST API, see
// https://developer.github.com/v3/pulls/comments.
// Note: Workflows do not run on private base repositories when
// you open a pull request from a forked repository.
// When you create a pull request from a forked repository to the
// base repository, GitHub sends the pull_request event to the
// base repository and no pull request events occur on the forked
// repository.
// Workflows don't run on forked repositories by default. You must
// enable GitHub Actions in the Actions tab of the forked
// repository.
// The permissions for the GITHUB_TOKEN in forked repositories is
// read-only. For more information about the GITHUB_TOKEN, see
// https://help.github.com/en/articles/virtual-environments-for-github-actions.
pull_request_review_comment?: #eventObject & {
types?: #types & [..."created" | "edited" | "deleted"] | *["created", "edited", "deleted"]
...
}
// This event is similar to pull_request, except that it runs in
// the context of the base repository of the pull request, rather
// than in the merge commit. This means that you can more safely
// make your secrets available to the workflows triggered by the
// pull request, because only workflows defined in the commit on
// the base repository are run. For example, this event allows
// you to create workflows that label and comment on pull
// requests, based on the contents of the event payload.
pull_request_target?: #ref & {
types?: #types & [..."assigned" | "unassigned" | "labeled" | "unlabeled" | "opened" | "edited" | "closed" | "reopened" | "synchronize" | "ready_for_review" | "locked" | "unlocked" | "review_requested" | "review_request_removed"] | *["opened", "synchronize", "reopened"]
{[=~"^(branche|tag|path)s(-ignore)?$" & !~"^(types)$"]: _}
}
// Runs your workflow when someone pushes to a repository branch,
// which triggers the push event.
// Note: The webhook payload available to GitHub Actions does not
// include the added, removed, and modified attributes in the
// commit object. You can retrieve the full commit object using
// the REST API. For more information, see
// https://developer.github.com/v3/repos/commits/#get-a-single-commit.
push?: #ref & {
{[=~"^(branche|tag|path)s(-ignore)?$" & !~"^()$"]: _}
}
// Runs your workflow anytime a package is published or updated.
// For more information, see
// https://help.github.com/en/github/managing-packages-with-github-packages.
registry_package?: #eventObject & {
types?: #types & [..."published" | "updated"] | *["published", "updated"]
...
}
// Runs your workflow anytime the release event occurs. More than
// one activity type triggers this event. For information about
// the REST API, see
// https://developer.github.com/v3/repos/releases/ in the GitHub
// Developer documentation.
release?: #eventObject & {
types?: #types & [..."published" | "unpublished" | "created" | "edited" | "deleted" | "prereleased" | "released"] | *["published", "unpublished", "created", "edited", "deleted", "prereleased", "released"]
...
}
// Runs your workflow anytime the status of a Git commit changes,
// which triggers the status event. For information about the
// REST API, see https://developer.github.com/v3/repos/statuses/.
status?: #eventObject
// Runs your workflow anytime the watch event occurs. More than
// one activity type triggers this event. For information about
// the REST API, see
// https://developer.github.com/v3/activity/starring/.
watch?: #eventObject
// You can now create workflows that are manually triggered with
// the new workflow_dispatch event. You will then see a 'Run
// workflow' button on the Actions tab, enabling you to easily
// trigger a run.
workflow_dispatch?: null | bool | number | string | [...] | {
// Input parameters allow you to specify data that the action
// expects to use during runtime. GitHub stores input parameters
// as environment variables. Input ids with uppercase letters are
// converted to lowercase during runtime. We recommended using
// lowercase input ids.
inputs?: {
{[=~"^[_a-zA-Z][a-zA-Z0-9_-]*$" & !~"^()$"]: {
// A string description of the input parameter.
description: string
// A string shown to users using the deprecated input.
deprecationMessage?: string
// A boolean to indicate whether the action requires the input
// parameter. Set to true when the parameter is required.
required: bool
// A string representing the default value. The default value is
// used when an input parameter isn't specified in a workflow
// file.
default?: string
}}
}
...
}
// This event occurs when a workflow run is requested or
// completed, and allows you to execute a workflow based on the
// finished result of another workflow. For example, if your
// pull_request workflow generates build artifacts, you can
// create a new workflow that uses workflow_run to analyze the
// results and add a comment to the original pull request.
workflow_run?: #eventObject & {
types?: #types & [..."requested" | "completed"] | *["requested", "completed"]
workflows?: [...string] & [_, ...]
{[=~"^branches(-ignore)?$" & !~"^(types|workflows)$"]: _}
...
}
// You can use the GitHub API to trigger a webhook event called
// repository_dispatch when you want to trigger a workflow for
// activity that happens outside of GitHub. For more information,
// see
// https://developer.github.com/v3/repos/#create-a-repository-dispatch-event.
// To trigger the custom repository_dispatch webhook event, you
// must send a POST request to a GitHub API endpoint and provide
// an event_type name to describe the activity type. To trigger a
// workflow run, you must also configure your workflow to use the
// repository_dispatch event.
repository_dispatch?: #eventObject
// You can schedule a workflow to run at specific UTC times using
// POSIX cron syntax
// (https://pubs.opengroup.org/onlinepubs/9699919799/utilities/crontab.html#tag_20_25_07).
// Scheduled workflows run on the latest commit on the default or
// base branch. The shortest interval you can run scheduled
// workflows is once every 5 minutes.
// Note: GitHub Actions does not support the non-standard syntax
// @yearly, @monthly, @weekly, @daily, @hourly, and @reboot.
// You can use crontab guru (https://crontab.guru/). to help
// generate your cron syntax and confirm what time it will run.
// To help you get started, there is also a list of crontab guru
// examples (https://crontab.guru/examples.html).
schedule?: [...null | bool | number | string | [...] | {
cron?: =~"^(((\\d+,)+\\d+|((\\d+|\\*)\\/\\d+|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)|(\\d+-\\d+)|\\d+|\\*|MON|TUE|WED|THU|FRI|SAT|SUN) ?){5,7}$"
}] & [_, ...]
}
// A map of environment variables that are available to all jobs
// and steps in the workflow.
env?: #env
// A map of default settings that will apply to all jobs in the
// workflow.
defaults?: #defaults
// A workflow run is made up of one or more jobs. Jobs run in
// parallel by default. To run jobs sequentially, you can define
// dependencies on other jobs using the jobs.<job_id>.needs
// keyword.
// Each job runs in a fresh instance of the virtual environment
// specified by runs-on.
// You can run an unlimited number of jobs as long as you are
// within the workflow usage limits. For more information, see
// https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#usage-limits.
jobs: {
{[=~"^[_a-zA-Z][a-zA-Z0-9_-]*$" & !~"^()$"]: {
// The name of the job displayed on GitHub.
name?: string
// Identifies any jobs that must complete successfully before this
// job will run. It can be a string or array of strings. If a job
// fails, all jobs that need it are skipped unless the jobs use a
// conditional statement that causes the job to continue.
needs?: [...#name] & [_, ...] | #name
// The type of machine to run the job on. The machine can be
// either a GitHub-hosted runner, or a self-hosted runner.
"runs-on": "macos-10.15" | "macos-11.0" | "macos-latest" | "self-hosted" | "ubuntu-16.04" | "ubuntu-18.04" | "ubuntu-20.04" | "ubuntu-latest" | "windows-2016" | "windows-2019" | "windows-latest" | (["self-hosted"] | ["self-hosted", #machine] | ["self-hosted", #architecture] | ["self-hosted", #machine, #architecture] | ["self-hosted", #architecture, #machine]) & [...] | #expressionSyntax
// The environment that the job references.
environment?: string | #environment
// A map of outputs for a job. Job outputs are available to all
// downstream jobs that depend on this job.
outputs?: {
[string]: string
}
// A map of environment variables that are available to all steps
// in the job.
env?: #env
// A map of default settings that will apply to all steps in the
// job.
defaults?: #defaults
// You can use the if conditional to prevent a job from running
// unless a condition is met. You can use any supported context
// and expression to create a conditional.
// Expressions in an if conditional do not require the ${{ }}
// syntax. For more information, see
// https://help.github.com/en/articles/contexts-and-expression-syntax-for-github-actions.
if?: string
// A job contains a sequence of tasks called steps. Steps can run
// commands, run setup tasks, or run an action in your
// repository, a public repository, or an action published in a
// Docker registry. Not all steps run actions, but all actions
// run as a step. Each step runs in its own process in the
// virtual environment and has access to the workspace and
// filesystem. Because steps run in their own process, changes to
// environment variables are not preserved between steps. GitHub
// provides built-in steps to set up and complete a job.
steps?: [...{
// A unique identifier for the step. You can use the id to
// reference the step in contexts. For more information, see
// https://help.github.com/en/articles/contexts-and-expression-syntax-for-github-actions.
id?: string
// You can use the if conditional to prevent a step from running
// unless a condition is met. You can use any supported context
// and expression to create a conditional.
// Expressions in an if conditional do not require the ${{ }}
// syntax. For more information, see
// https://help.github.com/en/articles/contexts-and-expression-syntax-for-github-actions.
if?: string
// A name for your step to display on GitHub.
name?: string
// Selects an action to run as part of a step in your job. An
// action is a reusable unit of code. You can use an action
// defined in the same repository as the workflow, a public
// repository, or in a published Docker container image
// (https://hub.docker.com/).
// We strongly recommend that you include the version of the
// action you are using by specifying a Git ref, SHA, or Docker
// tag number. If you don't specify a version, it could break
// your workflows or cause unexpected behavior when the action
// owner publishes an update.
// - Using the commit SHA of a released action version is the
// safest for stability and security.
// - Using the specific major action version allows you to receive
// critical fixes and security patches while still maintaining
// compatibility. It also assures that your workflow should still
// work.
// - Using the master branch of an action may be convenient, but
// if someone releases a new major version with a breaking
// change, your workflow could break.
// Some actions require inputs that you must set using the with
// keyword. Review the action's README file to determine the
// inputs required.
// Actions are either JavaScript files or Docker containers. If
// the action you're using is a Docker container you must run the
// job in a Linux virtual environment. For more details, see
// https://help.github.com/en/articles/virtual-environments-for-github-actions.
uses?: string
// Runs command-line programs using the operating system's shell.
// If you do not provide a name, the step name will default to
// the text specified in the run command.
// Commands run using non-login shells by default. You can choose
// a different shell and customize the shell used to run
// commands. For more information, see
// https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#using-a-specific-shell.
// Each run keyword represents a new process and shell in the
// virtual environment. When you provide multi-line commands,
// each line runs in the same shell.
run?: string, "working-directory"?: #["working-directory"], shell?: #shell
// A map of the input parameters defined by the action. Each input
// parameter is a key/value pair. Input parameters are set as
// environment variables. The variable is prefixed with INPUT_
// and converted to upper case.
with?: #env & {
args?: string, entrypoint?: string, ...
}
// Sets environment variables for steps to use in the virtual
// environment. You can also set environment variables for the
// entire workflow or a job.
env?: #env
// Prevents a job from failing when a step fails. Set to true to
// allow a job to pass when this step fails.
"continue-on-error"?: bool | #expressionSyntax | *false
// The maximum number of minutes to run the step before killing
// the process.
"timeout-minutes"?: number
}] & [_, ...]
// The maximum number of minutes to let a workflow run before
// GitHub automatically cancels it. Default: 360
"timeout-minutes"?: number | *360
// A strategy creates a build matrix for your jobs. You can define
// different variations of an environment to run each job in.
strategy?: {
// A build matrix is a set of different configurations of the
// virtual environment. For example you might run a job against
// more than one supported version of a language, operating
// system, or tool. Each configuration is a copy of the job that
// runs and reports a status.
// You can specify a matrix by supplying an array for the
// configuration options. For example, if the GitHub virtual
// environment supports Node.js versions 6, 8, and 10 you could
// specify an array of those versions in the matrix.
// When you define a matrix of operating systems, you must set the
// required runs-on keyword to the operating system of the
// current job, rather than hard-coding the operating system
// name. To access the operating system name, you can use the
// matrix.os context parameter to set runs-on. For more
// information, see
// https://help.github.com/en/articles/contexts-and-expression-syntax-for-github-actions.
matrix: ({
...
} | #expressionSyntax) & {
{[=~"^(in|ex)clude$" & !~"^()$"]: [...{
[string]: #configuration
}] & [_, ...]}
{[!~"^(in|ex)clude$" & !~"^()$"]: [...#configuration] & [_, ...]}
}
// When set to true, GitHub cancels all in-progress jobs if any
// matrix job fails. Default: true
"fail-fast"?: bool | *true
// The maximum number of jobs that can run simultaneously when
// using a matrix job strategy. By default, GitHub will maximize
// the number of jobs run in parallel depending on the available
// runners on GitHub-hosted virtual machines.
"max-parallel"?: number
}
// Prevents a workflow run from failing when a job fails. Set to
// true to allow a workflow run to pass when this job fails.
"continue-on-error"?: bool | #expressionSyntax
// A container to run any steps in a job that don't already
// specify a container. If you have steps that use both script
// and container actions, the container actions will run as
// sibling containers on the same network with the same volume
// mounts.
// If you do not set a container, all steps will run directly on
// the host specified by runs-on unless a step refers to an
// action configured to run in a container.
container?: string | #container
// Additional containers to host services for a job in a workflow.
// These are useful for creating databases or cache services like
// redis. The runner on the virtual machine will automatically
// create a network and manage the life cycle of the service
// containers.
// When you use a service container for a job or your step uses
// container actions, you don't need to set port information to
// access the service. Docker automatically exposes all ports
// between containers on the same network.
// When both the job and the action run in a container, you can
// directly reference the container by its hostname. The hostname
// is automatically mapped to the service name.
// When a step does not use a container action, you must access
// the service using localhost and bind the ports.
services?: {
[string]: #container
}
}}
}
}
#architecture: "ARM32" | "x64" | "x86"
#branch: #globs
#configuration: string | number | bool | {
[string]: #configuration
} | [...#configuration]
#container: {
// The Docker image to use as the container to run the action. The
// value can be the Docker Hub image name or a registry name.
image: string
// If the image's container registry requires authentication to
// pull the image, you can use credentials to set a map of the
// username and password. The credentials are the same values
// that you would provide to the `docker login` command.
credentials?: {
username?: string
password?: string
...
}
// Sets an array of environment variables in the container.
env?: #env
// Sets an array of ports to expose on the container.
ports?: [...number | string] & [_, ...]
// Sets an array of volumes for the container to use. You can use
// volumes to share data between services or other steps in a
// job. You can specify named Docker volumes, anonymous Docker
// volumes, or bind mounts on the host.
// To specify a volume, you specify the source and destination
// path: <source>:<destinationPath>
// The <source> is a volume name or an absolute path on the host
// machine, and <destinationPath> is an absolute path in the
// container.
volumes?: [...=~"^[^:]+:[^:]+$"] & [_, ...]
// Additional Docker container resource options. For a list of
// options, see
// https://docs.docker.com/engine/reference/commandline/create/#options.
options?: string
}
#defaults: run?: {
shell?: #shell
"working-directory"?: #["working-directory"]
}
#env: [string]: bool | number | string
#environment: {
// The name of the environment configured in the repo.
name: string
// A deployment URL
url?: string
}
#event: "check_run" | "check_suite" | "create" | "delete" | "deployment" | "deployment_status" | "fork" | "gollum" | "issue_comment" | "issues" | "label" | "member" | "milestone" | "page_build" | "project" | "project_card" | "project_column" | "public" | "pull_request" | "pull_request_review" | "pull_request_review_comment" | "pull_request_target" | "push" | "registry_package" | "release" | "status" | "watch" | "workflow_dispatch" | "workflow_run" | "repository_dispatch"
#eventObject: null | {
...
}
#expressionSyntax: =~"^\\$\\{\\{.*\\}\\}$"
#globs: [...strings.MinRunes(1)] & [_, ...]
#machine: "linux" | "macos" | "windows"
#name: =~"^[_a-zA-Z][a-zA-Z0-9_-]*$"
#path: #globs
#ref: null | {
branches?: #branch
"branches-ignore"?: #branch
tags?: #branch
"tags-ignore"?: #branch
paths?: #path
"paths-ignore"?: #path
...
}
#shell: (string | ("bash" | "pwsh" | "python" | "sh" | "cmd" | "powershell")) & string
#types: [_, ...]
#: "working-directory": string
}
-- out/eval --
(struct){
workflowsDir: (string){ |(*(string){ "./" }, (string){ string }) }
_#masterBranch(:ci): (string){ "master" }
_#releaseTagPattern(:ci): (string){ "v*" }
workflows: (#list){
0: (struct){
file: (string){ "test.yml" }
schema: (#struct){
#architecture: (string){ |((string){ "ARM32" }, (string){ "x64" }, (string){ "x86" }) }
#branch: (list){
0: (string){ strings.MinRunes(1) }
}
#configuration: ((bool|string|list|struct|number)){ |((string){ string }, (number){ number }, (bool){ bool }, (#struct){
}, (list){
}) }
#container: (#struct){
image: (string){ string }
}
#defaults: (#struct){
}
#env: (#struct){
}
#environment: (#struct){
name: (string){ string }
}
#event: (string){ |((string){ "check_run" }, (string){ "check_suite" }, (string){ "create" }, (string){ "delete" }, (string){ "deployment" }, (string){ "deployment_status" }, (string){ "fork" }, (string){ "gollum" }, (string){ "issue_comment" }, (string){ "issues" }, (string){ "label" }, (string){ "member" }, (string){ "milestone" }, (string){ "page_build" }, (string){ "project" }, (string){ "project_card" }, (string){ "project_column" }, (string){ "public" }, (string){ "pull_request" }, (string){ "pull_request_review" }, (string){ "pull_request_review_comment" }, (string){ "pull_request_target" }, (string){ "push" }, (string){ "registry_package" }, (string){ "release" }, (string){ "status" }, (string){ "watch" }, (string){ "workflow_dispatch" }, (string){ "workflow_run" }, (string){ "repository_dispatch" }) }
#eventObject: ((null|struct)){ |((null){ null }, (#struct){
}) }
#expressionSyntax: (string){ =~"^\\$\\{\\{.*\\}\\}$" }
#globs: (list){
0: (string){ strings.MinRunes(1) }
}
#machine: (string){ |((string){ "linux" }, (string){ "macos" }, (string){ "windows" }) }
#name: (string){ =~"^[_a-zA-Z][a-zA-Z0-9_-]*$" }
#path: (list){
0: (string){ strings.MinRunes(1) }
}
#ref: ((null|struct)){ |((null){ null }, (#struct){
}) }
#shell: (string){ |((string){ string }, (string){ "bash" }, (string){ "pwsh" }, (string){ "python" }, (string){ "sh" }, (string){ "cmd" }, (string){ "powershell" }) }
#types: (list){
0: (_){ _ }
}
#: (#struct){
"working-directory": (string){ string }
}
jobs: (#struct){
start: (#struct){
"runs-on": (string){ "ubuntu-18.04" }
steps: (#list){
0: (#struct){
name: (string){ "Write the gitcookies file" }
run: (string){ "echo \"${{ secrets.gerritCookie }}\" > ~/.gitcookies" }
if: (string){ "${{ startsWith(github.ref, 'refs/heads/ci/') }}" }
}
1: (#struct){
name: (string){ "Update Gerrit CL message with starting message" }
run: (string){ "curl -s -H \"Content-Type: application/json\" --request POST --data '{\"tag\":\"trybot\",\"message\":\"Started the build... see progress at ${{ github.event.repository.html_url }}/actions/runs/${{ github.run_id }}\"}' -b ~/.gitcookies https://cue-review.googlesource.com/a/changes/$(basename $(dirname $GITHUB_REF))/revisions/$(basename $GITHUB_REF)/review" }
if: (string){ "${{ startsWith(github.ref, 'refs/heads/ci/') }}" }
}
}
defaults: (#struct){
run: (#struct){
shell: (string){ "bash" }
}
}
}
test: (#struct){
needs: (string){ "start" }
strategy: (#struct){
"fail-fast": (bool){ false }
matrix: (#struct){
"go-version": (#list){
0: (string){ "1.14.14" }
1: (string){ "1.15.8" }
2: (string){ "1.16" }
}
os: (#list){
0: (string){ "ubuntu-18.04" }
1: (string){ "macos-10.15" }
2: (string){ "windows-2019" }
}
}
}
"runs-on": (string){ "${{ matrix.os }}" }
steps: (#list){
0: (#struct){
name: (string){ "Write the gitcookies file" }
run: (string){ "echo \"${{ secrets.gerritCookie }}\" > ~/.gitcookies" }
}
1: (#struct){
name: (string){ "Install Go" }
uses: (string){ "actions/setup-go@v2" }
with: (#struct){
"go-version": (string){ |(*(string){ "${{ matrix.go-version }}" }, (string){ string }) }
stable: (bool){ false }
}
}
2: (#struct){
name: (string){ "Checkout code" }
uses: (string){ "actions/checkout@v2" }
}
3: (#struct){
name: (string){ "Cache Go modules" }
uses: (string){ "actions/cache@v1" }
with: (#struct){
path: (string){ "~/go/pkg/mod" }
key: (string){ "${{ runner.os }}-${{ matrix.go-version }}-go-${{ hashFiles('**/go.sum') }}" }
"restore-keys": (string){ "${{ runner.os }}-${{ matrix.go-version }}-go-" }
}
}
4: (#struct){
_#tags(:ci): (string){ "long" }
name: (string){ "Set go build tags" }
run: (string){ "go env -w GOFLAGS=-tags=long" }
if: (string){ "${{ github.ref == 'refs/heads/master' }}" }
}
5: (#struct){
name: (string){ "Generate" }
run: (string){ "go generate ./..." }
if: (string){ "matrix.go-version == '1.14.14' && matrix.os != 'windows-2019'" }
}
6: (#struct){
name: (string){ "Test" }
run: (string){ "go test ./..." }
}
7: (#struct){
name: (string){ "Test with -race" }
run: (string){ "go test -race ./..." }
if: (string){ "${{ github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/ci/') && matrix.go-version == '1.15.8' && matrix.os == 'ubuntu-18.04' }}" }
}
8: (#struct){
name: (string){ "gorelease check" }
run: (string){ "go run golang.org/x/exp/cmd/gorelease" }
}
9: (#struct){
name: (string){ "Check that git is clean post generate and tests" }
run: (string){ "test -z \"$(git status --porcelain)\" || (git status; git diff; false)" }
}
10: (#struct){
name: (string){ "Pull this commit through the proxy on master" }
run: (string){ "v=$(git rev-parse HEAD)\ncd $(mktemp -d)\ngo mod init mod.com\nGOPROXY=https://proxy.golang.org go get -d cuelang.org/go/cmd/cue@$v" }
if: (string){ "${{ github.ref == 'refs/heads/master' }}" }
}
11: (#struct){
if: (string){ "${{ startsWith(github.ref, 'refs/heads/ci/') && failure() }}" }
name: (string){ "Post any failures for this matrix entry" }
run: (string){ "curl -s -H \"Content-Type: application/json\" --request POST --data '{\"tag\":\"trybot\",\"message\":\"Build failed for ${{ runner.os }}-${{ matrix.go-version }}; see ${{ github.event.repository.html_url }}/actions/runs/${{ github.run_id }} for more details\",\"labels\":{\"Code-Review\":-1}}' -b ~/.gitcookies https://cue-review.googlesource.com/a/changes/$(basename $(dirname $GITHUB_REF))/revisions/$(basename $GITHUB_REF)/review" }
}
}
defaults: (#struct){
run: (#struct){
shell: (string){ "bash" }
}
}
}
mark_ci_success: (#struct){
"runs-on": (string){ "ubuntu-18.04" }
if: (string){ "${{ startsWith(github.ref, 'refs/heads/ci/') }}" }
needs: (string){ "test" }
steps: (#list){
0: (#struct){
name: (string){ "Write the gitcookies file" }
run: (string){ "echo \"${{ secrets.gerritCookie }}\" > ~/.gitcookies" }
}
1: (#struct){
name: (string){ "Update Gerrit CL message with success message" }
run: (string){ "curl -s -H \"Content-Type: application/json\" --request POST --data '{\"tag\":\"trybot\",\"message\":\"Build succeeded for ${{ github.event.repository.html_url }}/actions/runs/${{ github.run_id }}\",\"labels\":{\"Code-Review\":1}}' -b ~/.gitcookies https://cue-review.googlesource.com/a/changes/$(basename $(dirname $GITHUB_REF))/revisions/$(basename $GITHUB_REF)/review" }
}
}
defaults: (#struct){
run: (#struct){
shell: (string){ "bash" }
}
}
}
delete_build_branch: (#struct){
"runs-on": (string){ "ubuntu-18.04" }
if: (string){ "${{ startsWith(github.ref, 'refs/heads/ci/') && always() }}" }
needs: (string){ "test" }
steps: (#list){
0: (#struct){
run: (string){ "mkdir tmpgit\ncd tmpgit\ngit init\ngit config user.name cueckoo\ngit config user.email cueckoo@gmail.com\ngit config http.https://github.com/.extraheader \"AUTHORIZATION: basic $(echo -n cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }} | base64)\"\ngit push https://github.com/cuelang/cue :${GITHUB_REF#refs/heads/}" }
}
}
defaults: (#struct){
run: (#struct){
shell: (string){ "bash" }
}
}
}
}
name: (string){ "Test" }
on: (#struct){
push: (#struct){
branches: (#list){
0: (string){ "**" }
}
"tags-ignore": (#list){
0: (string){ "v*" }
}
}
}
_#isCLCITestBranch(:ci): (string){ "startsWith(github.ref, 'refs/heads/ci/')" }
_#isMaster(:ci): (string){ "github.ref == 'refs/heads/master'" }
_#pullThroughProxy(:ci): (#struct){
name: (string){ "Pull this commit through the proxy on master" }
run: (string){ "v=$(git rev-parse HEAD)\ncd $(mktemp -d)\ngo mod init mod.com\nGOPROXY=https://proxy.golang.org go get -d cuelang.org/go/cmd/cue@$v" }
if: (string){ "${{ github.ref == 'refs/heads/master' }}" }
}
_#startCLBuild(:ci): (#struct){
name: (string){ "Update Gerrit CL message with starting message" }
run: (string){ "curl -s -H \"Content-Type: application/json\" --request POST --data '{\"tag\":\"trybot\",\"message\":\"Started the build... see progress at ${{ github.event.repository.html_url }}/actions/runs/${{ github.run_id }}\"}' -b ~/.gitcookies https://cue-review.googlesource.com/a/changes/$(basename $(dirname $GITHUB_REF))/revisions/$(basename $GITHUB_REF)/review" }
}
_#failCLBuild(:ci): (#struct){
if: (string){ "${{ startsWith(github.ref, 'refs/heads/ci/') && failure() }}" }
name: (string){ "Post any failures for this matrix entry" }
run: (string){ "curl -s -H \"Content-Type: application/json\" --request POST --data '{\"tag\":\"trybot\",\"message\":\"Build failed for ${{ runner.os }}-${{ matrix.go-version }}; see ${{ github.event.repository.html_url }}/actions/runs/${{ github.run_id }} for more details\",\"labels\":{\"Code-Review\":-1}}' -b ~/.gitcookies https://cue-review.googlesource.com/a/changes/$(basename $(dirname $GITHUB_REF))/revisions/$(basename $GITHUB_REF)/review" }
}
_#passCLBuild(:ci): (#struct){
name: (string){ "Update Gerrit CL message with success message" }
run: (string){ "curl -s -H \"Content-Type: application/json\" --request POST --data '{\"tag\":\"trybot\",\"message\":\"Build succeeded for ${{ github.event.repository.html_url }}/actions/runs/${{ github.run_id }}\",\"labels\":{\"Code-Review\":1}}' -b ~/.gitcookies https://cue-review.googlesource.com/a/changes/$(basename $(dirname $GITHUB_REF))/revisions/$(basename $GITHUB_REF)/review" }
}
_#gerrit(:ci): (#struct){
_#setCodeReview(:ci): (#struct){
#args: (#struct){
tag: (string){ "trybot" }
message: (string){ string }
}
res: (_|_){
// [incomplete] invalid interpolation: cannot convert incomplete value "string" to JSON:
// ./workflows.cue:129:9
}
}
}
}
}
1: (struct){
file: (string){ "repository_dispatch.yml" }
schema: (#struct){
#architecture: (string){ |((string){ "ARM32" }, (string){ "x64" }, (string){ "x86" }) }
#branch: (list){
0: (string){ strings.MinRunes(1) }
}
#configuration: ((bool|string|list|struct|number)){ |((string){ string }, (number){ number }, (bool){ bool }, (#struct){
}, (list){
}) }
#container: (#struct){
image: (string){ string }
}
#defaults: (#struct){
}
#env: (#struct){
}
#environment: (#struct){
name: (string){ string }
}
#event: (string){ |((string){ "check_run" }, (string){ "check_suite" }, (string){ "create" }, (string){ "delete" }, (string){ "deployment" }, (string){ "deployment_status" }, (string){ "fork" }, (string){ "gollum" }, (string){ "issue_comment" }, (string){ "issues" }, (string){ "label" }, (string){ "member" }, (string){ "milestone" }, (string){ "page_build" }, (string){ "project" }, (string){ "project_card" }, (string){ "project_column" }, (string){ "public" }, (string){ "pull_request" }, (string){ "pull_request_review" }, (string){ "pull_request_review_comment" }, (string){ "pull_request_target" }, (string){ "push" }, (string){ "registry_package" }, (string){ "release" }, (string){ "status" }, (string){ "watch" }, (string){ "workflow_dispatch" }, (string){ "workflow_run" }, (string){ "repository_dispatch" }) }
#eventObject: ((null|struct)){ |((null){ null }, (#struct){
}) }
#expressionSyntax: (string){ =~"^\\$\\{\\{.*\\}\\}$" }
#globs: (list){
0: (string){ strings.MinRunes(1) }
}
#machine: (string){ |((string){ "linux" }, (string){ "macos" }, (string){ "windows" }) }
#name: (string){ =~"^[_a-zA-Z][a-zA-Z0-9_-]*$" }
#path: (list){
0: (string){ strings.MinRunes(1) }
}
#ref: ((null|struct)){ |((null){ null }, (#struct){
}) }
#shell: (string){ |((string){ string }, (string){ "bash" }, (string){ "pwsh" }, (string){ "python" }, (string){ "sh" }, (string){ "cmd" }, (string){ "powershell" }) }
#types: (list){
0: (_){ _ }
}
#: (#struct){
"working-directory": (string){ string }
}
jobs: (#struct){
runtrybot: (#struct){
"runs-on": (string){ "ubuntu-18.04" }
_#type(:ci): (string){ "runtrybot" }
if: (string){ "${{ github.event.client_payload.type == 'runtrybot' }}" }
steps: (#list){
0: (#struct){
name: (string){ "Trigger trybot" }
run: (string){ "mkdir tmpgit\ncd tmpgit\ngit init\ngit config user.name cueckoo\ngit config user.email cueckoo@gmail.com\ngit config http.https://github.com/.extraheader \"AUTHORIZATION: basic $(echo -n cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }} | base64)\"\ngit fetch https://cue-review.googlesource.com/cue ${{ github.event.client_payload.payload.ref }}\ngit checkout -b ci/${{ github.event.client_payload.payload.changeID }}/${{ github.event.client_payload.payload.commit }} FETCH_HEAD\ngit push https://github.com/cuelang/cue ci/${{ github.event.client_payload.payload.changeID }}/${{ github.event.client_payload.payload.commit }}" }
}
}
defaults: (#struct){
run: (#struct){
shell: (string){ "bash" }
}
}
}
mirror: (#struct){
"runs-on": (string){ "ubuntu-18.04" }
_#type(:ci): (string){ "mirror" }
if: (string){ "${{ github.event.client_payload.type == 'mirror' }}" }
steps: (#list){
_#name(:ci): (string){ "Mirror Gerrit to GitHub" }
_#cmd(:ci): (string){ "github" }
0: (#struct){
name: (string){ "Checkout code" }
uses: (string){ "actions/checkout@v2" }
}
1: (#struct){
name: (string){ "Mirror Gerrit to GitHub" }
run: (string){
"cd _scripts\ndocker run --rm -v $PWD/cache:/root/copybara/cache -v $PWD:/usr/src/app --entrypoint=\"\" cueckoo/copybara:afc4ae03eed00b0c9d7415141cd1b5dfa583da7c bash -c \" \\\n\tset -eu; \\\n\techo \\\"${{ secrets.gerritCookie }}\\\" > ~/.gitcookies; \\\n\tchmod 600 ~/.gitcookies; \\\n\tgit config --global user.name cueckoo; \\\n\tgit config --global user.email cueckoo@gmail.com; \\\n\tgit config --global http.cookiefile \\$HOME/.gitcookies; \\\n \techo https://cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }}@github.com > ~/.git-credentials; \\\n\tchmod 600 ~/.git-credentials; \\\n\tjava -jar /opt/copybara/copybara_deploy.jar migrate copy.bara.sky github; \\\n\t\""
_#cmd(:ci): (string){ "github" }
}
}
}
defaults: (#struct){
run: (#struct){
shell: (string){ "bash" }
}
}
}
importpr: (#struct){
"runs-on": (string){ "ubuntu-18.04" }
_#type(:ci): (string){ "importpr" }
if: (string){ "${{ github.event.client_payload.type == 'importpr' }}" }
steps: (#list){
_#name(:ci): (string){ "Import PR #${{ github.event.client_payload.commit }} from GitHub to Gerrit" }
_#cmd(:ci): (string){ "github-pr ${{ github.event.client_payload.payload.pr }}" }
0: (#struct){
name: (string){ "Checkout code" }
uses: (string){ "actions/checkout@v2" }
}
1: (#struct){
name: (string){ "Import PR #${{ github.event.client_payload.commit }} from GitHub to Gerrit" }
run: (string){
"cd _scripts\ndocker run --rm -v $PWD/cache:/root/copybara/cache -v $PWD:/usr/src/app --entrypoint=\"\" cueckoo/copybara:afc4ae03eed00b0c9d7415141cd1b5dfa583da7c bash -c \" \\\n\tset -eu; \\\n\techo \\\"${{ secrets.gerritCookie }}\\\" > ~/.gitcookies; \\\n\tchmod 600 ~/.gitcookies; \\\n\tgit config --global user.name cueckoo; \\\n\tgit config --global user.email cueckoo@gmail.com; \\\n\tgit config --global http.cookiefile \\$HOME/.gitcookies; \\\n \techo https://cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }}@github.com > ~/.git-credentials; \\\n\tchmod 600 ~/.git-credentials; \\\n\tjava -jar /opt/copybara/copybara_deploy.jar migrate copy.bara.sky github-pr ${{ github.event.client_payload.payload.pr }}; \\\n\t\""
_#cmd(:ci): (string){ "github-pr ${{ github.event.client_payload.payload.pr }}" }
}
}
}
defaults: (#struct){
run: (#struct){
shell: (string){ "bash" }
}
}
}
}
_#runtrybot(:ci): (string){ "runtrybot" }
_#mirror(:ci): (string){ "mirror" }
_#importpr(:ci): (string){ "importpr" }
_#unity(:ci): (string){ "unity" }
_#dispatchJob(:ci): (#struct){
"runs-on": (string){ "ubuntu-18.04" }
_#type(:ci): (string){ string }
if: (_|_){
// [incomplete] workflows.1.schema._#dispatchJob.if: invalid interpolation: non-concrete value string (type string):
// ./workflows.cue:142:14
}
}
name: (string){ "Repository Dispatch" }
on: (#list){
0: (string){ "repository_dispatch" }
}
}
}
2: (struct){
file: (string){ "release.yml" }
schema: (#struct){
#architecture: (string){ |((string){ "ARM32" }, (string){ "x64" }, (string){ "x86" }) }
#branch: (list){
0: (string){ strings.MinRunes(1) }
}
#configuration: ((bool|string|list|struct|number)){ |((string){ string }, (number){ number }, (bool){ bool }, (#struct){
}, (list){
}) }
#container: (#struct){
image: (string){ string }
}
#defaults: (#struct){
}
#env: (#struct){
}
#environment: (#struct){
name: (string){ string }
}
#event: (string){ |((string){ "check_run" }, (string){ "check_suite" }, (string){ "create" }, (string){ "delete" }, (string){ "deployment" }, (string){ "deployment_status" }, (string){ "fork" }, (string){ "gollum" }, (string){ "issue_comment" }, (string){ "issues" }, (string){ "label" }, (string){ "member" }, (string){ "milestone" }, (string){ "page_build" }, (string){ "project" }, (string){ "project_card" }, (string){ "project_column" }, (string){ "public" }, (string){ "pull_request" }, (string){ "pull_request_review" }, (string){ "pull_request_review_comment" }, (string){ "pull_request_target" }, (string){ "push" }, (string){ "registry_package" }, (string){ "release" }, (string){ "status" }, (string){ "watch" }, (string){ "workflow_dispatch" }, (string){ "workflow_run" }, (string){ "repository_dispatch" }) }
#eventObject: ((null|struct)){ |((null){ null }, (#struct){
}) }
#expressionSyntax: (string){ =~"^\\$\\{\\{.*\\}\\}$" }
#globs: (list){
0: (string){ strings.MinRunes(1) }
}
#machine: (string){ |((string){ "linux" }, (string){ "macos" }, (string){ "windows" }) }
#name: (string){ =~"^[_a-zA-Z][a-zA-Z0-9_-]*$" }
#path: (list){
0: (string){ strings.MinRunes(1) }
}
#ref: ((null|struct)){ |((null){ null }, (#struct){
}) }
#shell: (string){ |((string){ string }, (string){ "bash" }, (string){ "pwsh" }, (string){ "python" }, (string){ "sh" }, (string){ "cmd" }, (string){ "powershell" }) }
#types: (list){
0: (_){ _ }
}
#: (#struct){
"working-directory": (string){ string }
}
jobs: (#struct){
goreleaser: (#struct){
"runs-on": (string){ "ubuntu-18.04" }
steps: (#list){
0: (#struct){
name: (string){ "Checkout code" }
uses: (string){ "actions/checkout@v2" }
with: (#struct){
"fetch-depth": (int){ 0 }
}
}
1: (#struct){
name: (string){ "Install Go" }
uses: (string){ "actions/setup-go@v2" }
with: (#struct){
"go-version": (string){ |(*(string){ "${{ matrix.go-version }}" }, (string){ string }) }
stable: (bool){ false }
version: (string){ "1.15.8" }
}
}
2: (#struct){
name: (string){ "Run GoReleaser" }
env: (#struct){
GITHUB_TOKEN: (string){ "${{ secrets.ACTIONS_GITHUB_TOKEN }}" }
}
uses: (string){ "goreleaser/goreleaser-action@v2" }
with: (#struct){
args: (string){ "release --rm-dist" }
version: (string){ "v0.155.1" }
}
}
}
defaults: (#struct){
run: (#struct){
shell: (string){ "bash" }
}
}
}
docker: (#struct){
name: (string){ "docker" }
"runs-on": (string){ "ubuntu-18.04" }
steps: (#list){
0: (#struct){
name: (string){ "Checkout code" }
uses: (string){ "actions/checkout@v2" }
}
1: (#struct){
name: (string){ "Set version environment" }
run: (string){ "CUE_VERSION=$(echo ${GITHUB_REF##refs/tags/v})\necho \"CUE_VERSION=$CUE_VERSION\"\necho \"CUE_VERSION=$(echo $CUE_VERSION)\" >> $GITHUB_ENV" }
}
2: (#struct){
name: (string){ "Push to Docker Hub" }
env: (#struct){
DOCKER_BUILDKIT: (int){ 1 }
GOLANG_VERSION: (float){ 1.14 }
CUE_VERSION: (string){ "${{ env.CUE_VERSION }}" }
}
uses: (string){ "docker/build-push-action@v1" }
with: (#struct){
tags: (string){ "${{ env.CUE_VERSION }},latest" }
repository: (string){ "cuelang/cue" }
username: (string){ "${{ secrets.DOCKER_USERNAME }}" }
password: (string){ "${{ secrets.DOCKER_PASSWORD }}" }
tag_with_ref: (bool){ false }
tag_with_sha: (bool){ false }
target: (string){ "cue" }
always_pull: (bool){ true }
build_args: (string){ "GOLANG_VERSION=${{ env.GOLANG_VERSION }},CUE_VERSION=v${{ env.CUE_VERSION }}" }
add_git_labels: (bool){ true }
}
}
}
defaults: (#struct){
run: (#struct){
shell: (string){ "bash" }
}
}
}
}
name: (string){ "Release" }
on: (#struct){
push: (#struct){
tags: (#list){
0: (string){ "v*" }
}
}
}
}
}
3: (struct){
file: (string){ "tip_triggers.yml" }
schema: (#struct){
#architecture: (string){ |((string){ "ARM32" }, (string){ "x64" }, (string){ "x86" }) }
#branch: (list){
0: (string){ strings.MinRunes(1) }
}
#configuration: ((bool|string|list|struct|number)){ |((string){ string }, (number){ number }, (bool){ bool }, (#struct){
}, (list){
}) }
#container: (#struct){
image: (string){ string }
}
#defaults: (#struct){
}
#env: (#struct){
}
#environment: (#struct){
name: (string){ string }
}
#event: (string){ |((string){ "check_run" }, (string){ "check_suite" }, (string){ "create" }, (string){ "delete" }, (string){ "deployment" }, (string){ "deployment_status" }, (string){ "fork" }, (string){ "gollum" }, (string){ "issue_comment" }, (string){ "issues" }, (string){ "label" }, (string){ "member" }, (string){ "milestone" }, (string){ "page_build" }, (string){ "project" }, (string){ "project_card" }, (string){ "project_column" }, (string){ "public" }, (string){ "pull_request" }, (string){ "pull_request_review" }, (string){ "pull_request_review_comment" }, (string){ "pull_request_target" }, (string){ "push" }, (string){ "registry_package" }, (string){ "release" }, (string){ "status" }, (string){ "watch" }, (string){ "workflow_dispatch" }, (string){ "workflow_run" }, (string){ "repository_dispatch" }) }
#eventObject: ((null|struct)){ |((null){ null }, (#struct){
}) }
#expressionSyntax: (string){ =~"^\\$\\{\\{.*\\}\\}$" }
#globs: (list){
0: (string){ strings.MinRunes(1) }
}
#machine: (string){ |((string){ "linux" }, (string){ "macos" }, (string){ "windows" }) }
#name: (string){ =~"^[_a-zA-Z][a-zA-Z0-9_-]*$" }
#path: (list){
0: (string){ strings.MinRunes(1) }
}
#ref: ((null|struct)){ |((null){ null }, (#struct){
}) }
#shell: (string){ |((string){ string }, (string){ "bash" }, (string){ "pwsh" }, (string){ "python" }, (string){ "sh" }, (string){ "cmd" }, (string){ "powershell" }) }
#types: (list){
0: (_){ _ }
}
#: (#struct){
"working-directory": (string){ string }
}
jobs: (#struct){
push: (#struct){
"runs-on": (string){ "ubuntu-18.04" }
steps: (#list){
0: (#struct){
name: (string){ "Rebuild tip.cuelang.org" }
run: (string){ "curl -s -X POST -d {} https://api.netlify.com/build_hooks/${{ secrets.CuelangOrgTipRebuildHook }}" }
}
1: (#struct){
name: (string){ "Trigger unity build" }
run: (string){ "echo curl -s -H \"Content-Type: application/json\" -u cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }} --request POST --data-binary \"{\"event_type\": \"Check against ${GITHUB_SHA}\", \"client_payload\": {\"type\": \"unity\", \"payload\": {\"versions\": \"\\\"commit:${GITHUB_SHA}\\\"\"}}}\" https://api.github.com/repos/cue-sh/unity/dispatches" }
}
}
defaults: (#struct){
run: (#struct){
shell: (string){ "bash" }
}
}
}
}
name: (string){ "Push to tip triggers" }
on: (#struct){
push: (#struct){
branches: (#list){
0: (string){ "master" }
}
}
}
}
}
4: (struct){
file: (string){ "new_version_triggers.yml" }
schema: (#struct){
#architecture: (string){ |((string){ "ARM32" }, (string){ "x64" }, (string){ "x86" }) }
#branch: (list){
0: (string){ strings.MinRunes(1) }
}
#configuration: ((bool|string|list|struct|number)){ |((string){ string }, (number){ number }, (bool){ bool }, (#struct){
}, (list){
}) }
#container: (#struct){
image: (string){ string }
}
#defaults: (#struct){
}
#env: (#struct){
}
#environment: (#struct){
name: (string){ string }
}
#event: (string){ |((string){ "check_run" }, (string){ "check_suite" }, (string){ "create" }, (string){ "delete" }, (string){ "deployment" }, (string){ "deployment_status" }, (string){ "fork" }, (string){ "gollum" }, (string){ "issue_comment" }, (string){ "issues" }, (string){ "label" }, (string){ "member" }, (string){ "milestone" }, (string){ "page_build" }, (string){ "project" }, (string){ "project_card" }, (string){ "project_column" }, (string){ "public" }, (string){ "pull_request" }, (string){ "pull_request_review" }, (string){ "pull_request_review_comment" }, (string){ "pull_request_target" }, (string){ "push" }, (string){ "registry_package" }, (string){ "release" }, (string){ "status" }, (string){ "watch" }, (string){ "workflow_dispatch" }, (string){ "workflow_run" }, (string){ "repository_dispatch" }) }
#eventObject: ((null|struct)){ |((null){ null }, (#struct){
}) }
#expressionSyntax: (string){ =~"^\\$\\{\\{.*\\}\\}$" }
#globs: (list){
0: (string){ strings.MinRunes(1) }
}
#machine: (string){ |((string){ "linux" }, (string){ "macos" }, (string){ "windows" }) }
#name: (string){ =~"^[_a-zA-Z][a-zA-Z0-9_-]*$" }
#path: (list){
0: (string){ strings.MinRunes(1) }
}
#ref: ((null|struct)){ |((null){ null }, (#struct){
}) }
#shell: (string){ |((string){ string }, (string){ "bash" }, (string){ "pwsh" }, (string){ "python" }, (string){ "sh" }, (string){ "cmd" }, (string){ "powershell" }) }
#types: (list){
0: (_){ _ }
}
#: (#struct){
"working-directory": (string){ string }
}
jobs: (#struct){
push: (#struct){
"runs-on": (string){ "ubuntu-18.04" }
steps: (#list){
0: (#struct){
name: (string){ "Rebuild tip.cuelang.org" }
run: (string){ "curl -s -H \"Content-Type: application/json\" -u cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }} --request POST --data-binary \"{\"event_type\": \"Re-test post release of ${GITHUB_REF##refs/tags/}\"}\" https://api.github.com/repos/cuelang/cuelang.org/dispatches" }
}
1: (#struct){
name: (string){ "Trigger unity build" }
run: (string){ "curl -s -H \"Content-Type: application/json\" -u cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }} --request POST --data-binary \"{\"event_type\": \"Check against CUE ${GITHUB_REF##refs/tags/}\", \"client_payload\": {\"type\": \"unity\", \"payload\": {\"versions\": \"\\\"${GITHUB_REF##refs/tags/}\\\"}}}\" https://api.github.com/repos/cue-sh/unity/dispatches" }
}
}
defaults: (#struct){
run: (#struct){
shell: (string){ "bash" }
}
}
}
}
name: (string){ "New release triggers" }
on: (#struct){
push: (#struct){
tags: (#list){
0: (string){ "v*" }
}
}
}
}
}
5: (struct){
file: (string){ "mirror.yml" }
schema: (#struct){
#architecture: (string){ |((string){ "ARM32" }, (string){ "x64" }, (string){ "x86" }) }
#branch: (list){
0: (string){ strings.MinRunes(1) }
}
#configuration: ((bool|string|list|struct|number)){ |((string){ string }, (number){ number }, (bool){ bool }, (#struct){
}, (list){
}) }
#container: (#struct){
image: (string){ string }
}
#defaults: (#struct){
}
#env: (#struct){
}
#environment: (#struct){
name: (string){ string }
}
#event: (string){ |((string){ "check_run" }, (string){ "check_suite" }, (string){ "create" }, (string){ "delete" }, (string){ "deployment" }, (string){ "deployment_status" }, (string){ "fork" }, (string){ "gollum" }, (string){ "issue_comment" }, (string){ "issues" }, (string){ "label" }, (string){ "member" }, (string){ "milestone" }, (string){ "page_build" }, (string){ "project" }, (string){ "project_card" }, (string){ "project_column" }, (string){ "public" }, (string){ "pull_request" }, (string){ "pull_request_review" }, (string){ "pull_request_review_comment" }, (string){ "pull_request_target" }, (string){ "push" }, (string){ "registry_package" }, (string){ "release" }, (string){ "status" }, (string){ "watch" }, (string){ "workflow_dispatch" }, (string){ "workflow_run" }, (string){ "repository_dispatch" }) }
#eventObject: ((null|struct)){ |((null){ null }, (#struct){
}) }
#expressionSyntax: (string){ =~"^\\$\\{\\{.*\\}\\}$" }
#globs: (list){
0: (string){ strings.MinRunes(1) }
}
#machine: (string){ |((string){ "linux" }, (string){ "macos" }, (string){ "windows" }) }
#name: (string){ =~"^[_a-zA-Z][a-zA-Z0-9_-]*$" }
#path: (list){
0: (string){ strings.MinRunes(1) }
}
#ref: ((null|struct)){ |((null){ null }, (#struct){
}) }
#shell: (string){ |((string){ string }, (string){ "bash" }, (string){ "pwsh" }, (string){ "python" }, (string){ "sh" }, (string){ "cmd" }, (string){ "powershell" }) }
#types: (list){
0: (_){ _ }
}
#: (#struct){
"working-directory": (string){ string }
}
jobs: (#struct){
mirror: (#struct){
"runs-on": (string){ "ubuntu-18.04" }
steps: (#list){
_#name(:ci): (string){ "Mirror Gerrit to GitHub" }
_#cmd(:ci): (string){ "github" }
0: (#struct){
name: (string){ "Checkout code" }
uses: (string){ "actions/checkout@v2" }
}
1: (#struct){
name: (string){ "Mirror Gerrit to GitHub" }
run: (string){
"cd _scripts\ndocker run --rm -v $PWD/cache:/root/copybara/cache -v $PWD:/usr/src/app --entrypoint=\"\" cueckoo/copybara:afc4ae03eed00b0c9d7415141cd1b5dfa583da7c bash -c \" \\\n\tset -eu; \\\n\techo \\\"${{ secrets.gerritCookie }}\\\" > ~/.gitcookies; \\\n\tchmod 600 ~/.gitcookies; \\\n\tgit config --global user.name cueckoo; \\\n\tgit config --global user.email cueckoo@gmail.com; \\\n\tgit config --global http.cookiefile \\$HOME/.gitcookies; \\\n \techo https://cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }}@github.com > ~/.git-credentials; \\\n\tchmod 600 ~/.git-credentials; \\\n\tjava -jar /opt/copybara/copybara_deploy.jar migrate copy.bara.sky github; \\\n\t\""
_#cmd(:ci): (string){ "github" }
}
}
}
defaults: (#struct){
run: (#struct){
shell: (string){ "bash" }
}
}
}
}
name: (string){ "Scheduled repo mirror" }
on: (#struct){
schedule: (#list){
0: (#struct){
cron: (string){ "*/30 * * * *" }
}
}
}
}
}
}
test: (#struct){
#architecture: (string){ |((string){ "ARM32" }, (string){ "x64" }, (string){ "x86" }) }
#branch: (list){
0: (string){ strings.MinRunes(1) }
}
#configuration: ((bool|string|list|struct|number)){ |((string){ string }, (number){ number }, (bool){ bool }, (#struct){
}, (list){
}) }
#container: (#struct){
image: (string){ string }
}
#defaults: (#struct){
}
#env: (#struct){
}
#environment: (#struct){
name: (string){ string }
}
#event: (string){ |((string){ "check_run" }, (string){ "check_suite" }, (string){ "create" }, (string){ "delete" }, (string){ "deployment" }, (string){ "deployment_status" }, (string){ "fork" }, (string){ "gollum" }, (string){ "issue_comment" }, (string){ "issues" }, (string){ "label" }, (string){ "member" }, (string){ "milestone" }, (string){ "page_build" }, (string){ "project" }, (string){ "project_card" }, (string){ "project_column" }, (string){ "public" }, (string){ "pull_request" }, (string){ "pull_request_review" }, (string){ "pull_request_review_comment" }, (string){ "pull_request_target" }, (string){ "push" }, (string){ "registry_package" }, (string){ "release" }, (string){ "status" }, (string){ "watch" }, (string){ "workflow_dispatch" }, (string){ "workflow_run" }, (string){ "repository_dispatch" }) }
#eventObject: ((null|struct)){ |((null){ null }, (#struct){
}) }
#expressionSyntax: (string){ =~"^\\$\\{\\{.*\\}\\}$" }
#globs: (list){
0: (string){ strings.MinRunes(1) }
}
#machine: (string){ |((string){ "linux" }, (string){ "macos" }, (string){ "windows" }) }
#name: (string){ =~"^[_a-zA-Z][a-zA-Z0-9_-]*$" }
#path: (list){
0: (string){ strings.MinRunes(1) }
}
#ref: ((null|struct)){ |((null){ null }, (#struct){
}) }
#shell: (string){ |((string){ string }, (string){ "bash" }, (string){ "pwsh" }, (string){ "python" }, (string){ "sh" }, (string){ "cmd" }, (string){ "powershell" }) }
#types: (list){
0: (_){ _ }
}
#: (#struct){
"working-directory": (string){ string }
}
jobs: (#struct){
start: (#struct){
"runs-on": (string){ "ubuntu-18.04" }
steps: (#list){
0: (#struct){
name: (string){ "Write the gitcookies file" }
run: (string){ "echo \"${{ secrets.gerritCookie }}\" > ~/.gitcookies" }
if: (string){ "${{ startsWith(github.ref, 'refs/heads/ci/') }}" }
}
1: (#struct){
name: (string){ "Update Gerrit CL message with starting message" }
run: (string){ "curl -s -H \"Content-Type: application/json\" --request POST --data '{\"tag\":\"trybot\",\"message\":\"Started the build... see progress at ${{ github.event.repository.html_url }}/actions/runs/${{ github.run_id }}\"}' -b ~/.gitcookies https://cue-review.googlesource.com/a/changes/$(basename $(dirname $GITHUB_REF))/revisions/$(basename $GITHUB_REF)/review" }
if: (string){ "${{ startsWith(github.ref, 'refs/heads/ci/') }}" }
}
}
defaults: (#struct){
run: (#struct){
shell: (string){ "bash" }
}
}
}
test: (#struct){
needs: (string){ "start" }
strategy: (#struct){
"fail-fast": (bool){ false }
matrix: (#struct){
"go-version": (#list){
0: (string){ "1.14.14" }
1: (string){ "1.15.8" }
2: (string){ "1.16" }
}
os: (#list){
0: (string){ "ubuntu-18.04" }
1: (string){ "macos-10.15" }
2: (string){ "windows-2019" }
}
}
}
"runs-on": (string){ "${{ matrix.os }}" }
steps: (#list){
0: (#struct){
name: (string){ "Write the gitcookies file" }
run: (string){ "echo \"${{ secrets.gerritCookie }}\" > ~/.gitcookies" }
}
1: (#struct){
name: (string){ "Install Go" }
uses: (string){ "actions/setup-go@v2" }
with: (#struct){
"go-version": (string){ |(*(string){ "${{ matrix.go-version }}" }, (string){ string }) }
stable: (bool){ false }
}
}
2: (#struct){
name: (string){ "Checkout code" }
uses: (string){ "actions/checkout@v2" }
}
3: (#struct){
name: (string){ "Cache Go modules" }
uses: (string){ "actions/cache@v1" }
with: (#struct){
path: (string){ "~/go/pkg/mod" }
key: (string){ "${{ runner.os }}-${{ matrix.go-version }}-go-${{ hashFiles('**/go.sum') }}" }
"restore-keys": (string){ "${{ runner.os }}-${{ matrix.go-version }}-go-" }
}
}
4: (#struct){
_#tags(:ci): (string){ "long" }
name: (string){ "Set go build tags" }
run: (string){ "go env -w GOFLAGS=-tags=long" }
if: (string){ "${{ github.ref == 'refs/heads/master' }}" }
}
5: (#struct){
name: (string){ "Generate" }
run: (string){ "go generate ./..." }
if: (string){ "matrix.go-version == '1.14.14' && matrix.os != 'windows-2019'" }
}
6: (#struct){
name: (string){ "Test" }
run: (string){ "go test ./..." }
}
7: (#struct){
name: (string){ "Test with -race" }
run: (string){ "go test -race ./..." }
if: (string){ "${{ github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/ci/') && matrix.go-version == '1.15.8' && matrix.os == 'ubuntu-18.04' }}" }
}
8: (#struct){
name: (string){ "gorelease check" }
run: (string){ "go run golang.org/x/exp/cmd/gorelease" }
}
9: (#struct){
name: (string){ "Check that git is clean post generate and tests" }
run: (string){ "test -z \"$(git status --porcelain)\" || (git status; git diff; false)" }
}
10: (#struct){
name: (string){ "Pull this commit through the proxy on master" }
run: (string){ "v=$(git rev-parse HEAD)\ncd $(mktemp -d)\ngo mod init mod.com\nGOPROXY=https://proxy.golang.org go get -d cuelang.org/go/cmd/cue@$v" }
if: (string){ "${{ github.ref == 'refs/heads/master' }}" }
}
11: (#struct){
if: (string){ "${{ startsWith(github.ref, 'refs/heads/ci/') && failure() }}" }
name: (string){ "Post any failures for this matrix entry" }
run: (string){ "curl -s -H \"Content-Type: application/json\" --request POST --data '{\"tag\":\"trybot\",\"message\":\"Build failed for ${{ runner.os }}-${{ matrix.go-version }}; see ${{ github.event.repository.html_url }}/actions/runs/${{ github.run_id }} for more details\",\"labels\":{\"Code-Review\":-1}}' -b ~/.gitcookies https://cue-review.googlesource.com/a/changes/$(basename $(dirname $GITHUB_REF))/revisions/$(basename $GITHUB_REF)/review" }
}
}
defaults: (#struct){
run: (#struct){
shell: (string){ "bash" }
}
}
}
mark_ci_success: (#struct){
"runs-on": (string){ "ubuntu-18.04" }
if: (string){ "${{ startsWith(github.ref, 'refs/heads/ci/') }}" }
needs: (string){ "test" }
steps: (#list){
0: (#struct){
name: (string){ "Write the gitcookies file" }
run: (string){ "echo \"${{ secrets.gerritCookie }}\" > ~/.gitcookies" }
}
1: (#struct){
name: (string){ "Update Gerrit CL message with success message" }
run: (string){ "curl -s -H \"Content-Type: application/json\" --request POST --data '{\"tag\":\"trybot\",\"message\":\"Build succeeded for ${{ github.event.repository.html_url }}/actions/runs/${{ github.run_id }}\",\"labels\":{\"Code-Review\":1}}' -b ~/.gitcookies https://cue-review.googlesource.com/a/changes/$(basename $(dirname $GITHUB_REF))/revisions/$(basename $GITHUB_REF)/review" }
}
}
defaults: (#struct){
run: (#struct){
shell: (string){ "bash" }
}
}
}
delete_build_branch: (#struct){
"runs-on": (string){ "ubuntu-18.04" }
if: (string){ "${{ startsWith(github.ref, 'refs/heads/ci/') && always() }}" }
needs: (string){ "test" }
steps: (#list){
0: (#struct){
run: (string){ "mkdir tmpgit\ncd tmpgit\ngit init\ngit config user.name cueckoo\ngit config user.email cueckoo@gmail.com\ngit config http.https://github.com/.extraheader \"AUTHORIZATION: basic $(echo -n cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }} | base64)\"\ngit push https://github.com/cuelang/cue :${GITHUB_REF#refs/heads/}" }
}
}
defaults: (#struct){
run: (#struct){
shell: (string){ "bash" }
}
}
}
}
name: (string){ "Test" }
on: (#struct){
push: (#struct){
branches: (#list){
0: (string){ "**" }
}
"tags-ignore": (#list){
0: (string){ "v*" }
}
}
}
_#isCLCITestBranch(:ci): (string){ "startsWith(github.ref, 'refs/heads/ci/')" }
_#isMaster(:ci): (string){ "github.ref == 'refs/heads/master'" }
_#pullThroughProxy(:ci): (#struct){
name: (string){ "Pull this commit through the proxy on master" }
run: (string){ "v=$(git rev-parse HEAD)\ncd $(mktemp -d)\ngo mod init mod.com\nGOPROXY=https://proxy.golang.org go get -d cuelang.org/go/cmd/cue@$v" }
if: (string){ "${{ github.ref == 'refs/heads/master' }}" }
}
_#startCLBuild(:ci): (#struct){
name: (string){ "Update Gerrit CL message with starting message" }
run: (string){ "curl -s -H \"Content-Type: application/json\" --request POST --data '{\"tag\":\"trybot\",\"message\":\"Started the build... see progress at ${{ github.event.repository.html_url }}/actions/runs/${{ github.run_id }}\"}' -b ~/.gitcookies https://cue-review.googlesource.com/a/changes/$(basename $(dirname $GITHUB_REF))/revisions/$(basename $GITHUB_REF)/review" }
}
_#failCLBuild(:ci): (#struct){
if: (string){ "${{ startsWith(github.ref, 'refs/heads/ci/') && failure() }}" }
name: (string){ "Post any failures for this matrix entry" }
run: (string){ "curl -s -H \"Content-Type: application/json\" --request POST --data '{\"tag\":\"trybot\",\"message\":\"Build failed for ${{ runner.os }}-${{ matrix.go-version }}; see ${{ github.event.repository.html_url }}/actions/runs/${{ github.run_id }} for more details\",\"labels\":{\"Code-Review\":-1}}' -b ~/.gitcookies https://cue-review.googlesource.com/a/changes/$(basename $(dirname $GITHUB_REF))/revisions/$(basename $GITHUB_REF)/review" }
}
_#passCLBuild(:ci): (#struct){
name: (string){ "Update Gerrit CL message with success message" }
run: (string){ "curl -s -H \"Content-Type: application/json\" --request POST --data '{\"tag\":\"trybot\",\"message\":\"Build succeeded for ${{ github.event.repository.html_url }}/actions/runs/${{ github.run_id }}\",\"labels\":{\"Code-Review\":1}}' -b ~/.gitcookies https://cue-review.googlesource.com/a/changes/$(basename $(dirname $GITHUB_REF))/revisions/$(basename $GITHUB_REF)/review" }
}
_#gerrit(:ci): (#struct){
_#setCodeReview(:ci): (#struct){
#args: (#struct){
tag: (string){ "trybot" }
message: (string){ string }
}
res: (_|_){
// [incomplete] invalid interpolation: cannot convert incomplete value "string" to JSON:
// ./workflows.cue:129:9
}
}
}
}
repository_dispatch: (#struct){
#architecture: (string){ |((string){ "ARM32" }, (string){ "x64" }, (string){ "x86" }) }
#branch: (list){
0: (string){ strings.MinRunes(1) }
}
#configuration: ((bool|string|list|struct|number)){ |((string){ string }, (number){ number }, (bool){ bool }, (#struct){
}, (list){
}) }
#container: (#struct){
image: (string){ string }
}
#defaults: (#struct){
}
#env: (#struct){
}
#environment: (#struct){
name: (string){ string }
}
#event: (string){ |((string){ "check_run" }, (string){ "check_suite" }, (string){ "create" }, (string){ "delete" }, (string){ "deployment" }, (string){ "deployment_status" }, (string){ "fork" }, (string){ "gollum" }, (string){ "issue_comment" }, (string){ "issues" }, (string){ "label" }, (string){ "member" }, (string){ "milestone" }, (string){ "page_build" }, (string){ "project" }, (string){ "project_card" }, (string){ "project_column" }, (string){ "public" }, (string){ "pull_request" }, (string){ "pull_request_review" }, (string){ "pull_request_review_comment" }, (string){ "pull_request_target" }, (string){ "push" }, (string){ "registry_package" }, (string){ "release" }, (string){ "status" }, (string){ "watch" }, (string){ "workflow_dispatch" }, (string){ "workflow_run" }, (string){ "repository_dispatch" }) }
#eventObject: ((null|struct)){ |((null){ null }, (#struct){
}) }
#expressionSyntax: (string){ =~"^\\$\\{\\{.*\\}\\}$" }
#globs: (list){
0: (string){ strings.MinRunes(1) }
}
#machine: (string){ |((string){ "linux" }, (string){ "macos" }, (string){ "windows" }) }
#name: (string){ =~"^[_a-zA-Z][a-zA-Z0-9_-]*$" }
#path: (list){
0: (string){ strings.MinRunes(1) }
}
#ref: ((null|struct)){ |((null){ null }, (#struct){
}) }
#shell: (string){ |((string){ string }, (string){ "bash" }, (string){ "pwsh" }, (string){ "python" }, (string){ "sh" }, (string){ "cmd" }, (string){ "powershell" }) }
#types: (list){
0: (_){ _ }
}
#: (#struct){
"working-directory": (string){ string }
}
jobs: (#struct){
runtrybot: (#struct){
"runs-on": (string){ "ubuntu-18.04" }
_#type(:ci): (string){ "runtrybot" }
if: (string){ "${{ github.event.client_payload.type == 'runtrybot' }}" }
steps: (#list){
0: (#struct){
name: (string){ "Trigger trybot" }
run: (string){ "mkdir tmpgit\ncd tmpgit\ngit init\ngit config user.name cueckoo\ngit config user.email cueckoo@gmail.com\ngit config http.https://github.com/.extraheader \"AUTHORIZATION: basic $(echo -n cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }} | base64)\"\ngit fetch https://cue-review.googlesource.com/cue ${{ github.event.client_payload.payload.ref }}\ngit checkout -b ci/${{ github.event.client_payload.payload.changeID }}/${{ github.event.client_payload.payload.commit }} FETCH_HEAD\ngit push https://github.com/cuelang/cue ci/${{ github.event.client_payload.payload.changeID }}/${{ github.event.client_payload.payload.commit }}" }
}
}
defaults: (#struct){
run: (#struct){
shell: (string){ "bash" }
}
}
}
mirror: (#struct){
"runs-on": (string){ "ubuntu-18.04" }
_#type(:ci): (string){ "mirror" }
if: (string){ "${{ github.event.client_payload.type == 'mirror' }}" }
steps: (#list){
_#name(:ci): (string){ "Mirror Gerrit to GitHub" }
_#cmd(:ci): (string){ "github" }
0: (#struct){
name: (string){ "Checkout code" }
uses: (string){ "actions/checkout@v2" }
}
1: (#struct){
name: (string){ "Mirror Gerrit to GitHub" }
run: (string){
"cd _scripts\ndocker run --rm -v $PWD/cache:/root/copybara/cache -v $PWD:/usr/src/app --entrypoint=\"\" cueckoo/copybara:afc4ae03eed00b0c9d7415141cd1b5dfa583da7c bash -c \" \\\n\tset -eu; \\\n\techo \\\"${{ secrets.gerritCookie }}\\\" > ~/.gitcookies; \\\n\tchmod 600 ~/.gitcookies; \\\n\tgit config --global user.name cueckoo; \\\n\tgit config --global user.email cueckoo@gmail.com; \\\n\tgit config --global http.cookiefile \\$HOME/.gitcookies; \\\n \techo https://cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }}@github.com > ~/.git-credentials; \\\n\tchmod 600 ~/.git-credentials; \\\n\tjava -jar /opt/copybara/copybara_deploy.jar migrate copy.bara.sky github; \\\n\t\""
_#cmd(:ci): (string){ "github" }
}
}
}
defaults: (#struct){
run: (#struct){
shell: (string){ "bash" }
}
}
}
importpr: (#struct){
"runs-on": (string){ "ubuntu-18.04" }
_#type(:ci): (string){ "importpr" }
if: (string){ "${{ github.event.client_payload.type == 'importpr' }}" }
steps: (#list){
_#name(:ci): (string){ "Import PR #${{ github.event.client_payload.commit }} from GitHub to Gerrit" }
_#cmd(:ci): (string){ "github-pr ${{ github.event.client_payload.payload.pr }}" }
0: (#struct){
name: (string){ "Checkout code" }
uses: (string){ "actions/checkout@v2" }
}
1: (#struct){
name: (string){ "Import PR #${{ github.event.client_payload.commit }} from GitHub to Gerrit" }
run: (string){
"cd _scripts\ndocker run --rm -v $PWD/cache:/root/copybara/cache -v $PWD:/usr/src/app --entrypoint=\"\" cueckoo/copybara:afc4ae03eed00b0c9d7415141cd1b5dfa583da7c bash -c \" \\\n\tset -eu; \\\n\techo \\\"${{ secrets.gerritCookie }}\\\" > ~/.gitcookies; \\\n\tchmod 600 ~/.gitcookies; \\\n\tgit config --global user.name cueckoo; \\\n\tgit config --global user.email cueckoo@gmail.com; \\\n\tgit config --global http.cookiefile \\$HOME/.gitcookies; \\\n \techo https://cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }}@github.com > ~/.git-credentials; \\\n\tchmod 600 ~/.git-credentials; \\\n\tjava -jar /opt/copybara/copybara_deploy.jar migrate copy.bara.sky github-pr ${{ github.event.client_payload.payload.pr }}; \\\n\t\""
_#cmd(:ci): (string){ "github-pr ${{ github.event.client_payload.payload.pr }}" }
}
}
}
defaults: (#struct){
run: (#struct){
shell: (string){ "bash" }
}
}
}
}
_#runtrybot(:ci): (string){ "runtrybot" }
_#mirror(:ci): (string){ "mirror" }
_#importpr(:ci): (string){ "importpr" }
_#unity(:ci): (string){ "unity" }
_#dispatchJob(:ci): (#struct){
"runs-on": (string){ "ubuntu-18.04" }
_#type(:ci): (string){ string }
if: (_|_){
// [incomplete] repository_dispatch._#dispatchJob.if: invalid interpolation: non-concrete value string (type string):
// ./workflows.cue:142:14
}
}
name: (string){ "Repository Dispatch" }
on: (#list){
0: (string){ "repository_dispatch" }
}
}
mirror: (#struct){
#architecture: (string){ |((string){ "ARM32" }, (string){ "x64" }, (string){ "x86" }) }
#branch: (list){
0: (string){ strings.MinRunes(1) }
}
#configuration: ((bool|string|list|struct|number)){ |((string){ string }, (number){ number }, (bool){ bool }, (#struct){
}, (list){
}) }
#container: (#struct){
image: (string){ string }
}
#defaults: (#struct){
}
#env: (#struct){
}
#environment: (#struct){
name: (string){ string }
}
#event: (string){ |((string){ "check_run" }, (string){ "check_suite" }, (string){ "create" }, (string){ "delete" }, (string){ "deployment" }, (string){ "deployment_status" }, (string){ "fork" }, (string){ "gollum" }, (string){ "issue_comment" }, (string){ "issues" }, (string){ "label" }, (string){ "member" }, (string){ "milestone" }, (string){ "page_build" }, (string){ "project" }, (string){ "project_card" }, (string){ "project_column" }, (string){ "public" }, (string){ "pull_request" }, (string){ "pull_request_review" }, (string){ "pull_request_review_comment" }, (string){ "pull_request_target" }, (string){ "push" }, (string){ "registry_package" }, (string){ "release" }, (string){ "status" }, (string){ "watch" }, (string){ "workflow_dispatch" }, (string){ "workflow_run" }, (string){ "repository_dispatch" }) }
#eventObject: ((null|struct)){ |((null){ null }, (#struct){
}) }
#expressionSyntax: (string){ =~"^\\$\\{\\{.*\\}\\}$" }
#globs: (list){
0: (string){ strings.MinRunes(1) }
}
#machine: (string){ |((string){ "linux" }, (string){ "macos" }, (string){ "windows" }) }
#name: (string){ =~"^[_a-zA-Z][a-zA-Z0-9_-]*$" }
#path: (list){
0: (string){ strings.MinRunes(1) }
}
#ref: ((null|struct)){ |((null){ null }, (#struct){
}) }
#shell: (string){ |((string){ string }, (string){ "bash" }, (string){ "pwsh" }, (string){ "python" }, (string){ "sh" }, (string){ "cmd" }, (string){ "powershell" }) }
#types: (list){
0: (_){ _ }
}
#: (#struct){
"working-directory": (string){ string }
}
jobs: (#struct){
mirror: (#struct){
"runs-on": (string){ "ubuntu-18.04" }
steps: (#list){
_#name(:ci): (string){ "Mirror Gerrit to GitHub" }
_#cmd(:ci): (string){ "github" }
0: (#struct){
name: (string){ "Checkout code" }
uses: (string){ "actions/checkout@v2" }
}
1: (#struct){
name: (string){ "Mirror Gerrit to GitHub" }
run: (string){
"cd _scripts\ndocker run --rm -v $PWD/cache:/root/copybara/cache -v $PWD:/usr/src/app --entrypoint=\"\" cueckoo/copybara:afc4ae03eed00b0c9d7415141cd1b5dfa583da7c bash -c \" \\\n\tset -eu; \\\n\techo \\\"${{ secrets.gerritCookie }}\\\" > ~/.gitcookies; \\\n\tchmod 600 ~/.gitcookies; \\\n\tgit config --global user.name cueckoo; \\\n\tgit config --global user.email cueckoo@gmail.com; \\\n\tgit config --global http.cookiefile \\$HOME/.gitcookies; \\\n \techo https://cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }}@github.com > ~/.git-credentials; \\\n\tchmod 600 ~/.git-credentials; \\\n\tjava -jar /opt/copybara/copybara_deploy.jar migrate copy.bara.sky github; \\\n\t\""
_#cmd(:ci): (string){ "github" }
}
}
}
defaults: (#struct){
run: (#struct){
shell: (string){ "bash" }
}
}
}
}
name: (string){ "Scheduled repo mirror" }
on: (#struct){
schedule: (#list){
0: (#struct){
cron: (string){ "*/30 * * * *" }
}
}
}
}
release: (#struct){
#architecture: (string){ |((string){ "ARM32" }, (string){ "x64" }, (string){ "x86" }) }
#branch: (list){
0: (string){ strings.MinRunes(1) }
}
#configuration: ((bool|string|list|struct|number)){ |((string){ string }, (number){ number }, (bool){ bool }, (#struct){
}, (list){
}) }
#container: (#struct){
image: (string){ string }
}
#defaults: (#struct){
}
#env: (#struct){
}
#environment: (#struct){
name: (string){ string }
}
#event: (string){ |((string){ "check_run" }, (string){ "check_suite" }, (string){ "create" }, (string){ "delete" }, (string){ "deployment" }, (string){ "deployment_status" }, (string){ "fork" }, (string){ "gollum" }, (string){ "issue_comment" }, (string){ "issues" }, (string){ "label" }, (string){ "member" }, (string){ "milestone" }, (string){ "page_build" }, (string){ "project" }, (string){ "project_card" }, (string){ "project_column" }, (string){ "public" }, (string){ "pull_request" }, (string){ "pull_request_review" }, (string){ "pull_request_review_comment" }, (string){ "pull_request_target" }, (string){ "push" }, (string){ "registry_package" }, (string){ "release" }, (string){ "status" }, (string){ "watch" }, (string){ "workflow_dispatch" }, (string){ "workflow_run" }, (string){ "repository_dispatch" }) }
#eventObject: ((null|struct)){ |((null){ null }, (#struct){
}) }
#expressionSyntax: (string){ =~"^\\$\\{\\{.*\\}\\}$" }
#globs: (list){
0: (string){ strings.MinRunes(1) }
}
#machine: (string){ |((string){ "linux" }, (string){ "macos" }, (string){ "windows" }) }
#name: (string){ =~"^[_a-zA-Z][a-zA-Z0-9_-]*$" }
#path: (list){
0: (string){ strings.MinRunes(1) }
}
#ref: ((null|struct)){ |((null){ null }, (#struct){
}) }
#shell: (string){ |((string){ string }, (string){ "bash" }, (string){ "pwsh" }, (string){ "python" }, (string){ "sh" }, (string){ "cmd" }, (string){ "powershell" }) }
#types: (list){
0: (_){ _ }
}
#: (#struct){
"working-directory": (string){ string }
}
jobs: (#struct){
goreleaser: (#struct){
"runs-on": (string){ "ubuntu-18.04" }
steps: (#list){
0: (#struct){
name: (string){ "Checkout code" }
uses: (string){ "actions/checkout@v2" }
with: (#struct){
"fetch-depth": (int){ 0 }
}
}
1: (#struct){
name: (string){ "Install Go" }
uses: (string){ "actions/setup-go@v2" }
with: (#struct){
"go-version": (string){ |(*(string){ "${{ matrix.go-version }}" }, (string){ string }) }
stable: (bool){ false }
version: (string){ "1.15.8" }
}
}
2: (#struct){
name: (string){ "Run GoReleaser" }
env: (#struct){
GITHUB_TOKEN: (string){ "${{ secrets.ACTIONS_GITHUB_TOKEN }}" }
}
uses: (string){ "goreleaser/goreleaser-action@v2" }
with: (#struct){
args: (string){ "release --rm-dist" }
version: (string){ "v0.155.1" }
}
}
}
defaults: (#struct){
run: (#struct){
shell: (string){ "bash" }
}
}
}
docker: (#struct){
name: (string){ "docker" }
"runs-on": (string){ "ubuntu-18.04" }
steps: (#list){
0: (#struct){
name: (string){ "Checkout code" }
uses: (string){ "actions/checkout@v2" }
}
1: (#struct){
name: (string){ "Set version environment" }
run: (string){ "CUE_VERSION=$(echo ${GITHUB_REF##refs/tags/v})\necho \"CUE_VERSION=$CUE_VERSION\"\necho \"CUE_VERSION=$(echo $CUE_VERSION)\" >> $GITHUB_ENV" }
}
2: (#struct){
name: (string){ "Push to Docker Hub" }
env: (#struct){
DOCKER_BUILDKIT: (int){ 1 }
GOLANG_VERSION: (float){ 1.14 }
CUE_VERSION: (string){ "${{ env.CUE_VERSION }}" }
}
uses: (string){ "docker/build-push-action@v1" }
with: (#struct){
tags: (string){ "${{ env.CUE_VERSION }},latest" }
repository: (string){ "cuelang/cue" }
username: (string){ "${{ secrets.DOCKER_USERNAME }}" }
password: (string){ "${{ secrets.DOCKER_PASSWORD }}" }
tag_with_ref: (bool){ false }
tag_with_sha: (bool){ false }
target: (string){ "cue" }
always_pull: (bool){ true }
build_args: (string){ "GOLANG_VERSION=${{ env.GOLANG_VERSION }},CUE_VERSION=v${{ env.CUE_VERSION }}" }
add_git_labels: (bool){ true }
}
}
}
defaults: (#struct){
run: (#struct){
shell: (string){ "bash" }
}
}
}
}
name: (string){ "Release" }
on: (#struct){
push: (#struct){
tags: (#list){
0: (string){ "v*" }
}
}
}
}
tip_triggers: (#struct){
#architecture: (string){ |((string){ "ARM32" }, (string){ "x64" }, (string){ "x86" }) }
#branch: (list){
0: (string){ strings.MinRunes(1) }
}
#configuration: ((bool|string|list|struct|number)){ |((string){ string }, (number){ number }, (bool){ bool }, (#struct){
}, (list){
}) }
#container: (#struct){
image: (string){ string }
}
#defaults: (#struct){
}
#env: (#struct){
}
#environment: (#struct){
name: (string){ string }
}
#event: (string){ |((string){ "check_run" }, (string){ "check_suite" }, (string){ "create" }, (string){ "delete" }, (string){ "deployment" }, (string){ "deployment_status" }, (string){ "fork" }, (string){ "gollum" }, (string){ "issue_comment" }, (string){ "issues" }, (string){ "label" }, (string){ "member" }, (string){ "milestone" }, (string){ "page_build" }, (string){ "project" }, (string){ "project_card" }, (string){ "project_column" }, (string){ "public" }, (string){ "pull_request" }, (string){ "pull_request_review" }, (string){ "pull_request_review_comment" }, (string){ "pull_request_target" }, (string){ "push" }, (string){ "registry_package" }, (string){ "release" }, (string){ "status" }, (string){ "watch" }, (string){ "workflow_dispatch" }, (string){ "workflow_run" }, (string){ "repository_dispatch" }) }
#eventObject: ((null|struct)){ |((null){ null }, (#struct){
}) }
#expressionSyntax: (string){ =~"^\\$\\{\\{.*\\}\\}$" }
#globs: (list){
0: (string){ strings.MinRunes(1) }
}
#machine: (string){ |((string){ "linux" }, (string){ "macos" }, (string){ "windows" }) }
#name: (string){ =~"^[_a-zA-Z][a-zA-Z0-9_-]*$" }
#path: (list){
0: (string){ strings.MinRunes(1) }
}
#ref: ((null|struct)){ |((null){ null }, (#struct){
}) }
#shell: (string){ |((string){ string }, (string){ "bash" }, (string){ "pwsh" }, (string){ "python" }, (string){ "sh" }, (string){ "cmd" }, (string){ "powershell" }) }
#types: (list){
0: (_){ _ }
}
#: (#struct){
"working-directory": (string){ string }
}
jobs: (#struct){
push: (#struct){
"runs-on": (string){ "ubuntu-18.04" }
steps: (#list){
0: (#struct){
name: (string){ "Rebuild tip.cuelang.org" }
run: (string){ "curl -s -X POST -d {} https://api.netlify.com/build_hooks/${{ secrets.CuelangOrgTipRebuildHook }}" }
}
1: (#struct){
name: (string){ "Trigger unity build" }
run: (string){ "echo curl -s -H \"Content-Type: application/json\" -u cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }} --request POST --data-binary \"{\"event_type\": \"Check against ${GITHUB_SHA}\", \"client_payload\": {\"type\": \"unity\", \"payload\": {\"versions\": \"\\\"commit:${GITHUB_SHA}\\\"\"}}}\" https://api.github.com/repos/cue-sh/unity/dispatches" }
}
}
defaults: (#struct){
run: (#struct){
shell: (string){ "bash" }
}
}
}
}
name: (string){ "Push to tip triggers" }
on: (#struct){
push: (#struct){
branches: (#list){
0: (string){ "master" }
}
}
}
}
new_version_triggers: (#struct){
#architecture: (string){ |((string){ "ARM32" }, (string){ "x64" }, (string){ "x86" }) }
#branch: (list){
0: (string){ strings.MinRunes(1) }
}
#configuration: ((bool|string|list|struct|number)){ |((string){ string }, (number){ number }, (bool){ bool }, (#struct){
}, (list){
}) }
#container: (#struct){
image: (string){ string }
}
#defaults: (#struct){
}
#env: (#struct){
}
#environment: (#struct){
name: (string){ string }
}
#event: (string){ |((string){ "check_run" }, (string){ "check_suite" }, (string){ "create" }, (string){ "delete" }, (string){ "deployment" }, (string){ "deployment_status" }, (string){ "fork" }, (string){ "gollum" }, (string){ "issue_comment" }, (string){ "issues" }, (string){ "label" }, (string){ "member" }, (string){ "milestone" }, (string){ "page_build" }, (string){ "project" }, (string){ "project_card" }, (string){ "project_column" }, (string){ "public" }, (string){ "pull_request" }, (string){ "pull_request_review" }, (string){ "pull_request_review_comment" }, (string){ "pull_request_target" }, (string){ "push" }, (string){ "registry_package" }, (string){ "release" }, (string){ "status" }, (string){ "watch" }, (string){ "workflow_dispatch" }, (string){ "workflow_run" }, (string){ "repository_dispatch" }) }
#eventObject: ((null|struct)){ |((null){ null }, (#struct){
}) }
#expressionSyntax: (string){ =~"^\\$\\{\\{.*\\}\\}$" }
#globs: (list){
0: (string){ strings.MinRunes(1) }
}
#machine: (string){ |((string){ "linux" }, (string){ "macos" }, (string){ "windows" }) }
#name: (string){ =~"^[_a-zA-Z][a-zA-Z0-9_-]*$" }
#path: (list){
0: (string){ strings.MinRunes(1) }
}
#ref: ((null|struct)){ |((null){ null }, (#struct){
}) }
#shell: (string){ |((string){ string }, (string){ "bash" }, (string){ "pwsh" }, (string){ "python" }, (string){ "sh" }, (string){ "cmd" }, (string){ "powershell" }) }
#types: (list){
0: (_){ _ }
}
#: (#struct){
"working-directory": (string){ string }
}
jobs: (#struct){
push: (#struct){
"runs-on": (string){ "ubuntu-18.04" }
steps: (#list){
0: (#struct){
name: (string){ "Rebuild tip.cuelang.org" }
run: (string){ "curl -s -H \"Content-Type: application/json\" -u cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }} --request POST --data-binary \"{\"event_type\": \"Re-test post release of ${GITHUB_REF##refs/tags/}\"}\" https://api.github.com/repos/cuelang/cuelang.org/dispatches" }
}
1: (#struct){
name: (string){ "Trigger unity build" }
run: (string){ "curl -s -H \"Content-Type: application/json\" -u cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }} --request POST --data-binary \"{\"event_type\": \"Check against CUE ${GITHUB_REF##refs/tags/}\", \"client_payload\": {\"type\": \"unity\", \"payload\": {\"versions\": \"\\\"${GITHUB_REF##refs/tags/}\\\"}}}\" https://api.github.com/repos/cue-sh/unity/dispatches" }
}
}
defaults: (#struct){
run: (#struct){
shell: (string){ "bash" }
}
}
}
}
name: (string){ "New release triggers" }
on: (#struct){
push: (#struct){
tags: (#list){
0: (string){ "v*" }
}
}
}
}
_#bashWorkflow(:ci): (#struct){
#architecture: (string){ |((string){ "ARM32" }, (string){ "x64" }, (string){ "x86" }) }
#branch: (list){
0: (string){ strings.MinRunes(1) }
}
#configuration: ((bool|string|list|struct|number)){ |((string){ string }, (number){ number }, (bool){ bool }, (#struct){
}, (list){
}) }
#container: (#struct){
image: (string){ string }
}
#defaults: (#struct){
}
#env: (#struct){
}
#environment: (#struct){
name: (string){ string }
}
#event: (string){ |((string){ "check_run" }, (string){ "check_suite" }, (string){ "create" }, (string){ "delete" }, (string){ "deployment" }, (string){ "deployment_status" }, (string){ "fork" }, (string){ "gollum" }, (string){ "issue_comment" }, (string){ "issues" }, (string){ "label" }, (string){ "member" }, (string){ "milestone" }, (string){ "page_build" }, (string){ "project" }, (string){ "project_card" }, (string){ "project_column" }, (string){ "public" }, (string){ "pull_request" }, (string){ "pull_request_review" }, (string){ "pull_request_review_comment" }, (string){ "pull_request_target" }, (string){ "push" }, (string){ "registry_package" }, (string){ "release" }, (string){ "status" }, (string){ "watch" }, (string){ "workflow_dispatch" }, (string){ "workflow_run" }, (string){ "repository_dispatch" }) }
#eventObject: ((null|struct)){ |((null){ null }, (#struct){
}) }
#expressionSyntax: (string){ =~"^\\$\\{\\{.*\\}\\}$" }
#globs: (list){
0: (string){ strings.MinRunes(1) }
}
#machine: (string){ |((string){ "linux" }, (string){ "macos" }, (string){ "windows" }) }
#name: (string){ =~"^[_a-zA-Z][a-zA-Z0-9_-]*$" }
#path: (list){
0: (string){ strings.MinRunes(1) }
}
#ref: ((null|struct)){ |((null){ null }, (#struct){
}) }
#shell: (string){ |((string){ string }, (string){ "bash" }, (string){ "pwsh" }, (string){ "python" }, (string){ "sh" }, (string){ "cmd" }, (string){ "powershell" }) }
#types: (list){
0: (_){ _ }
}
#: (#struct){
"working-directory": (string){ string }
}
jobs: (#struct){
}
on: ((string|list|struct)){ |((string){ "check_run" }, (string){ "check_suite" }, (string){ "create" }, (string){ "delete" }, (string){ "deployment" }, (string){ "deployment_status" }, (string){ "fork" }, (string){ "gollum" }, (string){ "issue_comment" }, (string){ "issues" }, (string){ "label" }, (string){ "member" }, (string){ "milestone" }, (string){ "page_build" }, (string){ "project" }, (string){ "project_card" }, (string){ "project_column" }, (string){ "public" }, (string){ "pull_request" }, (string){ "pull_request_review" }, (string){ "pull_request_review_comment" }, (string){ "pull_request_target" }, (string){ "push" }, (string){ "registry_package" }, (string){ "release" }, (string){ "status" }, (string){ "watch" }, (string){ "workflow_dispatch" }, (string){ "workflow_run" }, (string){ "repository_dispatch" }, (list){
0: (string){ |((string){ "check_run" }, (string){ "check_suite" }, (string){ "create" }, (string){ "delete" }, (string){ "deployment" }, (string){ "deployment_status" }, (string){ "fork" }, (string){ "gollum" }, (string){ "issue_comment" }, (string){ "issues" }, (string){ "label" }, (string){ "member" }, (string){ "milestone" }, (string){ "page_build" }, (string){ "project" }, (string){ "project_card" }, (string){ "project_column" }, (string){ "public" }, (string){ "pull_request" }, (string){ "pull_request_review" }, (string){ "pull_request_review_comment" }, (string){ "pull_request_target" }, (string){ "push" }, (string){ "registry_package" }, (string){ "release" }, (string){ "status" }, (string){ "watch" }, (string){ "workflow_dispatch" }, (string){ "workflow_run" }, (string){ "repository_dispatch" }) }
}, (#struct){
}) }
}
_#job(:ci): (#struct){
"runs-on": ((string|list)){ |((string){ "macos-10.15" }, (string){ "macos-11.0" }, (string){ "macos-latest" }, (string){ "self-hosted" }, (string){ "ubuntu-16.04" }, (string){ "ubuntu-18.04" }, (string){ "ubuntu-20.04" }, (string){ "ubuntu-latest" }, (string){ "windows-2016" }, (string){ "windows-2019" }, (string){ "windows-latest" }, (#list){
0: (string){ "self-hosted" }
}, (#list){
0: (string){ "self-hosted" }
1: (string){ |((string){ "linux" }, (string){ "macos" }, (string){ "windows" }) }
}, (#list){
0: (string){ "self-hosted" }
1: (string){ |((string){ "ARM32" }, (string){ "x64" }, (string){ "x86" }) }
}, (#list){
0: (string){ "self-hosted" }
1: (string){ |((string){ "linux" }, (string){ "macos" }, (string){ "windows" }) }
2: (string){ |((string){ "ARM32" }, (string){ "x64" }, (string){ "x86" }) }
}, (#list){
0: (string){ "self-hosted" }
1: (string){ |((string){ "ARM32" }, (string){ "x64" }, (string){ "x86" }) }
2: (string){ |((string){ "linux" }, (string){ "macos" }, (string){ "windows" }) }
}, (string){ =~"^\\$\\{\\{.*\\}\\}$" }) }
}
_#step(:ci): (#struct){
}
_#codeGenGo(:ci): (string){ "1.14.14" }
_#latestStableGo(:ci): (string){ "1.15.8" }
_#linuxMachine(:ci): (string){ "ubuntu-18.04" }
_#macosMachine(:ci): (string){ "macos-10.15" }
_#windowsMachine(:ci): (string){ "windows-2019" }
_#testStrategy(:ci): (#struct){
"fail-fast": (bool){ false }
matrix: (#struct){
"go-version": (#list){
0: (string){ "1.14.14" }
1: (string){ "1.15.8" }
2: (string){ "1.16" }
}
os: (#list){
0: (string){ "ubuntu-18.04" }
1: (string){ "macos-10.15" }
2: (string){ "windows-2019" }
}
}
}
_#setGoBuildTags(:ci): (#struct){
_#tags(:ci): (string){ string }
name: (string){ "Set go build tags" }
run: (_|_){
// [incomplete] _#setGoBuildTags.run: invalid interpolation: non-concrete value string (type string):
// ./workflows.cue:305:10
}
}
_#installGo(:ci): (#struct){
name: (string){ "Install Go" }
uses: (string){ "actions/setup-go@v2" }
with: (#struct){
"go-version": (string){ |(*(string){ "${{ matrix.go-version }}" }, (string){ string }) }
stable: (bool){ false }
}
}
_#checkoutCode(:ci): (#struct){
name: (string){ "Checkout code" }
uses: (string){ "actions/checkout@v2" }
}
_#cacheGoModules(:ci): (#struct){
name: (string){ "Cache Go modules" }
uses: (string){ "actions/cache@v1" }
with: (#struct){
path: (string){ "~/go/pkg/mod" }
key: (string){ "${{ runner.os }}-${{ matrix.go-version }}-go-${{ hashFiles('**/go.sum') }}" }
"restore-keys": (string){ "${{ runner.os }}-${{ matrix.go-version }}-go-" }
}
}
_#goGenerate(:ci): (#struct){
name: (string){ "Generate" }
run: (string){ "go generate ./..." }
if: (string){ "matrix.go-version == '1.14.14' && matrix.os != 'windows-2019'" }
}
_#goTest(:ci): (#struct){
name: (string){ "Test" }
run: (string){ "go test ./..." }
}
_#goTestRace(:ci): (#struct){
name: (string){ "Test with -race" }
run: (string){ "go test -race ./..." }
}
_#goReleaseCheck(:ci): (#struct){
name: (string){ "gorelease check" }
run: (string){ "go run golang.org/x/exp/cmd/gorelease" }
}
_#checkGitClean(:ci): (#struct){
name: (string){ "Check that git is clean post generate and tests" }
run: (string){ "test -z \"$(git status --porcelain)\" || (git status; git diff; false)" }
}
_#writeCookiesFile(:ci): (#struct){
name: (string){ "Write the gitcookies file" }
run: (string){ "echo \"${{ secrets.gerritCookie }}\" > ~/.gitcookies" }
}
_#branchRefPrefix(:ci): (string){ "refs/heads/" }
_#tempCueckooGitDir(:ci): (string){ "mkdir tmpgit\ncd tmpgit\ngit init\ngit config user.name cueckoo\ngit config user.email cueckoo@gmail.com\ngit config http.https://github.com/.extraheader \"AUTHORIZATION: basic $(echo -n cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }} | base64)\"" }
_#cueckooCopybaraImage(:ci): (string){ "cueckoo/copybara:afc4ae03eed00b0c9d7415141cd1b5dfa583da7c" }
_#copybaraCmd(:ci): (_|_){
// [incomplete] _#copybaraCmd: invalid interpolation: non-concrete value string (type string):
// ./workflows.cue:372:2
_#cmd(:ci): (string){ string }
}
_#copybaraSteps(:ci): (#list){
_#name(:ci): (string){ string }
_#cmd(:ci): (string){ string }
0: (#struct){
name: (string){ "Checkout code" }
uses: (string){ "actions/checkout@v2" }
}
1: (#struct){
name: (string){ string }
run: (_|_){
// [incomplete] _#copybaraSteps.1.run: invalid interpolation: non-concrete value string (type string):
// ./workflows.cue:372:2
_#cmd(:ci): (string){ string }
}
}
}
_#curl(:ci): (string){ "curl -s" }
}
-- out/compile --
--- workflows.cue
{
workflowsDir: (*"./"|string)
_#masterBranch: "master"
_#releaseTagPattern: "v*"
workflows: ([
...{
file: string
schema: import;"github.com/SchemaStore/schemastore/src/schemas/json"〉.#Workflow
},
] & [
{
file: "test.yml"
schema: 1;test
},
{
file: "repository_dispatch.yml"
schema: 1;repository_dispatch
},
{
file: "release.yml"
schema: 1;release
},
{
file: "tip_triggers.yml"
schema: 1;tip_triggers
},
{
file: "new_version_triggers.yml"
schema: 1;new_version_triggers
},
{
file: "mirror.yml"
schema: 1;mirror
},
])
test: (〈0;_#bashWorkflow〉 & {
name: "Test"
on: {
push: {
branches: [
"**",
]
"tags-ignore": [
3;_#releaseTagPattern〉,
]
}
}
jobs: {
start: {
"runs-on": 3;_#linuxMachine〉
steps: ([
...(_ & {
if: "${{ \(〈3;_#isCLCITestBranch〉) }}"
}),
] & [
3;_#writeCookiesFile〉,
2;_#startCLBuild〉,
])
}
test: {
needs: "start"
strategy: 3;_#testStrategy〉
"runs-on": "${{ matrix.os }}"
steps: [
3;_#writeCookiesFile〉,
3;_#installGo〉,
3;_#checkoutCode〉,
3;_#cacheGoModules〉,
(〈3;_#setGoBuildTags〉 & {
_#tags: "long"
if: "${{ \(〈3;_#isMaster〉) }}"
}),
3;_#goGenerate〉,
3;_#goTest〉,
(〈3;_#goTestRace〉 & {
if: "${{ \(〈3;_#isMaster〉) || \(〈3;_#isCLCITestBranch〉) && matrix.go-version == '\(〈4;_#latestStableGo〉)' && matrix.os == '\(〈4;_#linuxMachine〉)' }}"
}),
3;_#goReleaseCheck〉,
3;_#checkGitClean〉,
2;_#pullThroughProxy〉,
2;_#failCLBuild〉,
]
}
mark_ci_success: {
"runs-on": 3;_#linuxMachine〉
if: "${{ \(〈2;_#isCLCITestBranch〉) }}"
needs: "test"
steps: [
3;_#writeCookiesFile〉,
2;_#passCLBuild〉,
]
}
delete_build_branch: {
"runs-on": 3;_#linuxMachine〉
if: "${{ \(〈2;_#isCLCITestBranch〉) && always() }}"
needs: "test"
steps: [
(〈3;_#step〉 & {
run: "\(〈4;_#tempCueckooGitDir〉)
git push https://github.com/cuelang/cue :${GITHUB_REF#\(〈4;_#branchRefPrefix〉)}"
}),
]
}
}
_#isCLCITestBranch: "startsWith(github.ref, '\(〈1;_#branchRefPrefix〉)ci/')"
_#isMaster: "github.ref == '\((〈1;_#branchRefPrefix〉 + 〈1;_#masterBranch〉))'"
_#pullThroughProxy: (〈1;_#step〉 & {
name: "Pull this commit through the proxy on \(〈2;_#masterBranch〉)"
run: "v=$(git rev-parse HEAD)\ncd $(mktemp -d)\ngo mod init mod.com\nGOPROXY=https://proxy.golang.org go get -d cuelang.org/go/cmd/cue@$v"
if: "${{ \(〈1;_#isMaster〉) }}"
})
_#startCLBuild: (〈1;_#step〉 & {
name: "Update Gerrit CL message with starting message"
run: (〈1;_#gerrit〉._#setCodeReview & {
#args: {
message: "Started the build... see progress at ${{ github.event.repository.html_url }}/actions/runs/${{ github.run_id }}"
}
}).res
})
_#failCLBuild: (〈1;_#step〉 & {
if: "${{ \(〈1;_#isCLCITestBranch〉) && failure() }}"
name: "Post any failures for this matrix entry"
run: (〈1;_#gerrit〉._#setCodeReview & {
#args: {
message: "Build failed for ${{ runner.os }}-${{ matrix.go-version }}; see ${{ github.event.repository.html_url }}/actions/runs/${{ github.run_id }} for more details"
labels: {
"Code-Review": -1
}
}
}).res
})
_#passCLBuild: (〈1;_#step〉 & {
name: "Update Gerrit CL message with success message"
run: (〈1;_#gerrit〉._#setCodeReview & {
#args: {
message: "Build succeeded for ${{ github.event.repository.html_url }}/actions/runs/${{ github.run_id }}"
labels: {
"Code-Review": 1
}
}
}).res
})
_#gerrit: {
_#setCodeReview: {
#args: {
tag: "trybot"
message: string
labels?: {
"Code-Review": int
}
}
res: "\(〈3;_#curl〉) -H "Content-Type: application/json" --request POST --data '\(〈import;"encoding/json"〉.Marshal(〈0;#args〉))' -b ~/.gitcookies https://cue-review.googlesource.com/a/changes/$(basename $(dirname $GITHUB_REF))/revisions/$(basename $GITHUB_REF)/review"
}
}
})
repository_dispatch: (〈0;_#bashWorkflow〉 & {
_#runtrybot: "runtrybot"
_#mirror: "mirror"
_#importpr: "importpr"
_#unity: "unity"
_#dispatchJob: (〈1;_#job〉 & {
_#type: string
"runs-on": 2;_#linuxMachine〉
if: "${{ github.event.client_payload.type == '\(〈0;_#type〉)' }}"
})
name: "Repository Dispatch"
on: [
"repository_dispatch",
]
jobs: {
"\(〈1;_#runtrybot〉)": (〈1;_#dispatchJob〉 & {
_#type: 〈2;_#runtrybot〉
steps: [
(〈3;_#step〉 & {
name: "Trigger trybot"
run: "\(〈4;_#tempCueckooGitDir〉)
git fetch https://cue-review.googlesource.com/cue ${{ github.event.client_payload.payload.ref }}
git checkout -b ci/${{ github.event.client_payload.payload.changeID }}/${{ github.event.client_payload.payload.commit }} FETCH_HEAD
git push https://github.com/cuelang/cue ci/${{ github.event.client_payload.payload.changeID }}/${{ github.event.client_payload.payload.commit }}"
}),
]
})
"\(〈1;_#mirror〉)": (〈1;_#dispatchJob〉 & {
_#type: 〈2;_#mirror〉
steps: (〈3;_#copybaraSteps〉 & {
_
_#name: "Mirror Gerrit to GitHub"
_#cmd: "github"
})
})
"\(〈1;_#importpr〉)": (〈1;_#dispatchJob〉 & {
_#type: 〈2;_#importpr〉
steps: (〈3;_#copybaraSteps〉 & {
_
_#name: "Import PR #${{ github.event.client_payload.commit }} from GitHub to Gerrit"
_#cmd: "github-pr ${{ github.event.client_payload.payload.pr }}"
})
})
}
})
mirror: (〈0;_#bashWorkflow〉 & {
name: "Scheduled repo mirror"
on: {
schedule: [
{
cron: "*/30 * * * *"
},
]
}
jobs: {
mirror: {
"runs-on": 3;_#linuxMachine〉
steps: (〈3;_#copybaraSteps〉 & {
_
_#name: "Mirror Gerrit to GitHub"
_#cmd: "github"
})
}
}
})
release: (〈0;_#bashWorkflow〉 & {
name: "Release"
on: {
push: {
tags: [
3;_#releaseTagPattern〉,
]
}
}
jobs: {
goreleaser: {
"runs-on": 3;_#linuxMachine〉
steps: [
(〈3;_#checkoutCode〉 & {
with: {
"fetch-depth": 0
}
}),
(〈3;_#installGo〉 & {
with: {
version: 5;_#latestStableGo〉
}
}),
(〈3;_#step〉 & {
name: "Run GoReleaser"
env: {
GITHUB_TOKEN: "${{ secrets.ACTIONS_GITHUB_TOKEN }}"
}
uses: "goreleaser/goreleaser-action@v2"
with: {
args: "release --rm-dist"
version: "v0.155.1"
}
}),
]
}
docker: {
name: "docker"
"runs-on": 3;_#linuxMachine〉
steps: [
3;_#checkoutCode〉,
(〈3;_#step〉 & {
name: "Set version environment"
run: "CUE_VERSION=$(echo ${GITHUB_REF##refs/tags/v})\necho \"CUE_VERSION=$CUE_VERSION\"\necho \"CUE_VERSION=$(echo $CUE_VERSION)\" >> $GITHUB_ENV"
}),
(〈3;_#step〉 & {
name: "Push to Docker Hub"
env: {
DOCKER_BUILDKIT: 1
GOLANG_VERSION: 1.14
CUE_VERSION: "${{ env.CUE_VERSION }}"
}
uses: "docker/build-push-action@v1"
with: {
tags: "${{ env.CUE_VERSION }},latest"
repository: "cuelang/cue"
username: "${{ secrets.DOCKER_USERNAME }}"
password: "${{ secrets.DOCKER_PASSWORD }}"
tag_with_ref: false
tag_with_sha: false
target: "cue"
always_pull: true
build_args: "GOLANG_VERSION=${{ env.GOLANG_VERSION }},CUE_VERSION=v${{ env.CUE_VERSION }}"
add_git_labels: true
}
}),
]
}
}
})
tip_triggers: (〈0;_#bashWorkflow〉 & {
name: "Push to tip triggers"
on: {
push: {
branches: [
3;_#masterBranch〉,
]
}
}
jobs: {
push: {
"runs-on": 3;_#linuxMachine〉
steps: [
{
name: "Rebuild tip.cuelang.org"
run: "\(〈4;_#curl〉) -X POST -d {} https://api.netlify.com/build_hooks/${{ secrets.CuelangOrgTipRebuildHook }}"
},
{
name: "Trigger unity build"
run: "echo \(〈4;_#curl〉) -H "Content-Type: application/json" -u cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }} --request POST --data-binary "{"event_type": "Check against ${GITHUB_SHA}", "client_payload": {"type": "unity", "payload": {"versions": "\"commit:${GITHUB_SHA}\""}}}" https://api.github.com/repos/cue-sh/unity/dispatches"
},
]
}
}
})
new_version_triggers: (〈0;_#bashWorkflow〉 & {
name: "New release triggers"
on: {
push: {
tags: [
3;_#releaseTagPattern〉,
]
}
}
jobs: {
push: {
"runs-on": 3;_#linuxMachine〉
steps: [
{
name: "Rebuild tip.cuelang.org"
run: "\(〈4;_#curl〉) -H "Content-Type: application/json" -u cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }} --request POST --data-binary "{"event_type": "Re-test post release of ${GITHUB_REF##refs/tags/}"}" https://api.github.com/repos/cuelang/cuelang.org/dispatches"
},
{
name: "Trigger unity build"
run: "\(〈4;_#curl〉) -H "Content-Type: application/json" -u cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }} --request POST --data-binary "{"event_type": "Check against CUE ${GITHUB_REF##refs/tags/}", "client_payload": {"type": "unity", "payload": {"versions": "\"${GITHUB_REF##refs/tags/}\"}}}" https://api.github.com/repos/cue-sh/unity/dispatches"
},
]
}
}
})
_#bashWorkflow: (〈import;"github.com/SchemaStore/schemastore/src/schemas/json"〉.#Workflow & {
jobs: {
[string]: {
defaults: {
run: {
shell: "bash"
}
}
}
}
})
_#job: ((〈import;"github.com/SchemaStore/schemastore/src/schemas/json"〉.#Workflow & {}).jobs & {
x: _
}).x
_#step: ((〈0;_#job〉 & {
steps: _
}).steps & [
_,
])[0]
_#codeGenGo: "1.14.14"
_#latestStableGo: "1.15.8"
_#linuxMachine: "ubuntu-18.04"
_#macosMachine: "macos-10.15"
_#windowsMachine: "windows-2019"
_#testStrategy: {
"fail-fast": false
matrix: {
"go-version": [
2;_#codeGenGo〉,
2;_#latestStableGo〉,
"1.16",
]
os: [
2;_#linuxMachine〉,
2;_#macosMachine〉,
2;_#windowsMachine〉,
]
}
}
_#setGoBuildTags: (〈0;_#step〉 & {
_#tags: string
name: "Set go build tags"
run: "go env -w GOFLAGS=-tags=\(〈0;_#tags〉)"
})
_#installGo: (〈0;_#step〉 & {
name: "Install Go"
uses: "actions/setup-go@v2"
with: {
"go-version": (*"${{ matrix.go-version }}"|string)
stable: false
}
})
_#checkoutCode: (〈0;_#step〉 & {
name: "Checkout code"
uses: "actions/checkout@v2"
})
_#cacheGoModules: (〈0;_#step〉 & {
name: "Cache Go modules"
uses: "actions/cache@v1"
with: {
path: "~/go/pkg/mod"
key: "${{ runner.os }}-${{ matrix.go-version }}-go-${{ hashFiles('**/go.sum') }}"
"restore-keys": "${{ runner.os }}-${{ matrix.go-version }}-go-"
}
})
_#goGenerate: (〈0;_#step〉 & {
name: "Generate"
run: "go generate ./..."
if: "matrix.go-version == '\(〈1;_#codeGenGo〉)' && matrix.os != '\(〈1;_#windowsMachine〉)'"
})
_#goTest: (〈0;_#step〉 & {
name: "Test"
run: "go test ./..."
})
_#goTestRace: (〈0;_#step〉 & {
name: "Test with -race"
run: "go test -race ./..."
})
_#goReleaseCheck: (〈0;_#step〉 & {
name: "gorelease check"
run: "go run golang.org/x/exp/cmd/gorelease"
})
_#checkGitClean: (〈0;_#step〉 & {
name: "Check that git is clean post generate and tests"
run: "test -z \"$(git status --porcelain)\" || (git status; git diff; false)"
})
_#writeCookiesFile: (〈0;_#step〉 & {
name: "Write the gitcookies file"
run: "echo \"${{ secrets.gerritCookie }}\" > ~/.gitcookies"
})
_#branchRefPrefix: "refs/heads/"
_#tempCueckooGitDir: "mkdir tmpgit\ncd tmpgit\ngit init\ngit config user.name cueckoo\ngit config user.email cueckoo@gmail.com\ngit config http.https://github.com/.extraheader \"AUTHORIZATION: basic $(echo -n cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }} | base64)\""
_#cueckooCopybaraImage: "cueckoo/copybara:afc4ae03eed00b0c9d7415141cd1b5dfa583da7c"
_#copybaraCmd: {
"cd _scripts
docker run --rm -v $PWD/cache:/root/copybara/cache -v $PWD:/usr/src/app --entrypoint="" \(〈1;_#cueckooCopybaraImage〉) bash -c " \
set -eu; \
echo \"${{ secrets.gerritCookie }}\" > ~/.gitcookies; \
chmod 600 ~/.gitcookies; \
git config --global user.name cueckoo; \
git config --global user.email cueckoo@gmail.com; \
git config --global http.cookiefile \$HOME/.gitcookies; \
echo https://cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }}@github.com > ~/.git-credentials; \
chmod 600 ~/.git-credentials; \
java -jar /opt/copybara/copybara_deploy.jar migrate copy.bara.sky \(0;_#cmd〉); \
""
_#cmd: string
}
_#copybaraSteps: {
[
1;_#checkoutCode〉,
(〈1;_#step〉 & {
name: 1;_#name〉
run: (〈2;_#copybaraCmd〉 & {
_
_#cmd: 〈2;let cmdCmd〉
})
}),
]
_#name: string
_#cmd: string
}
_#curl: "curl -s"
}