Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

unset values in secret-env if they are unset in helm #30

Open
wants to merge 51 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
d8e75cd
feat(scripts): support specify yatai endpoint
yetone Dec 27, 2022
15ab033
fix(scripts): set YATAI_ENDPOINT to empty string
yetone Dec 28, 2022
7f61c61
fix: some fields optional
yetone Jan 4, 2023
1d798c5
feat: add e2e tests
yetone Jan 4, 2023
8537127
fix(tests): fix env name
yetone Jan 4, 2023
de873b4
fix(tests): mark spec as failure
yetone Jan 4, 2023
0733f8d
fix(tests): fix e2e test
yetone Jan 4, 2023
33b43d3
fix(tests): fix e2e example
yetone Jan 4, 2023
af12b23
fix(scripts): fix quick install
yetone Jan 4, 2023
b7a2ffc
fix: get yatai image builder namespace
yetone Jan 4, 2023
9fcba10
fix: fix e2e test
yetone Jan 4, 2023
eb4f5ba
fix: fix e2e test
yetone Jan 5, 2023
c465578
fix: AWS_EC2_METADATA_DISABLED
yetone Jan 5, 2023
1d7c393
feat: add yatai-image-builder-crds helm chart
yetone Jan 5, 2023
171ee6d
fix(ci): release yatai-image-builder-crds
yetone Jan 6, 2023
4dc695c
feat: support bento image build engines: buildkit and buildkit-rootless
yetone Jan 8, 2023
337f26f
feat: add rbac for yatai with yatai-image-builder
yetone Jan 8, 2023
bccd922
feat: support upgrade image builder pod
yetone Jan 12, 2023
7aeef0d
fix(scripts): cannot install devel crds
yetone Jan 16, 2023
6bdb942
feat: add image field for bento request crd
yetone Jan 17, 2023
8eea644
fix(helm-chart): minimize role
yetone Jan 15, 2023
ea82e2b
fix: use the docker credentials from the specified dockerConfigJsonSe…
yetone Jan 17, 2023
93f1cb9
fix(scripts): make sure cert-manager pod created in quick install script
yetone Feb 13, 2023
5d576dd
chore(deps): bump golang.org/x/net from 0.1.0 to 0.7.0
dependabot[bot] Feb 18, 2023
fef4dd4
fix(doc): typo
yetone Feb 24, 2023
b8dc2a7
fix: fix the logic of checking if the image exists
yetone Mar 27, 2023
73c4d8b
fix: update dependencies
yetone Apr 19, 2023
253a7f5
fix: golangci lint
yetone Apr 19, 2023
3edc88f
fix: update dependencies
yetone Apr 19, 2023
0644cfb
allow setting yataiSystem.serviceAccountName in install script (#21)
sauyon May 9, 2023
628df75
fix: disable report failed when builder pod is failed
yetone May 25, 2023
2b3f677
Feat: add disable yatai registration env in helm chart (#23)
FogDong Jun 8, 2023
dbdfc44
feat: increase downlader container resources
yetone Jul 6, 2023
3a2dbdc
fix: move yatai registration env to secret env (#24)
FogDong Jul 7, 2023
cbf02cf
refactor: use random pod names to avoid events from the previous pod …
yetone Jul 20, 2023
53f2bdf
feat: default resources for builder container
yetone Jul 26, 2023
d8c399a
fix: gofmt
yetone Jul 26, 2023
e4e7b54
feat: add global default_image_builder_container_resources configurat…
yetone Aug 4, 2023
90f60be
feat: add priorityClassName (#29)
yetone Aug 4, 2023
6cf4ac3
feat: support specify AWSAccessKeySecretName
yetone Aug 15, 2023
cabf9d2
feat: get hash str
yetone Aug 15, 2023
3d7dac1
fix: delete duplicate pods
yetone Aug 17, 2023
9edfdb5
fix: global default image builder container resources
yetone Aug 17, 2023
d21712c
chores: add pod deletion logs
yetone Aug 17, 2023
f07bb16
refactor: change yaml package (#33)
yetone Aug 25, 2023
f270c5a
chore(ci): setup upterm session
yetone Aug 25, 2023
33d4dbb
refactor: use job instead of pod (#31)
yetone Aug 26, 2023
6f26996
fix: use default backoffLimit (#35)
yetone Aug 30, 2023
4e24a2f
unset values in secret-env if they are unset in helm
sauyon Aug 9, 2023
f2863f8
fix passwordExistingSecretName
sauyon Aug 30, 2023
335fedf
fix parse errors
sauyon Aug 30, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
234 changes: 234 additions & 0 deletions .github/workflows/e2e.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,234 @@
name: e2e
on:
issue_comment:
types: [created]

env:
E2E_CHECK_NAME: e2e tests

jobs:
triage:
runs-on: ubuntu-latest
name: Comment evaluate
outputs:
run-e2e: ${{ startsWith(github.event.comment.body,'/run-e2e') && steps.checkUserMember.outputs.isTeamMember == 'true' }}
is-debug: ${{ startsWith(github.event.comment.body,'/run-e2e debug') && steps.checkUserMember.outputs.isTeamMember == 'true' }}
pr_num: ${{ steps.parser.outputs.pr_num }}
image_tag: "pr-${{ steps.parser.outputs.pr_num }}-${{ steps.parser.outputs.commit_sha }}"
commit_sha: ${{ steps.parser.outputs.commit_sha }}
version_buildflags: ${{ steps.parser.outputs.version_buildflags }}
image_build_hash: ${{ steps.parser.outputs.image_build_hash }}

steps:
- uses: actions/checkout@v3

- uses: tspascoal/get-user-teams-membership@v2
id: checkUserMember
with:
username: ${{ github.actor }}
team: 'dev'
GITHUB_TOKEN: ${{ secrets.GH_CHECKING_USER_AUTH }}

- name: Update comment with the execution url
if: ${{ startsWith(github.event.comment.body,'/run-e2e') && steps.checkUserMember.outputs.isTeamMember == 'true' }}
uses: peter-evans/create-or-update-comment@v2
with:
comment-id: ${{ github.event.comment.id }}
body: |
**Update:** You can check the progress [here](https://github.com/${{github.repository}}/actions/runs/${{github.run_id}})
reactions: rocket

- name: Parse git info
if: ${{ startsWith(github.event.comment.body,'/run-e2e') && steps.checkUserMember.outputs.isTeamMember == 'true' }}
id: parser
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
# Get PR number
PR_URL="${{ github.event.issue.pull_request.url }}"
PR_NUM=${PR_URL##*/}
echo "Checking out from PR #$PR_NUM based on URL: $PR_URL"
echo "::set-output name=pr_num::$PR_NUM"
# Get commit SHA
git config --global --add safe.directory "$GITHUB_WORKSPACE"
gh pr checkout $PR_NUM
SHA=$(git log -n 1 --pretty=format:"%H")
echo "::set-output name=commit_sha::$SHA"
GIT_COMMIT=$(git describe --match=NeVeRmAtCh --tags --always --dirty | cut -c 1-7)
BUILD_DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ)
VERSION=$(git describe --tags `git rev-list --tags --max-count=1` | sed 's/v\(\)/\1/')
PKG=github.com/bentoml/yatai-image-builder
VERSION_BUILDFLAGS="-X '${PKG}/version.GitCommit=${GIT_COMMIT}' -X '${PKG}/version.Version=${VERSION}' -X '${PKG}/version.BuildDate=${BUILD_DATE}'"
echo "::set-output name=version_buildflags::$VERSION_BUILDFLAGS"
echo "::set-output name=image_build_hash::${{ hashFiles('Dockerfile', 'main.go', './apis/**', './controllers/**', './utils/**', './version/**', './yatai-client/**', '**/go.sum', '**go.mod') }}"

build-test-images:
needs: triage
if: needs.triage.outputs.run-e2e == 'true'
runs-on: ubuntu-latest
steps:
- name: Set status in-progress
uses: LouisBrunner/[email protected]
with:
token: ${{ secrets.GITHUB_TOKEN }}
sha: ${{ needs.triage.outputs.commit_sha }}
name: ${{ env.E2E_CHECK_NAME }}
status: in_progress
details_url: https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}

- uses: actions/checkout@v3

- name: Register workspace path
run: git config --global --add safe.directory "$GITHUB_WORKSPACE"

- name: Checkout Pull Request
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
id: checkout
run: |
gh pr checkout ${{ needs.triage.outputs.pr_num }}

- name: Set up Docker Buildx
id: buildx
# Use the action from the master, as we've seen some inconsistencies with @v1
# Issue: https://github.com/docker/build-push-action/issues/286
uses: docker/setup-buildx-action@master
with:
install: true

- name: Login to Quay.io
uses: docker/login-action@v1
with:
registry: quay.io
username: ${{ secrets.QUAY_USERNAME }}
password: ${{ secrets.QUAY_ROBOT_TOKEN }}

- name: Cache Docker layers
uses: actions/cache@v2
with:
path: /tmp/.buildx-cache
# Key is named differently to avoid collision
key: ${{ runner.os }}-multi-buildx-${{ needs.triage.outputs.image_build_hash }}
restore-keys: |
${{ runner.os }}-multi-buildx

- name: Build test image
uses: docker/build-push-action@v2
with:
build-args: 'VERSION_BUILDFLAGS=${{ needs.triage.outputs.version_buildflags }}'
context: .
push: true
tags: quay.io/bentoml/test-yatai-image-builder:${{ needs.triage.outputs.image_tag }}
cache-from: type=local,src=/tmp/.buildx-cache
# Note the mode=max here
# More: https://github.com/moby/buildkit#--export-cache-options
# And: https://github.com/docker/buildx#--cache-tonametypetypekeyvalue
cache-to: type=local,mode=max,dest=/tmp/.buildx-cache-new

- name: Move cache
run: |
rm -rf /tmp/.buildx-cache
mv /tmp/.buildx-cache-new /tmp/.buildx-cache

run-test:
needs: [triage, build-test-images]
if: needs.triage.outputs.run-e2e == 'true'
runs-on: ubuntu-latest
steps:
- name: Set status in-progress
uses: LouisBrunner/[email protected]
with:
token: ${{ secrets.GITHUB_TOKEN }}
sha: ${{ needs.triage.outputs.commit_sha }}
name: ${{ env.E2E_CHECK_NAME }}
status: in_progress
details_url: https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}

- name: Checkout
uses: actions/checkout@v3

- name: Register workspace path
run: git config --global --add safe.directory "$GITHUB_WORKSPACE"

- name: Checkout Pull Request
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
id: checkout
run: |
gh pr checkout ${{ needs.triage.outputs.pr_num }}

- name: Install KinD
run: ./tests/gh-actions/install_kind.sh

- name: Install Helm
run: ./tests/gh-actions/install_helm.sh

- name: Create KinD Cluster
run: kind create cluster --config tests/gh-actions/kind-cluster-1-24.yaml

- uses: oNaiPs/secrets-to-env-action@v1
with:
secrets: ${{ toJSON(secrets) }}

- name: Install yatai-image-builder
continue-on-error: true
id: install-yatai-image-builder
env:
YATAI_IMAGE_BUILDER_IMG_REPO: test-yatai-image-builder
YATAI_IMAGE_BUILDER_IMG_TAG: ${{ needs.triage.outputs.image_tag }}
run: |
./tests/e2e/installation_test.sh

- name: Setup upterm session
uses: lhotari/action-upterm@v1
if: needs.triage.outputs.is-debug == 'true'
with:
## limits ssh access and adds the ssh public key for the user which triggered the workflow
limit-access-to-actor: true
## limits ssh access and adds the ssh public keys of the listed GitHub users
limit-access-to-users: yetone

- name: Run e2e test
continue-on-error: true
id: test
if: steps.install-yatai-image-builder.outcome == 'success'
env:
DEBUG: ${{ needs.triage.outputs.is-debug }}
run: |
make test-e2e

- name: Set status success
uses: LouisBrunner/[email protected]
if: steps.test.outcome == 'success' && steps.install-yatai-image-builder.outcome == 'success'
with:
token: ${{ secrets.GITHUB_TOKEN }}
sha: ${{ needs.triage.outputs.commit_sha }}
name: ${{ env.E2E_CHECK_NAME }}
conclusion: success
details_url: https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}

- name: React to comment with success
uses: dkershner6/reaction-action@v1
if: steps.test.outcome == 'success' && steps.install-yatai-image-builder.outcome == 'success'
with:
token: ${{ secrets.GITHUB_TOKEN }}
commentId: ${{ github.event.comment.id }}
reaction: "hooray"

- name: React to comment with failure
uses: dkershner6/reaction-action@v1
if: steps.test.outcome != 'success' || steps.install-yatai-image-builder.outcome != 'success'
with:
token: ${{ secrets.GITHUB_TOKEN }}
commentId: ${{ github.event.comment.id }}
reaction: "confused"

- name: Set status failure
uses: LouisBrunner/[email protected]
if: steps.test.outcome != 'success' || steps.install-yatai-image-builder.outcome != 'success'
with:
token: ${{ secrets.GITHUB_TOKEN }}
sha: ${{ needs.triage.outputs.commit_sha }}
name: ${{ env.E2E_CHECK_NAME }}
conclusion: failure
details_url: https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}
6 changes: 5 additions & 1 deletion .github/workflows/lint.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,10 @@ jobs:
- name: Set up chart-testing
uses: helm/[email protected]

- name: Render Helm Template
- name: Render yatai-image-builder-crds Helm Template
working-directory: ./helm/yatai-image-builder-crds
run: make template

- name: Render yatai-image-builder Helm Template
working-directory: ./helm/yatai-image-builder
run: make template
20 changes: 18 additions & 2 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -67,15 +67,31 @@ jobs:
echo ::set-output name=match::true
fi

- name: Package, Index and Publish to public repo
- name: Package, Index and Publish yatai-image-builder-crds to public repo
working-directory: ./helm/yatai-image-builder-crds
if: steps.check-tag.outputs.match != 'true'
env:
VERSION: ${{ steps.tag.outputs.tag }}
API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }}
run: make release

- name: Package, Index and Publish yatai-image-builder-crds to devel repo
working-directory: ./helm/yatai-image-builder-crds
if: steps.check-tag.outputs.match == 'true'
env:
VERSION: ${{ steps.tag.outputs.tag }}
API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }}
run: make release-devel

