Convert Gateway to Github Actions

Signed-off-by: Alistair Hey <alistair@heyal.co.uk>
This commit is contained in:
Alistair Hey 2020-11-14 06:25:22 +00:00 committed by Alex Ellis
parent 4ced7cacd0
commit a5583074e0
11 changed files with 180 additions and 336 deletions

127
.github/workflows/build.yml vendored Normal file
View File

@ -0,0 +1,127 @@
name: build
on:
push:
branches:
- '*'
pull_request:
branches:
- '*'
# Auth
# Watchdog containers
# Watchdog bins + shas
jobs:
# Run the CI tests
build-test:
strategy:
matrix:
go-version: [1.13.x]
os: [ubuntu-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@master
with:
fetch-depth: 1
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: ${{ matrix.go-version }}
- name: Run CI
run: make build test-ci
build-gateway:
runs-on: ubuntu-latest
strategy:
matrix:
go-version: [1.13.x]
steps:
- uses: actions/checkout@master
with:
fetch-depth: 1
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Get TAG
id: get_tag
run: echo ::set-output name=TAG::latest-dev
- name: Get Repo Owner
id: get_repo_owner
run: echo ::set-output name=repo_owner::$(echo ${{ github.event.repository.owner.login }} | tr '[:upper:]' '[:lower:]')
- name: Build Gateway
uses: docker/build-push-action@v2
with:
context: .
file: ./gateway/Dockerfile
outputs: "type=image,push=false"
platforms: linux/amd64,linux/arm/v7,linux/arm64
tags: |
ghcr.io/${{ steps.get_repo_owner.outputs.repo_owner }}/gateway:${{ steps.get_tag.outputs.TAG }}
ghcr.io/${{ steps.get_repo_owner.outputs.repo_owner }}/gateway:${{ github.sha }}
ghcr.io/${{ steps.get_repo_owner.outputs.repo_owner }}/gateway:latest
build-watchdog:
runs-on: ubuntu-latest
strategy:
matrix:
go-version: [1.13.x]
steps:
- uses: actions/checkout@master
with:
fetch-depth: 1
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Get TAG
id: get_tag
run: echo ::set-output name=TAG::latest-dev
- name: Get Repo Owner
id: get_repo_owner
run: echo ::set-output name=repo_owner::$(echo ${{ github.event.repository.owner.login }} | tr '[:upper:]' '[:lower:]')
- name: Build Watchdog
uses: docker/build-push-action@v2
with:
context: .
file: ./gateway/Dockerfile
outputs: "type=image,push=false"
platforms: linux/amd64,linux/arm/v7,linux/arm64
tags: |
ghcr.io/${{ steps.get_repo_owner.outputs.repo_owner }}/gateway:${{ steps.get_tag.outputs.TAG }}
ghcr.io/${{ steps.get_repo_owner.outputs.repo_owner }}/gateway:${{ github.sha }}
ghcr.io/${{ steps.get_repo_owner.outputs.repo_owner }}/gateway:latest
build-auth-containers:
runs-on: ubuntu-latest
strategy:
matrix:
go-version: [1.13.x]
svc: [
basic-auth
]
steps:
- uses: actions/checkout@master
with:
fetch-depth: 1
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Get TAG
id: get_tag
run: echo ::set-output name=TAG::latest-dev
- name: Get Repo Owner
id: get_repo_owner
run: echo ::set-output name=repo_owner::$(echo ${{ github.event.repository.owner.login }} | tr '[:upper:]' '[:lower:]')
- name: Build ${{ matrix.svc }}
uses: docker/build-push-action@v2
with:
context: ./auth/${{ matrix.svc }}
file: ./auth/${{ matrix.svc }}/Dockerfile
outputs: "type=image,push=false"
platforms: linux/amd64,linux/arm/v7,linux/arm64
tags: |
ghcr.io/${{ steps.get_repo_owner.outputs.repo_owner }}/${{ matrix.svc }}:${{ steps.get_tag.outputs.TAG }}
ghcr.io/${{ steps.get_repo_owner.outputs.repo_owner }}/${{ matrix.svc }}:${{ github.sha }}
ghcr.io/${{ steps.get_repo_owner.outputs.repo_owner }}/${{ matrix.svc }}:latest

View File

@ -1,39 +0,0 @@
sudo: required
language: go
go:
- "1.13.x"
services:
- docker
addons:
apt:
packages:
- docker-ce
before_install:
script:
- ./build.sh
- ./contrib/ci.sh
after_success:
- if [ -z $DOCKER_NS ] ; then
export DOCKER_NS=openfaas;
fi
- if [ ! -z "$TRAVIS_TAG" ] ; then
export DOCKER_CLI_EXPERIMENTAL=enabled
export REGISTRY=docker.io;
./ci/registryLogin.sh $REGISTRY;
./ci/tagAndPush.sh "$REGISTRY" "$DOCKER_NS/gateway";
./ci/tagAndPush.sh "$REGISTRY" "$DOCKER_NS/basic-auth-plugin";
export REGISTRY=quay.io;
./ci/registryLogin.sh $REGISTRY;
./ci/tagAndPush.sh "$REGISTRY" "$DOCKER_NS/gateway";
./ci/tagAndPush.sh "$REGISTRY" "$DOCKER_NS/basic-auth-plugin";
fi

View File

@ -1,4 +1,5 @@
TAG?=latest
NS?=openfaas
.PHONY: build
build:
@ -6,24 +7,12 @@ build:
.PHONY: build-gateway
build-gateway:
(cd gateway; ./build.sh latest-dev)
(cd gateway; docker buildx build --platform linux/amd64 -t $NS/gateway:latest-dev .)
.PHONY: test-ci
test-ci:
./contrib/ci.sh
.PHONY: ci-armhf-build
ci-armhf-build:
(cd gateway; ./build.sh $(TAG) ; cd ../auth/basic-auth ; ./build.sh $(TAG))
.PHONY: ci-armhf-push
ci-armhf-push:
(cd gateway; ./push.sh $(TAG) ; cd ../auth/basic-auth ; ./push.sh $(TAG))
.PHONY: ci-arm64-build
ci-arm64-build:
(cd gateway; ./build.sh $(TAG) ; cd ../auth/basic-auth ; ./build.sh $(TAG))
.PHONY: ci-arm64-push
ci-arm64-push:
(cd gateway; ./push.sh $(TAG) ; cd ../auth/basic-auth ; ./push.sh $(TAG))
.PHONY: binaries
binaries:
echo TODO

View File

@ -1,11 +1,15 @@
FROM teamserverless/license-check:0.3.6 as license-check
FROM --platform=${BUILDPLATFORM:-linux/amd64} teamserverless/license-check:0.3.6 as license-check
FROM golang:1.13-alpine3.11 as build
FROM --platform=${BUILDPLATFORM:-linux/amd64} golang:1.13 as build
ENV GO111MODULE=off
ENV CGO_ENABLED=0
RUN apk add --no-cache curl ca-certificates
ARG TARGETPLATFORM
ARG BUILDPLATFORM
ARG TARGETOS
ARG TARGETARCH
COPY --from=license-check /license-check /usr/bin/
WORKDIR /go/src/handler
@ -13,13 +17,13 @@ COPY . .
# Run a gofmt and exclude all vendored code.
RUN license-check -path ./ --verbose=false "OpenFaaS Authors" "OpenFaaS Author(s)" \
&& test -z "$(gofmt -l $(find . -type f -name '*.go' -not -path "./vendor/*"))" \
&& CGO_ENABLED=0 GOOS=linux \
RUN license-check -path ./ --verbose=false "OpenFaaS Authors" "OpenFaaS Author(s)"
RUN CGO_ENABLED=${CGO_ENABLED} GOOS=${TARGETOS} GOARCH=${TARGETARCH } test -z "$(gofmt -l $(find . -type f -name '*.go' -not -path "./vendor/*"))"
RUN CGO_ENABLED=${CGO_ENABLED} GOOS=${TARGETOS} GOARCH=${TARGETARCH } \
go build --ldflags "-s -w" -a -installsuffix cgo -o handler . && \
go test $(go list ./... | grep -v /vendor/) -cover
FROM alpine:3.11 as ship
FROM --platform=${TARGETPLATFORM:-linux/amd64} alpine:3.12 as ship
# Add non-root user
RUN addgroup -S app && adduser -S -g app app \
&& mkdir -p /home/app \

View File

@ -1,38 +0,0 @@
FROM teamserverless/license-check:0.3.6 as license-check
FROM golang:1.13-alpine3.11 as build
ENV GO111MODULE=off
ENV CGO_ENABLED=0
RUN apk add --no-cache curl ca-certificates gcc musl-dev
COPY --from=license-check /license-check /usr/bin/
WORKDIR /go/src/handler
COPY . .
# Run a gofmt and exclude all vendored code.
RUN license-check -path ./ --verbose=false "OpenFaaS Authors" "OpenFaaS Author(s)" \
&& test -z "$(gofmt -l $(find . -type f -name '*.go' -not -path "./vendor/*"))" \
&& go test $(go list ./... | grep -v /vendor/) -cover && \
CGO_ENABLED=0 GOOS=linux go build --ldflags "-s -w" -a -installsuffix cgo -o handler .
FROM alpine:3.11
# Add non-root user
RUN addgroup -S app && adduser -S -g app app \
&& mkdir -p /home/app \
&& chown app /home/app
WORKDIR /home/app
COPY --from=build /go/src/handler/handler .
RUN chown -R app /home/app
USER app
WORKDIR /home/app
CMD ["./handler"]

View File

@ -1,8 +1,8 @@
#!/bin/bash
set -e
if [ ! -s "$TRAVIS_TAG" ] ; then
echo "This build will be published under the tag: ${TRAVIS_TAG}"
if [ ! -s "$TAG" ] ; then
echo "This build will be published under the tag: ${TAG}"
fi
(cd gateway && ./build.sh)

View File

@ -1,15 +0,0 @@
#!/bin/sh
set -e
IMAGE_REGISTRY=$1
if [ "$IMAGE_REGISTRY" = "quay.io" ] ; then
USERNAME=$QUAY_USERNAME
PASSWORD=$QUAY_PASSWORD
elif [ "$IMAGE_REGISTRY" = "docker.io" ] ; then
USERNAME=$DOCKER_USERNAME
PASSWORD=$DOCKER_PASSWORD
fi
echo "Attempting to log in to $IMAGE_REGISTRY"
echo $PASSWORD | docker login -u=$USERNAME --password-stdin $IMAGE_REGISTRY;

View File

@ -1,50 +1,55 @@
FROM teamserverless/license-check:0.3.6 as license-check
FROM --platform=${BUILDPLATFORM:-linux/amd64} teamserverless/license-check:0.3.6 as license-check
FROM golang:1.13 as build
FROM --platform=${BUILDPLATFORM:-linux/amd64} golang:1.13 as build
ENV GO111MODULE=off
ENV CGO_ENABLED=0
ARG TARGETPLATFORM
ARG BUILDPLATFORM
ARG TARGETOS
ARG TARGETARCH
ARG GIT_COMMIT_SHA
ARG GIT_COMMIT_MESSAGE
ARG VERSION='dev'
ARG ARCH="x86_64"
ARG GOOS=linux
ARG GOARM
COPY --from=license-check /license-check /usr/bin/
WORKDIR /go/src/github.com/openfaas/faas/gateway
COPY vendor vendor
COPY gateway/vendor vendor
COPY handlers handlers
COPY metrics metrics
COPY requests requests
COPY tests tests
COPY gateway/handlers handlers
COPY gateway/metrics metrics
COPY gateway/requests requests
COPY gateway/tests tests
COPY gateway/types types
COPY gateway/queue queue
COPY gateway/plugin plugin
COPY gateway/version version
COPY gateway/scaling scaling
COPY gateway/pkg pkg
COPY gateway/main.go .
COPY .git .
RUN license-check -path ./ --verbose=false "Alex Ellis" "OpenFaaS Authors" "OpenFaaS Author(s)"
COPY types types
COPY queue queue
COPY plugin plugin
COPY version version
COPY scaling scaling
COPY pkg pkg
COPY main.go .
# Run a gofmt and exclude all vendored code.
RUN license-check -path ./ --verbose=false "Alex Ellis" "OpenFaaS Authors" "OpenFaaS Author(s)" \
&& test -z "$(gofmt -l $(find . -type f -name '*.go' -not -path "./vendor/*"))" \
&& CGO_ENABLED=${CGO_ENABLED} go test $(go list ./... | grep -v integration | grep -v /vendor/ | grep -v /template/) -cover \
&& GOARM=${GOARM} CGO_ENABLED=${CGO_ENABLED} GOOS=linux go build --ldflags "-s -w \
-X github.com/openfaas/faas/gateway/version.GitCommitSHA=${GIT_COMMIT_SHA}\
-X \"github.com/openfaas/faas/gateway/version.GitCommitMessage=${GIT_COMMIT_MESSAGE}\"\
-X \"github.com/openfaas/faas/gateway/version.Version=${VERSION}\" \
-X github.com/openfaas/faas/gateway/types.Arch=${ARCH}"\
RUN test -z "$(gofmt -l $(find . -type f -name '*.go' -not -path "./vendor/*"))"
RUN CGO_ENABLED=${CGO_ENABLED} GOOS=${TARGETOS} GOARCH=${TARGETARCH} go test $(go list ./... | grep -v integration | grep -v /vendor/ | grep -v /template/) -cover
RUN GIT_COMMIT_MESSAGE=$(git log -1 --pretty=%B 2>&1 | head -n 1) \
GIT_COMMIT_SHA=$(git rev-list -1 HEAD) \
VERSION=$(git describe --all --exact-match `git rev-parse HEAD` | grep tags | sed 's/tags\///' || echo dev) \
CGO_ENABLED=${CGO_ENABLED} GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build --ldflags "-s -w \
-X github.com/openfaas/faas/gateway/version.GitCommitSHA=${GIT_COMMIT_SHA} \
-X github.com/openfaas/faas/gateway/version.GitCommitMessage=${GIT_COMMIT_MESSAGE} \
-X github.com/openfaas/faas/gateway/version.Version=${VERSION} \
-X github.com/openfaas/faas/gateway/types.Arch=${TARGETARCH}" \
-a -installsuffix cgo -o gateway .
FROM alpine:3.11
ARG ARCH="x86_64"
FROM --platform=${TARGETPLATFORM:-linux/amd64} alpine:3.12 as ship
LABEL org.label-schema.license="MIT" \
org.label-schema.vcs-url="https://github.com/openfaas/faas" \
@ -65,8 +70,8 @@ ENV http_proxy ""
ENV https_proxy ""
COPY --from=build /go/src/github.com/openfaas/faas/gateway/gateway .
COPY assets assets
RUN sed -ie s/x86_64/${ARCH}/g assets/script/funcstore.js && \
COPY gateway/assets assets
RUN sed -ie s/x86_64/${GOARCH}/g assets/script/funcstore.js && \
rm assets/script/funcstore.jse
RUN chown -R app:app ./

View File

@ -1,71 +0,0 @@
FROM teamserverless/license-check:0.3.6 as license-check
FROM golang:1.13 as build
ENV GO111MODULE=off
ENV CGO_ENABLED=0
ARG GIT_COMMIT_SHA
ARG GIT_COMMIT_MESSAGE
ARG VERSION='dev'
COPY --from=license-check /license-check /usr/bin/
WORKDIR /go/src/github.com/openfaas/faas/gateway
COPY vendor vendor
COPY handlers handlers
COPY metrics metrics
COPY requests requests
COPY tests tests
COPY types types
COPY queue queue
COPY plugin plugin
COPY version version
COPY scaling scaling
COPY pkg pkg
COPY main.go .
# Run a gofmt and exclude all vendored code.
RUN license-check -path ./ --verbose=false "Alex Ellis" "OpenFaaS Project" "OpenFaaS Authors" "OpenFaaS Author(s)" \
&& test -z "$(gofmt -l $(find . -type f -name '*.go' -not -path "./vendor/*"))" \
&& go test $(go list ./... | grep -v integration | grep -v /vendor/ | grep -v /template/) -cover \
&& CGO_ENABLED=0 GOOS=linux go build --ldflags "-s -w \
-X github.com/openfaas/faas/gateway/version.GitCommitSHA=${GIT_COMMIT_SHA}\
-X \"github.com/openfaas/faas/gateway/version.GitCommitMessage=${GIT_COMMIT_MESSAGE}\"\
-X github.com/openfaas/faas/gateway/version.Version=${VERSION}" \
-a -installsuffix cgo -o gateway .
FROM alpine:3.11
LABEL org.label-schema.license="MIT" \
org.label-schema.vcs-url="https://github.com/openfaas/faas" \
org.label-schema.vcs-type="Git" \
org.label-schema.name="openfaas/faas" \
org.label-schema.vendor="openfaas" \
org.label-schema.docker.schema-version="1.0"
RUN addgroup -S app \
&& adduser -S -g app app \
&& apk add --no-cache ca-certificates
WORKDIR /home/app
EXPOSE 8080
EXPOSE 8082
ENV http_proxy ""
ENV https_proxy ""
COPY --from=build /go/src/github.com/openfaas/faas/gateway/gateway .
COPY assets assets
RUN chown -R app:app ./
USER app
RUN sed -ie s/x86_64/arm64/g /home/app/assets/script/funcstore.js
CMD ["./gateway"]

View File

@ -1,68 +0,0 @@
FROM teamserverless/license-check:0.3.6 as license-check
FROM golang:1.13 as build
ENV GO111MODULE=off
ENV CGO_ENABLED=0
ARG GIT_COMMIT_SHA
ARG GIT_COMMIT_MESSAGE
ARG VERSION='dev'
COPY --from=license-check /license-check /usr/bin/
WORKDIR /go/src/github.com/openfaas/faas/gateway
COPY vendor vendor
COPY handlers handlers
COPY metrics metrics
COPY requests requests
COPY tests tests
COPY types types
COPY queue queue
COPY plugin plugin
COPY version version
COPY scaling scaling
COPY pkg pkg
COPY main.go .
# Run a gofmt and exclude all vendored code.
RUN license-check -path ./ --verbose=false "Alex Ellis" "OpenFaaS Project" "OpenFaaS Authors" "OpenFaaS Author(s)" \
&& test -z "$(gofmt -l $(find . -type f -name '*.go' -not -path "./vendor/*"))" \
&& go test $(go list ./... | grep -v integration | grep -v /vendor/ | grep -v /template/) -cover \
&& GOARM=7 CGO_ENABLED=0 GOOS=linux go build --ldflags "-s -w \
-X github.com/openfaas/faas/gateway/version.GitCommitSHA=${GIT_COMMIT_SHA}\
-X \"github.com/openfaas/faas/gateway/version.GitCommitMessage=${GIT_COMMIT_MESSAGE}\"\
-X github.com/openfaas/faas/gateway/version.Version=${VERSION}" \
-a -installsuffix cgo -o gateway .
FROM alpine:3.11
LABEL org.label-schema.license="MIT" \
org.label-schema.vcs-url="https://github.com/openfaas/faas" \
org.label-schema.vcs-type="Git" \
org.label-schema.name="openfaas/faas" \
org.label-schema.vendor="openfaas" \
org.label-schema.docker.schema-version="1.0"
RUN addgroup -S app \
&& adduser -S -g app app \
&& apk add --no-cache ca-certificates
WORKDIR /home/app
EXPOSE 8080
EXPOSE 8082
ENV http_proxy ""
ENV https_proxy ""
COPY --from=build /go/src/github.com/openfaas/faas/gateway/gateway .
COPY assets assets
RUN sed -ie s/x86_64/armhf/g /home/app/assets/script/funcstore.js
RUN chown -R app:app ./
USER app
CMD ["./gateway"]

View File

@ -1,50 +0,0 @@
#!/bin/sh
set -e
export dockerfile="Dockerfile"
export arch=$(uname -m)
export eTAG="latest-dev"
export GOARM=""
if [ "$arch" = "armv7l" ] ; then
dockerfile="Dockerfile"
eTAG="latest-armhf-dev"
arch="armhf"
GOARM="7"
elif [ "$arch" = "aarch64" ] ; then
arch="arm64"
dockerfile="Dockerfile"
eTAG="latest-arm64-dev"
fi
# $arch has been mutated by this point, so check for the updated values
echo "$1"
if [ "$1" ] ; then
eTAG=$1
if [ "$arch" = "armhf" ] ; then
eTAG="$1-armhf"
elif [ "$arch" = "arm64" ] ; then
eTAG="$1-arm64"
fi
fi
if [ "$2" ] ; then
NS=$2
else
NS=openfaas
fi
echo "Building $NS/gateway:$eTAG with $dockerfile for $arch"
GIT_COMMIT_MESSAGE=$(git log -1 --pretty=%B 2>&1 | head -n 1)
GIT_COMMIT_SHA=$(git rev-list -1 HEAD)
VERSION=$(git describe --all --exact-match `git rev-parse HEAD` | grep tags | sed 's/tags\///' || echo dev)
docker build --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy \
--build-arg GIT_COMMIT_MESSAGE="${GIT_COMMIT_MESSAGE}" --build-arg GIT_COMMIT_SHA="${GIT_COMMIT_SHA}" \
--build-arg VERSION="${VERSION:-dev}" \
--build-arg GOARM="${GOARM}" \
--build-arg ARCH="${arch}" \
-t $NS/gateway:$eTAG . -f $dockerfile