Merge pull request 'refactor: déplacer fichiers go source vers pkg/ et cmd/' (#217) from vlbeaudoin/refactor/standard-pkg-cmd into main
Reviewed-on: #217
15
Dockerfile
|
@ -6,15 +6,14 @@ LABEL author="Victor Lacasse-Beaudoin <vlbeaudoin@agecem.org>"
|
|||
|
||||
WORKDIR /go/src/app
|
||||
|
||||
COPY go.mod go.sum main.go client.go cmd.go config.go entity.go handler.go media.go request.go response.go routes.go ./
|
||||
COPY go.mod go.sum LICENSE ./
|
||||
ADD cmd/ cmd/
|
||||
ADD pkg/ pkg/
|
||||
ADD ui/ ui/
|
||||
|
||||
ADD public/ public/
|
||||
|
||||
ADD templates/ templates/
|
||||
|
||||
ADD version/ version/
|
||||
|
||||
RUN CGO_ENABLED=0 go build -a -o agecem-org -ldflags="-X 'git.agecem.com/agecem/agecem-org/version.version=$agecem_org_version'" .
|
||||
RUN CGO_ENABLED=0 go build -a -o agecem-org \
|
||||
-ldflags="-X 'git.agecem.com/agecem/agecem-org/pkg/agecemorg/version.version=$agecem_org_version'" \
|
||||
./cmd/agecemorg/
|
||||
|
||||
# Alpine
|
||||
|
||||
|
|
6
Makefile
|
@ -11,17 +11,17 @@ help: ## Show this help
|
|||
.PHONY: build
|
||||
build: ## Build agecem-org executable
|
||||
CGO_ENABLED=0 go build -a -o agecem-org \
|
||||
-ldflags="-X 'git.agecem.com/agecem/agecem-org/version.version=`git describe`'" .
|
||||
-ldflags="-X 'git.agecem.com/agecem/agecem-org/pkg/agecemorg/version.version=`git describe`'" ./cmd/agecemorg/
|
||||
|
||||
.PHONY: install
|
||||
install: ## Using `go install`, install the agecem-org executable at ~/go/bin/haul
|
||||
CGO_ENABLED=0 go install -a \
|
||||
-ldflags="-X 'git.agecem.com/agecem/agecem-org/version.version=`git describe`'" .
|
||||
-ldflags="-X 'git.agecem.com/agecem/agecem-org/pkg/agecemorg/version.version=`git describe`'" ./cmd/agecemorg/
|
||||
|
||||
.PHONY: run
|
||||
run: ## Run agecem-org from source with `go run`
|
||||
CGO_ENABLED=0 go run \
|
||||
-ldflags="-X 'git.agecem.com/agecem/agecem-org/version.version=`git describe`'" .
|
||||
-ldflags="-X 'git.agecem.com/agecem/agecem-org/pkg/agecemorg/version.version=`git describe`'" ./cmd/agecemorg/
|
||||
|
||||
.PHONY: build-container
|
||||
build-container: ## Build agecem-org container image
|
||||
|
|
|
@ -4,20 +4,14 @@ Copyright © 2023-2024 AGECEM
|
|||
package main
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
"text/template"
|
||||
|
||||
"codeberg.org/vlbeaudoin/serpents"
|
||||
"git.agecem.com/agecem/agecem-org/public"
|
||||
"git.agecem.com/agecem/agecem-org/templates"
|
||||
"git.agecem.com/agecem/agecem-org/version"
|
||||
"github.com/labstack/echo/v4"
|
||||
"git.agecem.com/agecem/agecem-org/v3/pkg/agecemorg"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
@ -27,7 +21,7 @@ var configCmd = &cobra.Command{
|
|||
Use: "config",
|
||||
Short: "Print the config to stdout in indented JSON format",
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
var cfg Config
|
||||
var cfg agecemorg.Config
|
||||
|
||||
if err := viper.Unmarshal(&cfg); err != nil {
|
||||
log.Fatal(err)
|
||||
|
@ -41,7 +35,7 @@ func init() {
|
|||
rootCmd.AddCommand(configCmd)
|
||||
}
|
||||
|
||||
func printConfig(config Config) error {
|
||||
func printConfig(config agecemorg.Config) error {
|
||||
buf, err := json.MarshalIndent(config, "", " ")
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -102,27 +96,17 @@ func initConfig() {
|
|||
}
|
||||
}
|
||||
|
||||
type Template struct {
|
||||
templates *template.Template
|
||||
}
|
||||
|
||||
var cfg Config
|
||||
|
||||
var (
|
||||
publicFS embed.FS
|
||||
templatesFS embed.FS
|
||||
)
|
||||
|
||||
// serverCmd represents the server command
|
||||
var serverCmd = &cobra.Command{
|
||||
Use: "server",
|
||||
Short: "Démarrer le serveur web",
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
var cfg agecemorg.Config
|
||||
if err := viper.Unmarshal(&cfg); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
mediaClient, err := NewMediaClientFromViper()
|
||||
mediaClient, err := agecemorg.NewMediaClientFromViper()
|
||||
switch err != nil {
|
||||
case true:
|
||||
log.Printf("NewMediaClientFromViper error: %s", err)
|
||||
|
@ -135,14 +119,12 @@ var serverCmd = &cobra.Command{
|
|||
}
|
||||
}
|
||||
|
||||
RunServer()
|
||||
agecemorg.RunServer(cfg)
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
rootCmd.AddCommand(serverCmd)
|
||||
publicFS = public.GetPublicFS()
|
||||
templatesFS = templates.GetTemplatesFS()
|
||||
|
||||
serpents.Int(serverCmd.Flags(),
|
||||
"server.port", "server-port", 8080,
|
||||
|
@ -212,16 +194,12 @@ func init() {
|
|||
"Password for basic authentication for /admin routes")
|
||||
}
|
||||
|
||||
func (t *Template) Render(w io.Writer, name string, data interface{}, c echo.Context) error {
|
||||
return t.templates.ExecuteTemplate(w, name, data)
|
||||
}
|
||||
|
||||
// versionCmd represents the version command
|
||||
var versionCmd = &cobra.Command{
|
||||
Use: "version",
|
||||
Short: "Print version registered at build time",
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
fmt.Println("agecem-org", version.Version())
|
||||
fmt.Println("agecem-org", agecemorg.Version())
|
||||
},
|
||||
}
|
||||
|
2
go.mod
|
@ -1,4 +1,4 @@
|
|||
module git.agecem.com/agecem/agecem-org
|
||||
module git.agecem.com/agecem/agecem-org/v3
|
||||
|
||||
go 1.23.0
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package main
|
||||
package agecemorg
|
||||
|
||||
import (
|
||||
"bytes"
|
|
@ -1,4 +1,4 @@
|
|||
package main
|
||||
package agecemorg
|
||||
|
||||
/*
|
||||
Permet de contenir la configuration obtenue par cobra/viper
|
|
@ -1,4 +1,4 @@
|
|||
package main
|
||||
package agecemorg
|
||||
|
||||
type Bucket struct {
|
||||
Name string
|
|
@ -1,4 +1,4 @@
|
|||
package main
|
||||
package agecemorg
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
@ -10,7 +10,6 @@ import (
|
|||
|
||||
"codeberg.org/vlbeaudoin/pave/v2"
|
||||
"codeberg.org/vlbeaudoin/voki/v3"
|
||||
"git.agecem.com/agecem/agecem-org/version"
|
||||
"github.com/labstack/echo/v4"
|
||||
"github.com/minio/minio-go/v7"
|
||||
)
|
||||
|
@ -550,7 +549,7 @@ func (h *V1Handler) ReadSpec(c echo.Context) error {
|
|||
return c.JSON(response.StatusCode(), response)
|
||||
}
|
||||
|
||||
response.Data.Spec = fmt.Sprintf("# pave spec for agecem-org %s\n", version.Version())
|
||||
response.Data.Spec = fmt.Sprintf("# pave spec for agecem-org %s\n", Version())
|
||||
|
||||
for _, route := range h.Pave.SortedRouteStrings() {
|
||||
response.Data.Spec = fmt.Sprintf("%s%s", response.Data.Spec, route)
|
|
@ -1,4 +1,4 @@
|
|||
package main
|
||||
package agecemorg
|
||||
|
||||
import (
|
||||
"context"
|
|
@ -3,7 +3,7 @@ File request.go contains the JSON request types for HTTP endpoints.
|
|||
|
||||
Le fichier request.go contient les types de requêtes pour les endpoints HTTP.
|
||||
*/
|
||||
package main
|
||||
package agecemorg
|
||||
|
||||
import (
|
||||
"bytes"
|
|
@ -3,7 +3,7 @@ File response.go contains the JSON and HTML response types for HTTP endpoints.
|
|||
|
||||
Le fichier response.go contient les types de réponses JSON et HTML pour les endpoints HTTP.
|
||||
*/
|
||||
package main
|
||||
package agecemorg
|
||||
|
||||
import (
|
||||
"codeberg.org/vlbeaudoin/voki/v3"
|
|
@ -1,32 +1,29 @@
|
|||
package main
|
||||
package agecemorg
|
||||
|
||||
import (
|
||||
"crypto/subtle"
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"text/template"
|
||||
|
||||
"codeberg.org/vlbeaudoin/pave/v2"
|
||||
"git.agecem.com/agecem/agecem-org/v3/ui"
|
||||
"git.agecem.com/agecem/agecem-org/v3/ui/public"
|
||||
"github.com/labstack/echo/v4"
|
||||
"github.com/labstack/echo/v4/middleware"
|
||||
)
|
||||
|
||||
func RunServer() {
|
||||
func RunServer(cfg Config) {
|
||||
e := echo.New()
|
||||
|
||||
t := &Template{
|
||||
templates: template.Must(template.ParseFS(templatesFS, "html/*.html")),
|
||||
}
|
||||
|
||||
e.Renderer = t
|
||||
e.Renderer = ui.NewRenderer()
|
||||
|
||||
e.Pre(middleware.RemoveTrailingSlash())
|
||||
|
||||
groupStatic := e.Group("/public/*")
|
||||
groupStatic.Use(middleware.StaticWithConfig(middleware.StaticConfig{
|
||||
Root: "/",
|
||||
Filesystem: http.FS(publicFS),
|
||||
Filesystem: http.FS(public.GetPublicFS()),
|
||||
//TODO
|
||||
//Browse: true,
|
||||
}))
|
|
@ -1,4 +1,4 @@
|
|||
package version
|
||||
package agecemorg
|
||||
|
||||
// Filled by build flag
|
||||
var version string
|
||||
|
@ -8,7 +8,7 @@ Version returns the application version
|
|||
|
||||
Example command to use the output of `git describe` for version number at build time:
|
||||
|
||||
$ go build -ldflags="-X 'git.agecem.com/agecem/agecem-org/version.version=`git describe`'" .
|
||||
$ go build -ldflags="-X 'git.agecem.com/agecem/agecem-org/pkg/agecemorg/version.version=`git describe`'" .
|
||||
*/
|
||||
func Version() string {
|
||||
if version == "" {
|
|
@ -1,14 +0,0 @@
|
|||
{{ define "a-propos-html" }}
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>AGECEM | À propos</title>
|
||||
{{ template "general-html" }}
|
||||
</head>
|
||||
<body>
|
||||
{{ template "header-html" }}
|
||||
<h1 class="heading1">À propos</h1>
|
||||
</body>
|
||||
</html>
|
||||
{{ end }}
|
|
@ -1,14 +0,0 @@
|
|||
{{ define "actualite-html" }}
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>AGECEM | Actualité</title>
|
||||
{{ template "general-html" }}
|
||||
</head>
|
||||
<body>
|
||||
{{ template "header-html" }}
|
||||
<h1 class="heading1">Actualité</h1>
|
||||
</body>
|
||||
</html>
|
||||
{{ end }}
|
|
@ -1,18 +0,0 @@
|
|||
/*
|
||||
Package templates contient les fichiers html à templater par l'application.
|
||||
|
||||
Le contenu sera embedded dans le fichier binaire, dans le but de bundle les
|
||||
dépendances avec l'application, simplifiant son déploiement.
|
||||
|
||||
Une copie du contenu peut être obtenue par un appel de GetTemplatesFS().
|
||||
*/
|
||||
package templates
|
||||
|
||||
import "embed"
|
||||
|
||||
//go:embed html/*.html
|
||||
var templatesFS embed.FS
|
||||
|
||||
func GetTemplatesFS() embed.FS {
|
||||
return templatesFS
|
||||
}
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 818 B After Width: | Height: | Size: 818 B |
Before Width: | Height: | Size: 965 B After Width: | Height: | Size: 965 B |
Before Width: | Height: | Size: 396 B After Width: | Height: | Size: 396 B |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |