8 changed files with 302 additions and 46 deletions
-
71air.toml
-
15docker-compose.yml
-
20docker/golang.Dockerfile
-
64docs/openapi.yaml
-
70src/.air.toml
-
48src/cmd/root.go
-
2src/go.mod
-
58src/views/doc.html
@ -0,0 +1,71 @@ |
|||||
|
# Config file for [Air](https://github.com/cosmtrek/air) in TOML format |
||||
|
|
||||
|
# Working directory |
||||
|
# . or absolute path, please note that the directories following must be under root. |
||||
|
root = "." |
||||
|
tmp_dir = "tmp" |
||||
|
|
||||
|
[build] |
||||
|
# Just plain old shell command. You could use `make` as well. |
||||
|
cmd = "go build -o /app/whatsapp" |
||||
|
# Binary file yields from `cmd`. |
||||
|
bin = "/app/whatsapp" |
||||
|
# Customize binary, can setup environment variables when run your app. |
||||
|
#full_bin = "APP_ENV=dev APP_USER=air /app/whatsapp" |
||||
|
# Watch these filename extensions. |
||||
|
include_ext = ["go", "tpl", "tmpl"] |
||||
|
# Ignore these filename extensions or directories. |
||||
|
exclude_dir = ["statics", "storages", "docker"] |
||||
|
# Watch these directories if you specified. |
||||
|
include_dir = [] |
||||
|
# Watch these files. |
||||
|
include_file = [] |
||||
|
# Exclude files. |
||||
|
exclude_file = [] |
||||
|
# Exclude specific regular expressions. |
||||
|
exclude_regex = ["_test\\.go"] |
||||
|
# Exclude unchanged files. |
||||
|
exclude_unchanged = true |
||||
|
# Follow symlink for directories |
||||
|
follow_symlink = true |
||||
|
# This log file places in your tmp_dir. |
||||
|
log = "air.log" |
||||
|
# Poll files for changes instead of using fsnotify. |
||||
|
poll = false |
||||
|
# Poll interval (defaults to the minimum interval of 500ms). |
||||
|
poll_interval = 500 # ms |
||||
|
# It's not necessary to trigger build each time file changes if it's too frequent. |
||||
|
delay = 0 # ms |
||||
|
# Stop running old binary when build errors occur. |
||||
|
stop_on_error = true |
||||
|
# Send Interrupt signal before killing process (windows does not support this feature) |
||||
|
send_interrupt = false |
||||
|
# Delay after sending Interrupt signal |
||||
|
kill_delay = 500 # ms |
||||
|
# Rerun binary or not |
||||
|
rerun = false |
||||
|
# Delay after each executions |
||||
|
rerun_delay = 500 |
||||
|
# Add additional arguments when running binary (bin/full_bin). Will run '/app/whatsapp hello world'. |
||||
|
args_bin = ["--os=Linux", "--debug", "true", "--basic-auth=admin:password"] |
||||
|
|
||||
|
[log] |
||||
|
# Show log time |
||||
|
time = false |
||||
|
# Only show main log (silences watcher, build, runner) |
||||
|
main_only = false |
||||
|
|
||||
|
[color] |
||||
|
# Customize each part's color. If no color found, use the raw app log. |
||||
|
main = "magenta" |
||||
|
watcher = "cyan" |
||||
|
build = "yellow" |
||||
|
runner = "green" |
||||
|
|
||||
|
[misc] |
||||
|
# Delete tmp directory on exit |
||||
|
clean_on_exit = true |
||||
|
|
||||
|
[screen] |
||||
|
clear_on_rebuild = true |
||||
|
keep_scroll = true |
||||
@ -1,23 +1,35 @@ |
|||||
############################ |
############################ |
||||
# STEP 1 build executable binary |
# STEP 1 build executable binary |
||||
############################ |
############################ |
||||
FROM golang:alpine AS builder |
|
||||
|
FROM golang:1.20.5-alpine3.17 AS builder |
||||
RUN apk update && apk add --no-cache vips-dev gcc musl-dev gcompat ffmpeg |
RUN apk update && apk add --no-cache vips-dev gcc musl-dev gcompat ffmpeg |
||||
WORKDIR /whatsapp |
WORKDIR /whatsapp |
||||
COPY ./src . |
COPY ./src . |
||||
|
|
||||
# Fetch dependencies. |
# Fetch dependencies. |
||||
RUN go mod download |
RUN go mod download |
||||
|
#RUN go mod tidy -e |
||||
# Install pkger |
# Install pkger |
||||
RUN go install github.com/markbates/pkger/cmd/pkger@latest |
RUN go install github.com/markbates/pkger/cmd/pkger@latest |
||||
# Build the binary. |
# Build the binary. |
||||
RUN pkger && go build -o /app/whatsapp |
|
||||
|
RUN pkger |
||||
|
RUN go build -o /app/whatsapp |
||||
|
|
||||
|
|
||||
|
#FROM builder AS dev |
||||
|
#RUN go install github.com/cosmtrek/air@latest |
||||
|
#RUN go mod tidy |
||||
|
#RUN go mod download |
||||
|
|
||||
|
#CMD ["air", "-c", ".air.toml"] |
||||
|
|
||||
|
|
||||
############################# |
############################# |
||||
## STEP 2 build a smaller image |
## STEP 2 build a smaller image |
||||
############################# |
############################# |
||||
FROM alpine:latest |
|
||||
RUN apk update && apk add --no-cache vips-dev ffmpeg |
|
||||
|
FROM alpine:3.17 as runtime |
||||
|
RUN apk update && apk add --no-cache vips ffmpeg |
||||
|
COPY ./docs /docs |
||||
WORKDIR /app |
WORKDIR /app |
||||
# Copy compiled from builder. |
# Copy compiled from builder. |
||||
COPY --from=builder /app/whatsapp /app/whatsapp |
COPY --from=builder /app/whatsapp /app/whatsapp |
||||
|
|||||
@ -1,5 +1,71 @@ |
|||||
root = '.' |
|
||||
|
# Config file for [Air](https://github.com/cosmtrek/air) in TOML format |
||||
|
|
||||
|
# Working directory |
||||
|
# . or absolute path, please note that the directories following must be under root. |
||||
|
root = "." |
||||
tmp_dir = "tmp" |
tmp_dir = "tmp" |
||||
|
|
||||
[build] |
[build] |
||||
exclude_dir = ["statics", "views"] |
|
||||
|
# Just plain old shell command. You could use `make` as well. |
||||
|
cmd = "go build -o /app/whatsapp" |
||||
|
# Binary file yields from `cmd`. |
||||
|
bin = "/app/whatsapp" |
||||
|
# Customize binary, can setup environment variables when run your app. |
||||
|
full_bin = "APP_ENV=dev APP_USER=air /app/whatsapp" |
||||
|
# Watch these filename extensions. |
||||
|
include_ext = ["go", "tpl", "tmpl"] |
||||
|
# Ignore these filename extensions or directories. |
||||
|
exclude_dir = ["statics", "storages", "docker"] |
||||
|
# Watch these directories if you specified. |
||||
|
include_dir = [] |
||||
|
# Watch these files. |
||||
|
include_file = [] |
||||
|
# Exclude files. |
||||
|
exclude_file = [] |
||||
|
# Exclude specific regular expressions. |
||||
|
exclude_regex = ["_test\\.go"] |
||||
|
# Exclude unchanged files. |
||||
|
exclude_unchanged = true |
||||
|
# Follow symlink for directories |
||||
|
follow_symlink = true |
||||
|
# This log file places in your tmp_dir. |
||||
|
log = "air.log" |
||||
|
# Poll files for changes instead of using fsnotify. |
||||
|
poll = false |
||||
|
# Poll interval (defaults to the minimum interval of 500ms). |
||||
|
poll_interval = 500 # ms |
||||
|
# It's not necessary to trigger build each time file changes if it's too frequent. |
||||
|
delay = 0 # ms |
||||
|
# Stop running old binary when build errors occur. |
||||
|
stop_on_error = true |
||||
|
# Send Interrupt signal before killing process (windows does not support this feature) |
||||
|
send_interrupt = false |
||||
|
# Delay after sending Interrupt signal |
||||
|
kill_delay = 500 # ms |
||||
|
# Rerun binary or not |
||||
|
rerun = false |
||||
|
# Delay after each executions |
||||
|
rerun_delay = 500 |
||||
|
# Add additional arguments when running binary (bin/full_bin). Will run '/app/whatsapp hello world'. |
||||
|
args_bin = ["--os=Linux", "--debug", "true", "--basic-auth=admin:password"] |
||||
|
|
||||
|
[log] |
||||
|
# Show log time |
||||
|
time = false |
||||
|
# Only show main log (silences watcher, build, runner) |
||||
|
main_only = false |
||||
|
|
||||
|
[color] |
||||
|
# Customize each part's color. If no color found, use the raw app log. |
||||
|
main = "magenta" |
||||
|
watcher = "cyan" |
||||
|
build = "yellow" |
||||
|
runner = "green" |
||||
|
|
||||
|
[misc] |
||||
|
# Delete tmp directory on exit |
||||
|
clean_on_exit = true |
||||
|
|
||||
|
[screen] |
||||
|
clear_on_rebuild = true |
||||
|
keep_scroll = true |
||||
@ -0,0 +1,58 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html lang="en"> |
||||
|
<head> |
||||
|
<meta charset="UTF-8"> |
||||
|
<title>Swagger UI</title> |
||||
|
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700" rel="stylesheet"> |
||||
|
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.24.2/swagger-ui.css" > |
||||
|
<style> |
||||
|
html |
||||
|
{ |
||||
|
box-sizing: border-box; |
||||
|
overflow: -moz-scrollbars-vertical; |
||||
|
overflow-y: scroll; |
||||
|
} |
||||
|
*, |
||||
|
*:before, |
||||
|
*:after |
||||
|
{ |
||||
|
box-sizing: inherit; |
||||
|
} |
||||
|
body { |
||||
|
margin:0; |
||||
|
background: #fafafa; |
||||
|
} |
||||
|
</style> |
||||
|
</head> |
||||
|
<body> |
||||
|
<div id="swagger-ui"></div> |
||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.24.2/swagger-ui-bundle.js"> </script> |
||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.24.2/swagger-ui-standalone-preset.js"> </script> |
||||
|
<script src="https://unpkg.com/vue@3"></script> |
||||
|
<script src="https://unpkg.com/axios@1.1.2/dist/axios.min.js"></script> |
||||
|
<script> |
||||
|
const http = axios.create({ |
||||
|
baseURL: {{ .AppHost }} |
||||
|
}); |
||||
|
{{ if isEnableBasicAuth .BasicAuthToken }} |
||||
|
http.defaults.headers.common['Authorization'] = {{ .BasicAuthToken }}; |
||||
|
{{ end }} |
||||
|
window.onload = function() { |
||||
|
var spec = {{ .Spec }}; |
||||
|
// Build a system |
||||
|
const ui = SwaggerUIBundle({ |
||||
|
spec: JSON.parse(spec), |
||||
|
dom_id: '#swagger-ui', |
||||
|
deepLinking: true, |
||||
|
presets: [ |
||||
|
SwaggerUIBundle.presets.apis |
||||
|
], |
||||
|
plugins: [ |
||||
|
SwaggerUIBundle.plugins.DownloadUrl |
||||
|
] |
||||
|
}) |
||||
|
window.ui = ui |
||||
|
} |
||||
|
</script> |
||||
|
</body> |
||||
|
</html> |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue