Version
Some checks failed
continuous-integration/drone/push Build is failing

* log on startup
* display on about page
* use compile flag
* set with git tag value
This commit is contained in:
Meutel 2019-09-28 15:09:47 +02:00
parent a5979f2a17
commit f00aad15c5
7 changed files with 41 additions and 17 deletions

View File

@ -1,10 +1,16 @@
--- ---
- hosts: docker - hosts: docker
tasks: tasks:
- name: registry login
docker_login:
username: "{{ registry_login }}"
password: "{{ registry_password }}"
- name: deploy draft - name: deploy draft
docker_container: docker_container:
name: "bouquins_draft_{{ draft_name }}" name: "bouquins_draft_{{ draft_name }}"
image: "reg.meutel.net/go-bouquins:{{ draft_name }}" image: "reg.meutel.net/go-bouquins:{{ draft_name }}"
pull: yes
state: started state: started
recreate: yes recreate: yes
labels: labels:

View File

@ -30,6 +30,7 @@ steps:
settings: settings:
registry: reg.meutel.net registry: reg.meutel.net
repo: reg.meutel.net/go-bouquins repo: reg.meutel.net/go-bouquins
build_args: "version=$DRONE_TAG"
username: username:
from_secret: registry_login from_secret: registry_login
password: password:
@ -55,6 +56,11 @@ steps:
- name: deploy-branch - name: deploy-branch
image: plugins/ansible:1 image: plugins/ansible:1
environment:
registry_login:
from_secret: registry_login
registry_password:
from_secret: registry_password
settings: settings:
playbook: .ansible/deploy-draft.yml playbook: .ansible/deploy-draft.yml
inventory: .ansible/inventory inventory: .ansible/inventory
@ -73,6 +79,6 @@ trigger:
--- ---
kind: signature kind: signature
hmac: 402ef53d245969c2df4d6ec14d51d3d9665856c8fa0ec8248755a209fb66ff36 hmac: 954a9dbf92147a4d7dce6805ef54ce3dd381450d97b8676de39bb5be51c963cf
... ...

View File

@ -1,11 +1,12 @@
FROM golang as builder FROM golang as builder
ARG version
WORKDIR /go/src/meutel.net/meutel/go-bouquins WORKDIR /go/src/meutel.net/meutel/go-bouquins
COPY . . COPY . .
RUN GO111MODULE=on go get . RUN GO111MODULE=on go get .
RUN GO111MODULE=on CGO_ENABLED=1 GOOS=linux go build -a -installsuffix cgo -o app . RUN GO111MODULE=on CGO_ENABLED=1 GOOS=linux go build -ldflags "-X main.version=$version" -a -installsuffix cgo -o app .
RUN curl -X POST -s --data-urlencode 'input@assets/css/bouquins.css' https://cssminifier.com/raw > assets/css/bouquins.min.css RUN curl -X POST -s --data-urlencode 'input@assets/css/bouquins.css' https://cssminifier.com/raw > assets/css/bouquins.min.css
# deployment image # deployment image

View File

@ -15,6 +15,12 @@ Bouquins in Go
* JS: https://www.danstools.com/javascript-minify/ * JS: https://www.danstools.com/javascript-minify/
* CSS: curl -X POST -s --data-urlencode 'input@assets/css/bouquins.css' https://cssminifier.com/raw > assets/css/bouquins.min.css * CSS: curl -X POST -s --data-urlencode 'input@assets/css/bouquins.css' https://cssminifier.com/raw > assets/css/bouquins.min.css
## Versionning
Build with flag to define `main.version`
go build -ldflags "-X main.version=myVersion"
## Deployment archive ## Deployment archive
tar czf ~/tmp/go-bouquins.tar.gz go-bouquins assets/ templates/ tar czf ~/tmp/go-bouquins.tar.gz go-bouquins assets/ templates/

View File

