Skip to content

Commit

Permalink
Merge branch 'traefik-workshops:master' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
immanuelfodor authored Feb 26, 2024
2 parents c57c577 + 72bbf14 commit 8de1d8b
Show file tree
Hide file tree
Showing 18 changed files with 111 additions and 34 deletions.
58 changes: 58 additions & 0 deletions .github/workflows/api-server.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: 🚀 Build/Release docker api-server
on:
workflow_dispatch:
pull_request:
branches:
- master
paths:
- '.github/workflows/api-server.yaml'
- 'api-server/**'
push:
branches:
- master
paths:
- '.github/workflows/api-server.yaml'
- 'api-server/**'
tags:
- 'api-server_v[0-9]+.[0-9]+.[0-9]+'
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
env:
REGISTRY: ghcr.io
jobs:
docker-build:
permissions:
packages: write
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v4
- name: docker login
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: set up buildx
uses: docker/setup-buildx-action@v3
- name: docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: |
${{ env.REGISTRY }}/${{ github.repository_owner }}/api-server
tags: |
type=raw,value=latest,enable={{is_default_branch}}
type=match,pattern=api-server_(v\d+.\d+.\d+),group=1
type=raw,value={{branch}}-{{sha}}-{{date 'X'}},enable={{is_default_branch}}
type=ref,event=pr
- name: build docker images
uses: docker/build-push-action@v5
with:
context: "{{defaultContext}}:api-server"
file: Dockerfile
platforms: linux/amd64,linux/arm64
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
15 changes: 11 additions & 4 deletions api-server/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
# syntax=docker/dockerfile:1.2
# Alpine
# syntax=docker/dockerfile:1.6

# golang builder
FROM golang:1.21 as builder
WORKDIR /usr/local/src/
COPY . /usr/local/src/
RUN make build

# docker image
FROM alpine

