-
Notifications
You must be signed in to change notification settings - Fork 73
153 lines (143 loc) · 5.15 KB
/
Copy pathci.yaml
File metadata and controls
153 lines (143 loc) · 5.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# Copyright 2026 The kpt Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
name: CI
on:
push:
branches:
- main
pull_request:
branches:
- main
- "*/v[0-9]+.[0-9]+"
schedule:
- cron: "0 17 * * *"
concurrency:
# If a job with a concurrency group is running with cancel-in-progress, that job is cancelled when a new job with same concurrency group is started.
# In a workflow github.head_ref exists only for PRs while github.ref exists for the repo branches/tags.
# Concurrency group will be of form ${{ github.head_ref }}-ci when triggered via PR creating 1 group per PR. Older jobs are cancelled when new commits are pushed to that PR branch.
# Concurrency group will be of form ${{ github.ref }}-ci when triggered from repo branch or tag ref. Older jobs are cancelled when new jobs are triggered from that same branch/tag.
# `-ci` suffix is to namespace the concurrency group incase you want to add a group for another workflow in the future.
group: "${{ github.head_ref || github.ref }}-ci"
cancel-in-progress: true
jobs:
# Detect which path groups changed to conditionally skip expensive jobs.
# Do not use workflow-level paths-ignore for required checks.
# GitHub leaves skipped required workflows Pending forever.
# Instead, we always run the workflow and skip individual jobs conditionally.
changes:
name: detect changes
runs-on: ubuntu-latest
outputs:
code: ${{ steps.filter.outputs.code }}
steps:
- uses: actions/checkout@v7
- uses: dorny/paths-filter@v4
id: filter
with:
filters: |
code:
- 'functions/**'
- 'examples/**'
- 'tests/**'
- 'build/**'
- 'scripts/**'
- 'Makefile'
- '.github/workflows/ci.yaml'
validate-metadata:
needs: changes
if: needs.changes.outputs.code == 'true'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- name: Set up Go
uses: kptdev/porch/.github/actions/setup-go-kpt@main
with:
go-version-file: documentation/go.mod
install-kpt: 'false'
- name: Validate metadata.yaml files
run: make validate-metadata
go-unit-test-ci:
needs: changes
if: needs.changes.outputs.code == 'true'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- name: Set up Go
uses: kptdev/porch/.github/actions/setup-go-kpt@main
with:
go-version-file: documentation/go.mod
install-kpt: 'false'
cache-dependency-path: functions/go/*/go.sum
- name: Run unit tests
run: |
make unit-test
e2e-ci:
needs: changes
if: needs.changes.outputs.code == 'true'
timeout-minutes: 60
runs-on: ubuntu-latest
env:
GOPATH: /home/runner/work/krm-functions-catalog/functions/go
GO111MODULE: on
steps:
- uses: actions/checkout@v7
- name: Set up Go and install kpt
uses: kptdev/porch/.github/actions/setup-go-kpt@main
with:
go-version-file: tests/e2etest/go.mod
cache-dependency-path: |
functions/go/*/go.sum
tests/e2etest/go.sum
- name: Cache golangci-lint
uses: actions/cache@v6
with:
path: ~/.cache/golangci-lint
key: golangci-lint-${{ hashFiles('functions/go/*/go.sum') }}
restore-keys: golangci-lint-
- name: Install kustomize
uses: syntaqx/setup-kustomize@v1
with:
kustomize-version: 4.2.0
- run: kustomize version
- name: Build docker images
run: |
make build
- name: Run all tests
run: |
make e2e-test
ci-gate:
name: ci
needs: [changes, validate-metadata, go-unit-test-ci, e2e-ci]
if: always()
runs-on: ubuntu-latest
steps:
- name: Check results
run: |
# If no code changes, this check is not applicable, pass.
if [ "${{ needs.changes.result }}" != "success" ]; then
echo "changes job did not succeed"
exit 1
fi
if [ "${{ needs.changes.outputs.code }}" = "false" ]; then
echo "No code changes, skipping CI checks"
exit 0
fi
# If any required job failed, cancelled, or skipped, fail this check.
if [ "${{ needs.validate-metadata.result }}" != "success" ] || \
[ "${{ needs.go-unit-test-ci.result }}" != "success" ] || \
[ "${{ needs.e2e-ci.result }}" != "success" ]; then
echo "CI checks failed or did not complete"
exit 1
fi
echo "CI checks passed"