| package ci |
| |
| import ( |
| "github.com/SchemaStore/schemastore/schemas/json" |
| ) |
| |
| workflowsDir: *"./" | string @tag(workflowsDir) |
| |
| workflows: [...{file: string, schema: json.Workflow}] |
| workflows: [ |
| { |
| file: "test.yml" |
| schema: test |
| }, |
| { |
| file: "test_dispatch.yml" |
| schema: test_dispatch |
| }, |
| { |
| file: "release.yml" |
| schema: release |
| }, |
| { |
| file: "rebuild_tip_cuelang_org.yml" |
| schema: rebuild_tip_cuelang_org |
| }, |
| ] |
| |
| test: json.Workflow & { |
| name: "Test" |
| on: { |
| push: { |
| branches: ["*"] |
| "tags-ignore": ["v*"] |
| } |
| } |
| defaults: run: shell: "bash" |
| jobs: test: { |
| strategy: { |
| "fail-fast": false |
| matrix: { |
| // Use a stable version of 1.14.x for the go generate step below |
| "go-version": ["1.13.x", "1.14.3"] |
| os: ["ubuntu-latest", "macos-latest", "windows-latest"] |
| } |
| } |
| "runs-on": "${{ matrix.os }}" |
| steps: [{ |
| name: "Install Go" |
| uses: "actions/setup-go@v2" |
| with: "go-version": "${{ matrix.go-version }}" |
| }, { |
| name: "Checkout code" |
| uses: "actions/checkout@v2" |
| }, { |
| 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- |
| """ |
| } |
| }, { |
| name: "Generate" |
| run: """ |
| go generate ./... |
| go generate ./.github/workflows |
| """ |
| // The Go version corresponds to the precise 1.14.x version specified in |
| // the matrix. Skip windows for now until we work out why re-gen is flaky |
| if: "matrix.go-version == '1.14.3' && matrix.os != 'windows-latest'" |
| }, { |
| name: "Test" |
| run: "go test ./..." |
| }, { |
| name: "Test with -race" |
| run: "go test -race ./..." |
| }, { |
| name: "gorelease check" |
| run: "go run golang.org/x/exp/cmd/gorelease" |
| }, { |
| name: "Check that git is clean post generate and tests" |
| run: "test -z \"$(git status --porcelain)\" || (git status; git diff; false)" |
| }, { |
| name: "Pull this commit through the proxy on master" |
| 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@$v |
| """ |
| if: "github.ref == 'refs/heads/master'" |
| }] |
| } |
| } |
| |
| test_dispatch: json.Workflow & { |
| |
| name: "Test" |
| env: GERRIT_COOKIE: "${{ secrets.gerritCookie }}" |
| on: ["repository_dispatch"] |
| defaults: run: shell: "bash" |
| jobs: { |
| start: { |
| "runs-on": "ubuntu-latest" |
| steps: [{ |
| name: "Write the gitcookies file" |
| run: "echo \"$GERRIT_COOKIE\" > ~/.gitcookies" |
| }, { |
| name: "Update Gerrit CL message with starting message" |
| run: """ |
| curl -s -H \"Content-Type: application/json\" --request POST --data '{\"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/${{ github.event.client_payload.changeID }}/revisions/${{ github.event.client_payload.commit }}/review |
| """ |
| }] |
| } |
| test: { |
| "runs-on": "${{ matrix.os }}" |
| steps: [{ |
| name: "Write the gitcookies file" |
| run: "echo \"$GERRIT_COOKIE\" > ~/.gitcookies" |
| }, { |
| name: "Install Go" |
| uses: "actions/setup-go@v2" |
| with: "go-version": "${{ matrix.go-version }}" |
| }, { |
| name: "Checkout code" |
| uses: "actions/checkout@v2" |
| }, { |
| name: "Checkout ref" |
| run: """ |
| git fetch https://cue-review.googlesource.com/cue ${{ github.event.client_payload.ref }} |
| git checkout FETCH_HEAD |
| """ |
| }, { |
| 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- |
| """ |
| } |
| }, { |
| name: "Generate" |
| run: """ |
| go generate ./... |
| go generate ./.github/workflows |
| """ |
| // The Go version corresponds to the precise 1.14.x version specified in |
| // the matrix. Skip windows for now until we work out why re-gen is flaky |
| if: "matrix.go-version == '1.14.3' && matrix.os != 'windows-latest'" |
| }, { |
| name: "Test" |
| run: "go test ./..." |
| }, { |
| name: "Test with -race" |
| run: "go test -race ./..." |
| }, { |
| name: "gorelease check" |
| run: "go run golang.org/x/exp/cmd/gorelease" |
| }, { |
| name: "Check that git is clean post generate and tests" |
| run: "test -z \"$(git status --porcelain)\" || (git status; git diff; false)" |
| }, { |
| name: "Post any failures for this matrix entry" |
| run: """ |
| curl -s -H \"Content-Type: application/json\" --request POST --data '{\"labels\": { \"Code-Review\": -1 }, \"message\":\"Build failed for ${{ runner.os }}-${{ matrix.go-version }}; see ${{ github.event.repository.html_url }}/actions/runs/${{ github.run_id }} for more details\"}' -b ~/.gitcookies https://cue-review.googlesource.com/a/changes/${{ github.event.client_payload.changeID }}/revisions/${{ github.event.client_payload.commit }}/review |
| """ |
| if: "${{ failure() }}" |
| }] |
| needs: "start" |
| strategy: { |
| "fail-fast": false |
| matrix: { |
| // Use a stable version of 1.14.x for the go generate step below |
| "go-version": ["1.13.x", "1.14.3"] |
| os: ["ubuntu-latest", "macos-latest", "windows-latest"] |
| } |
| } |
| } |
| end: { |
| "runs-on": "ubuntu-latest" |
| steps: [{ |
| name: "Write the gitcookies file" |
| run: "echo \"$GERRIT_COOKIE\" > ~/.gitcookies" |
| }, { |
| name: "Update Gerrit CL message with success message" |
| run: """ |
| curl -s -H \"Content-Type: application/json\" --request POST --data '{\"labels\": { \"Code-Review\": 1 }, \"message\":\"Build succeeded for ${{ github.event.repository.html_url }}/actions/runs/${{ github.run_id }}\"}' -b ~/.gitcookies https://cue-review.googlesource.com/a/changes/${{ github.event.client_payload.changeID }}/revisions/${{ github.event.client_payload.commit }}/review |
| """ |
| }] |
| needs: "test" |
| } |
| } |
| } |
| release: { |
| name: "Release" |
| on: push: tags: ["v*"] |
| jobs: { |
| goreleaser: { |
| "runs-on": "ubuntu-latest" |
| steps: [{ |
| name: "Checkout code" |
| uses: "actions/checkout@v2" |
| }, { |
| name: "Unshallow" // required for the changelog to work correctly. |
| run: "git fetch --prune --unshallow" |
| }, { |
| name: "Run GoReleaser" |
| env: GITHUB_TOKEN: "${{ secrets.ACTIONS_GITHUB_TOKEN }}" |
| uses: "docker://goreleaser/goreleaser:latest" |
| with: args: "release --rm-dist" |
| }] |
| } |
| docker: { |
| name: "docker" |
| "runs-on": "ubuntu-latest" |
| steps: [{ |
| name: "Check out the repo" |
| uses: "actions/checkout@v2" |
| }, { |
| name: "Set version environment" |
| run: """ |
| CUE_VERSION=$(echo ${GITHUB_REF##refs/tags/v}) |
| echo \"CUE_VERSION=$CUE_VERSION\" |
| echo \"::set-env name=CUE_VERSION::$(echo $CUE_VERSION)\" |
| """ |
| }, { |
| 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 |
| } |
| }] |
| } |
| } |
| } |
| |
| rebuild_tip_cuelang_org: json.Workflow & { |
| name: "Push to tip" |
| on: push: branches: ["master"] |
| jobs: push: { |
| "runs-on": "ubuntu-latest" |
| steps: [{ |
| name: "Rebuild tip.cuelang.org" |
| run: "curl -X POST -d {} https://api.netlify.com/build_hooks/${{ secrets.CuelangOrgTipRebuildHook }}" |
| }] |
| } |
| } |