@ -19,9 +19,6 @@ import (
) )
const ( const (
// Version defines application version
Version = "master"
tplBooks = "book.html" tplBooks = "book.html"
tplAuthors = "author.html" tplAuthors = "author.html"
tplSeries = "series.html" tplSeries = "series.html"
@ -56,11 +53,11 @@ const (
// URLAbout url of about page // URLAbout url of about page
URLAbout = "/about/" URLAbout = "/about/"
// URLJs url of js assets // URLJs url of js assets
URLJs = "/" + Version + "/js/" URLJs = "/js/"
// URLCss url of css assets // URLCss url of css assets
URLCss = "/" + Version + "/css/" URLCss = "/css/"
// URLFonts url of fonts assets // URLFonts url of fonts assets
URLFonts = "/" + Version + "/webfonts/" URLFonts = "/webfonts/"
// URLCalibre url of calibre resources (covers, ebooks files) // URLCalibre url of calibre resources (covers, ebooks files)
URLCalibre = "/calibre/" URLCalibre = "/calibre/"
) )
@ -186,7 +183,6 @@ type SeriesFull struct {
type Model struct { type Model struct {
Title string Title string
Page string Page string
Version string
Username string Username string
} }
@ -195,7 +191,6 @@ func (app *Bouquins) NewModel(title, page string, req *http.Request) *Model {
return &Model{ return &Model{
Title: title, Title: title,
Page: page, Page: page,
Version: Version,
Username: app.Username(req), Username: app.Username(req),
} }
} }
@ -285,18 +280,21 @@ type ReqParams struct {
} }
// TemplatesFunc adds functions to templates // TemplatesFunc adds functions to templates
func TemplatesFunc(prod bool) *template.Template { func TemplatesFunc(prod bool, version string) *template.Template {
return template.New("").Funcs(template.FuncMap{ return template.New("").Funcs(template.FuncMap{
"assetUrl": func(name string, ext string) string { "assetUrl": func(name string, ext string) string {
sep := "." sep := "."
if prod { if prod {
sep = ".min." sep = ".min."
} }
return "/" + Version + "/" + ext + "/" + name + sep + ext return "/" + ext + "/" + name + sep + ext
}, },
"humanSize": func(sz int64) string { "humanSize": func(sz int64) string {
return datasize.ByteSize(sz).HumanReadable() return datasize.ByteSize(sz).HumanReadable()
}, },
"version": func() string {
return version
},
"bookCover": func(book *BookFull) string { "bookCover": func(book *BookFull) string {
fmt.Println(book.Path) fmt.Println(book.Path)
return "/calibre/" + url.PathEscape(book.Path) + "/cover.jpg" return "/calibre/" + url.PathEscape(book.Path) + "/cover.jpg"

16
main.go
View File

@ -2,11 +2,12 @@ package main
import ( import (
"database/sql" "database/sql"
"gopkg.in/yaml.v2"
"log" "log"
"net/http" "net/http"
"os" "os"
"gopkg.in/yaml.v2"
"golang.org/x/oauth2" "golang.org/x/oauth2"
"github.com/gorilla/sessions" "github.com/gorilla/sessions"
@ -15,6 +16,10 @@ import (
"meutel.net/meutel/go-bouquins/bouquins" "meutel.net/meutel/go-bouquins/bouquins"
) )
var (
version string
)
// ReadConfig loads configuration file and initialize default value // ReadConfig loads configuration file and initialize default value
func ReadConfig() (*bouquins.Conf, error) { func ReadConfig() (*bouquins.Conf, error) {
conf := new(bouquins.Conf) conf := new(bouquins.Conf)
@ -53,7 +58,7 @@ func initApp() *bouquins.Bouquins {
log.Fatalln(err) log.Fatalln(err)
} }
tpl, err := bouquins.TemplatesFunc(conf.Prod).ParseGlob("templates/*.html") tpl, err := bouquins.TemplatesFunc(conf.Prod, version).ParseGlob("templates/*.html")
if err != nil { if err != nil {
log.Fatalln(err) log.Fatalln(err)
} }
@ -86,9 +91,9 @@ func initApp() *bouquins.Bouquins {
} }
func assets(calibre string) { func assets(calibre string) {
http.Handle(bouquins.URLJs, http.StripPrefix("/"+bouquins.Version, http.FileServer(http.Dir("assets")))) http.Handle(bouquins.URLJs, http.FileServer(http.Dir("assets")))
http.Handle(bouquins.URLCss, http.StripPrefix("/"+bouquins.Version, http.FileServer(http.Dir("assets")))) http.Handle(bouquins.URLCss, http.FileServer(http.Dir("assets")))
http.Handle(bouquins.URLFonts, http.StripPrefix("/"+bouquins.Version, http.FileServer(http.Dir("assets")))) http.Handle(bouquins.URLFonts, http.FileServer(http.Dir("assets")))
} }
func handle(f func(res http.ResponseWriter, req *http.Request) error) func(res http.ResponseWriter, req *http.Request) { func handle(f func(res http.ResponseWriter, req *http.Request) error) func(res http.ResponseWriter, req *http.Request) {
@ -120,6 +125,7 @@ func router(app *bouquins.Bouquins) {
} }
func main() { func main() {
log.Println("go-bouquins", version)
app := initApp() app := initApp()
defer app.DB.Close() defer app.DB.Close()
defer app.UserDB.Close() defer app.UserDB.Close()

View File

@ -1,5 +1,6 @@
{{ template "header.html" . }} {{ template "header.html" . }}
<div class="container" id="about"> <div class="container" id="about">
<p>go-bouquins {{ version }}</p>
<p><b>bouquins</b> est une interface web pour le gestionnaire de livres numériques <a href="https://calibre-ebook.com/">calibre</a>. Cette version utilise le langage <a href="https://golang.org/">Go</a>, le framework <a href="https://getbootstrap.com/">bootstap</a> et le framework <a href="https://vuejs.org/">Vue.js</a>.</p> <p><b>bouquins</b> est une interface web pour le gestionnaire de livres numériques <a href="https://calibre-ebook.com/">calibre</a>. Cette version utilise le langage <a href="https://golang.org/">Go</a>, le framework <a href="https://getbootstrap.com/">bootstap</a> et le framework <a href="https://vuejs.org/">Vue.js</a>.</p>
<p>Ce logiciel est open-source et distribué sous <a href="https://opensource.org/licenses/BSD-3-Clause">license BSD</a>. Le code source est disponible ici: <a href="https://git.meutel.net/meutel/go-bouquins">https://git.meutel.net/meutel/go-bouquins</a>. <p>Ce logiciel est open-source et distribué sous <a href="https://opensource.org/licenses/BSD-3-Clause">license BSD</a>. Le code source est disponible ici: <a href="https://git.meutel.net/meutel/go-bouquins">https://git.meutel.net/meutel/go-bouquins</a>.
</div> </div>