- name: Package, Index and Publish yatai-image-builder to public repo
working-directory: ./helm/yatai-image-builder
if: steps.check-tag.outputs.match != 'true'
env:
VERSION: ${{ steps.tag.outputs.tag }}
API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }}
run: make release

- name: Package, Index and Publish to devel repo
- name: Package, Index and Publish yatai-image-builder to devel repo
working-directory: ./helm/yatai-image-builder
if: steps.check-tag.outputs.match == 'true'
env:
Expand Down
1 change: 1 addition & 0 deletions Dockerfile-kaniko
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
FROM gcr.io/kaniko-project/executor:debug
5 changes: 5 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ help: ## Display this help.
.PHONY: manifests
manifests: controller-gen ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects.
$(CONTROLLER_GEN) rbac:roleName=manager-role crd webhook paths="./..." output:crd:artifacts:config=config/crd/bases
$(KUSTOMIZE) build config/crd > helm/yatai-image-builder-crds/templates/bentorequest.yaml

.PHONY: generate
generate: controller-gen ## Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations.
Expand All @@ -112,6 +113,10 @@ vet: ## Run go vet against code.
test: manifests generate fmt vet envtest ## Run tests.
KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) -p path)" go test ./... -coverprofile cover.out

.PHONY: test-e2e # You will need to have a Kind cluster up in running to run this target
test-e2e:
go test ./tests/e2e/ -v -ginkgo.v -timeout 20m

