Skip to content

Commit

Permalink
Merge pull request #3 from takeshi-yoshimura/add-controller
Browse files Browse the repository at this point in the history
add a controller and custom uploader
Opened issues 4 and 5 to capture the agreed roll overs from this initial commit.
  • Loading branch information
No9 committed Aug 23, 2023
2 parents 38baa34 + 1e3bad7 commit ff09717
Show file tree
Hide file tree
Showing 56 changed files with 3,390 additions and 657 deletions.
136 changes: 136 additions & 0 deletions .github/workflows/build_push_controller.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
name: Build and push images

on:
push:
branches:
- master
paths:
- api/**
- cmd/**
- controllers/**
- ./main.go
- ./go.mod
- ./go.sum
- config/**
- ./Dockerfile
- ./Makefile
workflow_dispatch:

env:
VERSION: '0.0.1'
IMAGE_REGISTRY: ghcr.io/${{ github.repository_owner }}

jobs:
build-push-bundle:
runs-on: ubuntu-latest
needs: build-push-controller
env:
IMAGE_NAME: ghcr.io/${{ github.repository }}/core-dump-operator
BUNDLE_IMAGE_NAME: ghcr.io/${{ github.repository }}/core-dump-operator-bundle
CHANNELS: stable
DEFAULT_CHANNEL: stable
steps:
- uses: actions/checkout@v2
- uses: actions/setup-go@v2
with:
go-version: '1.19.2'
- name: set ARCH and OD
run: |
echo "ARCH=$(case $(uname -m) in x86_64) echo -n amd64 ;; aarch64) echo -n arm64 ;; *) echo -n $(uname -m) ;; esac)" >> $GITHUB_ENV
echo "OS=$(uname | awk '{print tolower($0)}')" >> $GITHUB_ENV
echo "OPERATOR_SDK_DL_URL=https://github.com/operator-framework/operator-sdk/releases/download/v1.31.0" >> $GITHUB_ENV
- name: download operator-sdk
run: curl -LO ${{ env.OPERATOR_SDK_DL_URL }}/operator-sdk_${{ env.OS }}_${{ env.ARCH }}
- name: move operator-sdk to binary path
run: chmod +x operator-sdk_${{ env.OS }}_${{ env.ARCH }} && sudo mv operator-sdk_${{ env.OS }}_${{ env.ARCH }} /usr/local/bin/operator-sdk
- name: Tidy
run: |
go mod tidy
- name: Make bundle
run: make bundle IMG=${{ env.IMAGE_NAME }}:v${{ env.VERSION }}
- name: Set up Docker
uses: docker/setup-buildx-action@v1
- name: Login to Docker
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ secrets.GH_USERNAME }}
password: ${{ secrets.GH_TOKEN }}
- name: Build and push bundle
uses: docker/build-push-action@v2
with:
context: .
push: true
tags: |
${{ env.BUNDLE_IMAGE_NAME }}:latest
${{ env.BUNDLE_IMAGE_NAME }}:v${{ env.VERSION }}
file: ./bundle.Dockerfile

build-push-controller:
runs-on: ubuntu-latest
env:
IMAGE_NAME: ghcr.io/${{ github.repository }}/core-dump-operator
steps:
- uses: actions/checkout@v2
- uses: actions/setup-go@v2
with:
go-version: '1.19.2'
- name: Tidy
run: |
go mod tidy
make generate fmt vet
- name: Set up Docker
uses: docker/setup-buildx-action@v1
- name: Login to Docker
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ secrets.GH_USERNAME }}
password: ${{ secrets.GH_TOKEN }}
- name: Build and push controller
uses: docker/build-push-action@v2
with:
context: .
push: true
tags: |
${{ env.IMAGE_NAME }}:${{ github.sha }}-${{ github.run_number }}
${{ env.IMAGE_NAME }}:latest
${{ env.IMAGE_NAME }}:v${{ env.VERSION }}
file: ./Dockerfile

build-push-uploader:
runs-on: ubuntu-latest
env:
IMAGE_NAME: ghcr.io/${{ github.repository }}/core-dump-uploader
CGO_ENABLED: 0
GOOS: linux
steps:
- uses: actions/checkout@v2
- uses: actions/setup-go@v2
with:
go-version: '1.19.2'
- name: Tidy
run: |
go mod tidy
- name: Set up Docker
uses: docker/setup-buildx-action@v1
- name: Login to Docker
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ secrets.GH_USERNAME }}
password: ${{ secrets.GH_TOKEN }}
- name: Build
run: |
go build -v -a -ldflags '-extldflags "-static"' -gcflags="all=-N -l" -o ./bin/core-dump-uploader ./cmd/core-dump-uploader/
cp /etc/ssl/certs/ca-certificates.crt bin/
- name: Build and push controller
uses: docker/build-push-action@v2
with:
context: ./bin/
push: true
tags: |
${{ env.IMAGE_NAME }}:${{ github.sha }}-${{ github.run_number }}
${{ env.IMAGE_NAME }}:latest
${{ env.IMAGE_NAME }}:v${{ env.VERSION }}
file: ./cmd/core-dump-uploader/Dockerfile
46 changes: 46 additions & 0 deletions .github/workflows/unittest.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: Perform unittest

on:
pull_request:
push:

jobs:
operator-test:
env:
CLUSTER_ID: default
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-go@v2
with:
go-version: '1.19.2'
- name: set ARCH and OD
run: |
echo "ARCH=$(case $(uname -m) in x86_64) echo -n amd64 ;; aarch64) echo -n arm64 ;; *) echo -n $(uname -m) ;; esac)" >> $GITHUB_ENV
echo "OS=$(uname | awk '{print tolower($0)}')" >> $GITHUB_ENV
echo "OPERATOR_SDK_DL_URL=https://github.com/operator-framework/operator-sdk/releases/download/v1.23.0" >> $GITHUB_ENV
- name: download operator-sdk
run: curl -LO ${{ env.OPERATOR_SDK_DL_URL }}/operator-sdk_${{ env.OS }}_${{ env.ARCH }}
- name: move operator-sdk to binary path
run: chmod +x operator-sdk_${{ env.OS }}_${{ env.ARCH }} && sudo mv operator-sdk_${{ env.OS }}_${{ env.ARCH }} /usr/local/bin/operator-sdk
- name: Tidy
run: |
go mod tidy
- name: Make bundle
run: make bundle
- name: Test Controller
run: make operator-test
uploader-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-go@v2
with:
go-version: '1.19.2'
- name: Tidy
run: |
go mod tidy
- name: Make generate
run: make generate
- name: Test Uploader
run: make uploader-test
30 changes: 30 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,33 @@ Cargo.lock

# These are backup files generated by rustfmt
**/*.rs.bk

# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
bin
testbin/*
Dockerfile.cross

go.sum

# Test binary, build with `go test -c`
*.test

# Output of the go coverage tool, specifically when used with LiteIDE
*-cover.out
*-cover.html

# Kubernetes Generated files - skip generated files, except for vendored files

!vendor/**/zz_generated.*

# editor and IDE paraphernalia
.vscode
.idea
*.swp
*.swo
*~
36 changes: 31 additions & 5 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,33 @@
# Build the manager binary
FROM quay.io/operator-framework/helm-operator:v1.7.2
FROM golang:1.19 as builder
ARG TARGETOS
ARG TARGETARCH

ENV HOME=/opt/helm
COPY watches.yaml ${HOME}/watches.yaml
COPY helm-charts ${HOME}/helm-charts
WORKDIR ${HOME}
WORKDIR /workspace
# Copy the Go Modules manifests
COPY go.mod go.mod
COPY go.sum go.sum
# cache deps before building and copying source so that we don't need to re-download as much
# and so that source changes don't invalidate our downloaded layer
RUN go mod download

# Copy the go source
COPY main.go main.go
COPY api/ api/
COPY controllers/ controllers/

# Build
# the GOARCH has not a default value to allow the binary be built according to the host where the command
# was called. For example, if we call make docker-build in a local env which has the Apple Silicon M1 SO
# the docker BUILDPLATFORM arg will be linux/arm64 when for Apple x86 it will be linux/amd64. Therefore,
# by leaving it empty we can ensure that the container and binary shipped on it will have the same platform.
RUN CGO_ENABLED=0 GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} go build -a -o manager main.go

# Use distroless as minimal base image to package the manager binary
# Refer to https://github.com/GoogleContainerTools/distroless for more details
FROM gcr.io/distroless/static:nonroot
WORKDIR /
COPY --from=builder /workspace/manager .
USER 65532:65532

ENTRYPOINT ["/manager"]
Loading

0 comments on commit ff09717

Please sign in to comment.