B: making it work on gcp

This commit is contained in:
Preston Baxter 2023-11-19 20:51:05 -06:00
parent 36b39e78c8
commit 8b8320eeb1
13 changed files with 49 additions and 74 deletions

38
2
View File

@ -1,38 +0,0 @@
BASE_URL=us-central1-docker.pkg.dev/pbaxter-infra/capstone-repo
FRONTEND_VERSION=$(shell jq -rc ".frontend_version" versions.json)
WEBHOOK_VERSION=$(shell jq -rc ".webhook_version" versions.json)
deploy: deploy-tf deploy-ui deploy-service
deploy-tf:
cd infra; make deploy
deploy-ui: build-ui
docker push $(BASE_URL)/frontend-service:latest
deploy-service: build-service
docker push $(BASE_URL)/webhook-service:latest
build: build-ui build-service
build-ui:
docker build -f ./docker/ui.dockerfile . -t frontend-service:latest
docker build -f ./docker/ui.dockerfile . -t frontend-service:$(FRONTEND_VERSION)
docker tag frontend-service:latest $(BASE_URL)/frontend-service:latest
docker tag frontend-service:$(FRONTEND_VERSION) $(BASE_URL)/frontend-service:$(FRONTEND_VERSION)
build-service:
docker build -f ./docker/service.dockerfile . -t webhook-service:latest
docker build -f ./docker/service.dockerfile . -t webhook-service:$(WEBHOOK_VERSION)
docker tag webhook-service:latest $(BASE_URL)/webhook-service:latest
docker tag webhook-service:$(FRONTEND_VERSION) $(BASE_URL)/webhook-service:$(WEBHOOK_VERSION)
image: SHELL := /bin/bash
image:
[[ -d "/tmp/capstone" ]] || mkdir /tmp/capstone
cp -R infra/ /tmp/capstone/
cp -R service/ /tmp/capstone/
cp -R ui/ /tmp/capstone/
rm -rf /tmp/capstone/ui/templates/*_templ.go
codevis -i /tmp/capstone --whitelist-extension go,hcl,tf,templ -o ./out.png
rm -rf /tmp/capstone/*

3
docker/resolv.conf Normal file
View File

@ -0,0 +1,3 @@
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 1.1.1.1

View File

@ -1,4 +1,4 @@
from golang:1.21-alpine as builder
FROM golang:1.21-alpine AS builder
WORKDIR /build/service
@ -12,8 +12,9 @@ COPY ./service .
RUN GOEXPERIMENT=loopvar go build -o main
FROM alpine:latest
FROM amazonlinux:2023
COPY docker/resolv.conf /etc/resolv.conf
COPY --from=builder /build/service/main /bin/main
RUN mkdir -p /etc/capstone
COPY secrets/config.yaml /etc/capstone

View File

@ -28,8 +28,9 @@ RUN npm install
RUN npx tailwindcss -i static/index.css -o dist/output.css
#Final Contianer
FROM alpine:latest
FROM amazonlinux:2023
COPY docker/resolv.conf /etc/resolv.conf
COPY --from=node-builder /build/dist /bin/dist
COPY --from=builder /build/ui/main /bin/main
RUN mkdir -p /etc/capstone

View File

@ -64,19 +64,11 @@ resource "google_artifact_registry_repository" "capstone_repo" {
resource "google_cloud_run_v2_service" "webhook_service_cr" {
name = "webhook-service-cr"
location = var.project_region
launch_stage = "BETA"
template {
containers {
image = "${var.project_region}-docker.pkg.dev/${var.project_id}/${google_artifact_registry_repository.capstone_repo.name}/webhook-service:${var.webhook_service_tag}"
}
vpc_access{
network_interfaces {
network = "main"
subnetwork = "application"
}
egress = "ALL_TRAFFIC"
}
}
depends_on = [ google_project_service.run_api, google_artifact_registry_repository.capstone_repo ]
}
@ -93,19 +85,11 @@ resource "google_cloud_run_v2_service_iam_member" "webhook_service_run_all_users
resource "google_cloud_run_v2_service" "frontend_service_cr" {
name = "frontend-service-cr"
location = var.project_region
launch_stage = "BETA"
template {
containers {
image = "${var.project_region}-docker.pkg.dev/${var.project_id}/${google_artifact_registry_repository.capstone_repo.name}/frontend-service:${var.frontend_service_tag}"
}
vpc_access{
network_interfaces {
network = "main"
subnetwork = "application"
}
egress = "ALL_TRAFFIC"
}
}
depends_on = [ google_project_service.run_api, google_artifact_registry_repository.capstone_repo ]
@ -125,7 +109,7 @@ data "google_dns_managed_zone" "preston_baxter_zone" {
}
resource "google_dns_record_set" "webhook_cname" {
name = "webhook.${data.google_dns_managed_zone.preston_baxter_zone.dns_name}"
name = "capstone-webhook.${data.google_dns_managed_zone.preston_baxter_zone.dns_name}"
managed_zone = data.google_dns_managed_zone.preston_baxter_zone.name
type = "CNAME"
ttl = 300
@ -137,7 +121,7 @@ resource "google_dns_record_set" "webhook_cname" {
}
resource "google_dns_record_set" "frontend_cname" {
name = "frontend.${data.google_dns_managed_zone.preston_baxter_zone.dns_name}"
name = "capstone.${data.google_dns_managed_zone.preston_baxter_zone.dns_name}"
managed_zone = data.google_dns_managed_zone.preston_baxter_zone.name
type = "CNAME"
ttl = 300
@ -150,7 +134,7 @@ resource "google_dns_record_set" "frontend_cname" {
resource "google_cloud_run_domain_mapping" "frontend_cname_mapping" {
location = "us-central1"
name = trimsuffix("frontend.${data.google_dns_managed_zone.preston_baxter_zone.dns_name}", ".")
name = trimsuffix("capstone.${data.google_dns_managed_zone.preston_baxter_zone.dns_name}", ".")
metadata {
namespace = var.project_id
@ -163,7 +147,7 @@ resource "google_cloud_run_domain_mapping" "frontend_cname_mapping" {
resource "google_cloud_run_domain_mapping" "webhook_cname_mapping" {
location = "us-central1"
name = trimsuffix("webhook.${data.google_dns_managed_zone.preston_baxter_zone.dns_name}", ".")
name = trimsuffix("capstone-webhook.${data.google_dns_managed_zone.preston_baxter_zone.dns_name}", ".")
metadata {
namespace = var.project_id

View File

@ -10,7 +10,7 @@ require (
github.com/go-playground/assert/v2 v2.2.0
github.com/google/jsonapi v1.0.0
github.com/sirupsen/logrus v1.9.3
go.mongodb.org/mongo-driver v1.12.1
go.mongodb.org/mongo-driver v1.13.0
golang.org/x/oauth2 v0.14.0
google.golang.org/api v0.150.0
)
@ -41,6 +41,7 @@ require (
github.com/leodido/go-urn v1.2.4 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/mattn/go-isatty v0.0.19 // indirect
github.com/miekg/dns v1.1.57 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
@ -66,10 +67,12 @@ require (
golang.org/x/arch v0.3.0 // indirect
golang.org/x/crypto v0.15.0 // indirect
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect
golang.org/x/mod v0.12.0 // indirect
golang.org/x/net v0.18.0 // indirect
golang.org/x/sync v0.5.0 // indirect
golang.org/x/sys v0.14.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/tools v0.13.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect
google.golang.org/grpc v1.59.0 // indirect
@ -81,4 +84,5 @@ require (
replace git.preston-baxter.com/Preston_PLB/capstone/frontend-service => ../ui
replace golang.org/x/oauth2 => ../libs/oauth2
replace github.com/google/jsonapi => ../libs/jsonapi

View File

@ -866,6 +866,8 @@ github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
github.com/miekg/dns v1.1.57 h1:Jzi7ApEIzwEPLHWRcafCN9LZSBbqQpxjt/wpgvg7wcM=
github.com/miekg/dns v1.1.57/go.mod h1:uqRjCRUuEAA6qsOiJvDd+CFo/vW+y5WR6SNmHE55hZk=
github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY=
github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
@ -960,8 +962,8 @@ github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0=
github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA=
go.mongodb.org/mongo-driver v1.12.1 h1:nLkghSU8fQNaK7oUmDhQFsnrtcoNy7Z6LVFKsEecqgE=
go.mongodb.org/mongo-driver v1.12.1/go.mod h1:/rGBTebI3XYboVmgz+Wv3Bcbl3aD0QF9zl6kDDw18rQ=
go.mongodb.org/mongo-driver v1.13.0 h1:67DgFFjYOCMWdtTEmKFpV3ffWlFnh+CYZ8ZS/tXWUfY=
go.mongodb.org/mongo-driver v1.13.0/go.mod h1:/rGBTebI3XYboVmgz+Wv3Bcbl3aD0QF9zl6kDDw18rQ=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
@ -1057,6 +1059,8 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91
golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc=
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@ -1316,6 +1320,8 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s=
golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ=
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

View File

@ -19,7 +19,7 @@ func main() {
if port := os.Getenv("PORT"); port != "" {
addr = fmt.Sprintf("0.0.0.0:%s", port)
} else {
addr = "0.0.0.0:8008"
addr = "0.0.0.0:8080"
}
err := r.Run(addr)

View File

@ -3,12 +3,14 @@ package db
import (
"context"
"errors"
"time"
"git.preston-baxter.com/Preston_PLB/capstone/frontend-service/config"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"go.mongodb.org/mongo-driver/mongo/readpref"
)
// Interface for any object that wants to take advantage of the DB package
@ -27,13 +29,16 @@ type DB struct {
}
func NewClient(uri string) (*DB, error) {
serverAPI := options.ServerAPI(options.ServerAPIVersion1)
opts := options.Client().ApplyURI(uri).SetServerAPIOptions(serverAPI)
client, err := mongo.Connect(context.TODO(), opts)
opts := options.Client().ApplyURI(uri).SetConnectTimeout(60 * time.Second)
client, err := mongo.Connect(context.Background(), opts)
if err != nil {
return nil, err
}
if err := client.Ping(context.Background(), readpref.Primary()); err != nil {
return nil, err
}
return &DB{client: client}, nil
}

View File

@ -12,7 +12,7 @@ require (
github.com/golang-jwt/jwt/v5 v5.0.0
github.com/sirupsen/logrus v1.9.3
github.com/spf13/viper v1.17.0
go.mongodb.org/mongo-driver v1.12.1
go.mongodb.org/mongo-driver v1.13.0
golang.org/x/crypto v0.15.0
golang.org/x/oauth2 v0.14.0
google.golang.org/api v0.150.0
@ -45,6 +45,7 @@ require (
github.com/leodido/go-urn v1.2.4 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/mattn/go-isatty v0.0.19 // indirect
github.com/miekg/dns v1.1.57 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
@ -68,10 +69,12 @@ require (
go.uber.org/multierr v1.9.0 // indirect
golang.org/x/arch v0.3.0 // indirect
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect
golang.org/x/mod v0.12.0 // indirect
golang.org/x/net v0.18.0 // indirect
golang.org/x/sync v0.5.0 // indirect
golang.org/x/sys v0.14.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/tools v0.13.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect
google.golang.org/grpc v1.59.0 // indirect

View File

@ -880,6 +880,8 @@ github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
github.com/miekg/dns v1.1.57 h1:Jzi7ApEIzwEPLHWRcafCN9LZSBbqQpxjt/wpgvg7wcM=
github.com/miekg/dns v1.1.57/go.mod h1:uqRjCRUuEAA6qsOiJvDd+CFo/vW+y5WR6SNmHE55hZk=
github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY=
github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
@ -978,8 +980,8 @@ github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0=
github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA=
go.mongodb.org/mongo-driver v1.12.1 h1:nLkghSU8fQNaK7oUmDhQFsnrtcoNy7Z6LVFKsEecqgE=
go.mongodb.org/mongo-driver v1.12.1/go.mod h1:/rGBTebI3XYboVmgz+Wv3Bcbl3aD0QF9zl6kDDw18rQ=
go.mongodb.org/mongo-driver v1.13.0 h1:67DgFFjYOCMWdtTEmKFpV3ffWlFnh+CYZ8ZS/tXWUfY=
go.mongodb.org/mongo-driver v1.13.0/go.mod h1:/rGBTebI3XYboVmgz+Wv3Bcbl3aD0QF9zl6kDDw18rQ=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
@ -1076,6 +1078,8 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91
golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc=
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@ -1335,6 +1339,8 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s=
golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ=
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

View File

@ -19,7 +19,7 @@ func main() {
if port := os.Getenv("PORT"); port != "" {
addr = fmt.Sprintf("0.0.0.0:%s", port)
} else {
addr = "0.0.0.0:8008"
addr = "0.0.0.0:8080"
}
err := r.Run(addr)

View File

@ -1,4 +1,4 @@
{
"webhook_version": "0.0.5",
"frontend_version": "0.0.5"
"webhook_version": "0.0.19",
"frontend_version": "0.0.19"
}