##@ Build

.PHONY: build
Expand Down
2 changes: 1 addition & 1 deletion apis/resources/v1alpha1/bento_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ type BentoSpec struct {
Tag string `json:"tag"`
// +kubebuilder:validation:Required
Image string `json:"image"`
Context BentoContext `json:"context,omitempty"`
Context *BentoContext `json:"context,omitempty"`
Runners []BentoRunner `json:"runners,omitempty"`

ImagePullSecrets []corev1.LocalObjectReference `json:"imagePullSecrets,omitempty"`
Expand Down
32 changes: 20 additions & 12 deletions apis/resources/v1alpha1/bentorequest_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,17 +33,18 @@ const (
// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized.

type ExtraPodMetadata struct {
Annotations map[string]string `json:"annotations,omitempty"`
Labels map[string]string `json:"labels,omitempty"`
Annotations map[string]string `json:"annotations,omitempty" yaml:"annotations,omitempty"`
Labels map[string]string `json:"labels,omitempty" yaml:"labels,omitempty"`
}

type ExtraPodSpec struct {
SchedulerName string `json:"schedulerName,omitempty"`
NodeSelector map[string]string `json:"nodeSelector,omitempty"`
Affinity *corev1.Affinity `json:"affinity,omitempty"`
Tolerations []corev1.Toleration `json:"tolerations,omitempty"`
TopologySpreadConstraints []corev1.TopologySpreadConstraint `json:"topologySpreadConstraints,omitempty"`
ServiceAccountName string `json:"serviceAccountName,omitempty"`
PriorityClassName string `json:"priorityClassName,omitempty" yaml:"priorityClassName,omitempty"`
SchedulerName string `json:"schedulerName,omitempty" yaml:"schedulerName,omitempty"`
NodeSelector map[string]string `json:"nodeSelector,omitempty" yaml:"nodeSelector,omitempty"`
Affinity *corev1.Affinity `json:"affinity,omitempty" yaml:"affinity,omitempty"`
Tolerations []corev1.Toleration `json:"tolerations,omitempty" yaml:"tolerations,omitempty"`
TopologySpreadConstraints []corev1.TopologySpreadConstraint `json:"topologySpreadConstraints,omitempty" yaml:"topologySpreadConstraints,omitempty"`
ServiceAccountName string `json:"serviceAccountName,omitempty" yaml:"serviceAccountName,omitempty"`
}

// BentoRequestSpec defines the desired state of BentoRequest
Expand All @@ -54,24 +55,30 @@ type BentoRequestSpec struct {
// +kubebuilder:validation:Required
BentoTag string `json:"bentoTag"`
DownloadURL string `json:"downloadUrl,omitempty"`
Context BentoContext `json:"context,omitempty"`
Context *BentoContext `json:"context,omitempty"`
Runners []BentoRunner `json:"runners,omitempty"`
Models []BentoModel `json:"models,omitempty"`

// +kubebuilder:validation:Optional
Image string `json:"image,omitempty"`

ImageBuildTimeout *time.Duration `json:"imageBuildTimeout,omitempty"`

// +kubebuilder:validation:Optional
ImageBuilderExtraPodMetadata ExtraPodMetadata `json:"imageBuilderExtraPodMetadata,omitempty"`
ImageBuilderExtraPodMetadata *ExtraPodMetadata `json:"imageBuilderExtraPodMetadata,omitempty"`
// +kubebuilder:validation:Optional
ImageBuilderExtraPodSpec ExtraPodSpec `json:"imageBuilderExtraPodSpec,omitempty"`
ImageBuilderExtraPodSpec *ExtraPodSpec `json:"imageBuilderExtraPodSpec,omitempty"`
// +kubebuilder:validation:Optional
ImageBuilderExtraContainerEnv []corev1.EnvVar `json:"imageBuilderExtraContainerEnv,omitempty"`
// +kubebuilder:validation:Optional
ImageBuilderContainerResources corev1.ResourceRequirements `json:"imageBuilderContainerResources,omitempty"`
ImageBuilderContainerResources *corev1.ResourceRequirements `json:"imageBuilderContainerResources,omitempty"`

// +kubebuilder:validation:Optional
DockerConfigJSONSecretName string `json:"dockerConfigJsonSecretName,omitempty"`

// +kubebuilder:validation:Optional
OCIRegistryInsecure *bool `json:"ociRegistryInsecure,omitempty"`

// +kubebuilder:validation:Optional
DownloaderContainerEnvFrom []corev1.EnvFromSource `json:"downloaderContainerEnvFrom,omitempty"`
}
Expand All @@ -89,6 +96,7 @@ type BentoRequestStatus struct {
//+kubebuilder:subresource:status
//+kubebuilder:printcolumn:name="Bento-Tag",type="string",JSONPath=".spec.bentoTag",description="Bento Tag"
//+kubebuilder:printcolumn:name="Download-Url",type="string",JSONPath=".spec.downloadUrl",description="Download URL"
//+kubebuilder:printcolumn:name="Image",type="string",JSONPath=".spec.image",description="Image"
//+kubebuilder:printcolumn:name="Image-Exists",type="string",JSONPath=".status.conditions[?(@.type=='ImageExists')].status",description="Image Exists"
//+kubebuilder:printcolumn:name="Bento-Available",type="string",JSONPath=".status.conditions[?(@.type=='BentoAvailable')].status",description="Bento Available"
//+kubebuilder:printcolumn:name="Image-Builder-Pod-Phase",type="string",JSONPath=".status.imageBuilderPodStatus.phase",description="Image Builder Pod Phase"
Expand Down
Loading