RUN apk --no-cache --no-progress add ca-certificates tzdata git \
RUN apk --no-cache --no-progress add ca-certificates tzdata \
&& rm -rf /var/cache/apk/*

ARG TARGETPLATFORM
COPY ./dist/$TARGETPLATFORM/api-server /
COPY --from=builder /usr/local/src/dist/$TARGETPLATFORM/api-server /

ENTRYPOINT ["/api-server"]
EXPOSE 3000
7 changes: 7 additions & 0 deletions api-server/go.mod
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
module api-server

go 1.21

require github.com/tidwall/gjson v1.17.0

require (
github.com/tidwall/match v1.1.1 // indirect
github.com/tidwall/pretty v1.2.0 // indirect
)
6 changes: 6 additions & 0 deletions api-server/go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
github.com/tidwall/gjson v1.17.0 h1:/Jocvlh98kcTfpN2+JzGQWQcqrPQwDrVEMApx/M5ZwM=
github.com/tidwall/gjson v1.17.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
17 changes: 17 additions & 0 deletions api-server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,16 @@ package main

import (
"flag"
"fmt"
"log"
"math/rand"
"net/http"
"os"
"regexp"
"strconv"
"time"

"github.com/tidwall/gjson"
)

func main() {
Expand Down Expand Up @@ -56,6 +60,19 @@ func main() {
}
switch req.Method {
case http.MethodGet, http.MethodPut:
pattern := regexp.MustCompile(`/(\d+)`)

// Extract the integer value from the URL path
matches := pattern.FindStringSubmatch(req.URL.Path)

// If the URL path contains an integer
if len(matches) > 1 {
results := gjson.GetBytes(data, fmt.Sprintf("*.%s", matches[1]))
rw.WriteHeader(http.StatusOK)
_, _ = rw.Write([]byte(results.Raw))
return
}

rw.WriteHeader(http.StatusOK)
_, _ = rw.Write(data)
case http.MethodPost:
Expand Down
10 changes: 0 additions & 10 deletions apps/base/apps/customers/api-versioned.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,6 @@ spec:
number: 3000
openApiSpec:
path: /openapi.yaml
port:
number: 3000

---
apiVersion: hub.traefik.io/v1alpha1
Expand All @@ -49,8 +47,6 @@ spec:
number: 3000
openApiSpec:
path: /openapi.yaml
port:
number: 3000

---
apiVersion: hub.traefik.io/v1alpha1
Expand All @@ -71,8 +67,6 @@ spec:
number: 3000
openApiSpec:
path: /openapi.yaml
port:
number: 3000

---
apiVersion: hub.traefik.io/v1alpha1
Expand All @@ -98,8 +92,6 @@ spec:
number: 3000
openApiSpec:
path: /openapi.yaml
port:
number: 3000

---
apiVersion: hub.traefik.io/v1alpha1
Expand All @@ -120,8 +112,6 @@ spec:
number: 3000
openApiSpec:
path: /openapi.yaml
port:
number: 3000
cors:
allowCredentials: true
allowHeaders:
Expand Down
4 changes: 1 addition & 3 deletions apps/base/apps/customers/api.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@ spec:
service:
openApiSpec:
path: /openapi.yaml
port:
number: 3000
name: customer-app
port:
number: 3000
number: 3000
2 changes: 1 addition & 1 deletion apps/base/apps/customers/customer-v2.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ spec:
spec:
containers:
- name: api
image: mmatur/traefik-hub:kubecon
image: ghcr.io/traefik-workshops/api-server:v0.1.0
args: ["-data", "/api/api.json", "-openapi", "/public/openapi.yaml"]
imagePullPolicy: Always
volumeMounts:
Expand Down
2 changes: 1 addition & 1 deletion apps/base/apps/customers/customer-v3.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ spec:
spec:
containers:
- name: api
image: mmatur/traefik-hub:kubecon
image: ghcr.io/traefik-workshops/api-server:v0.1.0
args: ["-data", "/api/api.json", "-openapi", "/public/openapi.yaml"]
imagePullPolicy: Always
volumeMounts:
Expand Down
2 changes: 1 addition & 1 deletion apps/base/apps/customers/customer-v4.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ spec:
spec:
containers:
- name: api
image: mmatur/traefik-hub:kubecon
image: ghcr.io/traefik-workshops/api-server:v0.1.0
args: ["-data", "/api/api.json", "-openapi", "/public/openapi.yaml"]
imagePullPolicy: Always
volumeMounts:
Expand Down
2 changes: 1 addition & 1 deletion apps/base/apps/customers/customer.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ spec:
spec:
containers:
- name: api
image: mmatur/traefik-hub:kubecon
image: ghcr.io/traefik-workshops/api-server:v0.1.0
args: ["-data", "/api/api.json", "-openapi", "/public/openapi.yaml", "-errorrate", "2"]
imagePullPolicy: Always
volumeMounts:
Expand Down
2 changes: 0 additions & 2 deletions apps/base/apps/employee/api.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@ spec:
service:
openApiSpec:
path: /openapi.yaml
port:
number: 3000
name: employee-app
port:
number: 3000
6 changes: 3 additions & 3 deletions apps/base/apps/employee/employee.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ spec:
spec:
containers:
- name: api
image: mmatur/traefik-hub:kubecon
image: ghcr.io/traefik-workshops/api-server:v0.1.0
args: ["-data", "/api/api.json", "-openapi", "/public/openapi.yaml", "-errorrate", "2"]
imagePullPolicy: Always
volumeMounts:
Expand Down Expand Up @@ -83,7 +83,7 @@ spec:
spec:
containers:
- name: api
image: mmatur/traefik-hub:kubecon
image: ghcr.io/traefik-workshops/api-server:v0.1.0
args: ["-data", "/api/api.json", "-openapi", "/public/openapi.yaml", "-errorrate", "40"]
imagePullPolicy: Always
volumeMounts:
Expand Down Expand Up @@ -133,7 +133,7 @@ spec:
spec:
containers:
- name: api
image: mmatur/traefik-hub:kubecon
image: ghcr.io/traefik-workshops/api-server:v0.1.0
args: ["-data", "/api/api.json", "-openapi", "/public/openapi.yaml", "-latency", "400ms"]
imagePullPolicy: Always
volumeMounts:
Expand Down
2 changes: 0 additions & 2 deletions apps/base/apps/flight/api.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@ spec:
service:
openApiSpec:
path: /openapi.yaml
port:
number: 3000
name: flight-app
port:
number: 3000
2 changes: 1 addition & 1 deletion apps/base/apps/flight/flight.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ spec:
spec:
containers:
- name: api
image: mmatur/traefik-hub:kubecon
image: ghcr.io/traefik-workshops/api-server:v0.1.0
args: ["-data", "/api/api.json", "-openapi", "/public/openapi.yaml", "-errorrate", "2"]
imagePullPolicy: Always
volumeMounts:
Expand Down
2 changes: 1 addition & 1 deletion apps/base/apps/flight/spec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ data:
/flights:
get:
summary: Retrieve flights
operationId: gettFlights
operationId: getFlights
tags:
- flights
parameters:
Expand Down
4 changes: 1 addition & 3 deletions apps/base/apps/ticket/api.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@ spec:
service:
openApiSpec:
path: /openapi.yaml
port:
number: 3000
name: ticket-app
port:
number: 3000
number: 3000
2 changes: 1 addition & 1 deletion apps/base/apps/ticket/ticket.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ spec:
spec:
containers:
- name: api
image: mmatur/traefik-hub:kubecon
image: ghcr.io/traefik-workshops/api-server:v0.1.0
args: ["-data", "/api/api.json", "-openapi", "/public/openapi.yaml", "-errorrate", "1"]
imagePullPolicy: Always
volumeMounts:
Expand Down

0 comments on commit 8de1d8b

Please sign in to comment.