Compare commits

...

1 Commits

Author SHA1 Message Date
Meutel f00aad15c5 Version
continuous-integration/drone/push Build is failing Details
* log on startup
* display on about page
* use compile flag
* set with git tag value
2019-09-28 17:22:33 +02:00
7 changed files with 41 additions and 17 deletions

View File

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

View File

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

View File

@ -1,11 +1,12 @@
FROM golang as builder
ARG version
WORKDIR /go/src/meutel.net/meutel/go-bouquins
COPY . .
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
# deployment image

View File

@ -15,6 +15,12 @@ Bouquins in Go
* 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
## Versionning
Build with flag to define `main.version`
go build -ldflags "-X main.version=myVersion"
## Deployment archive
tar czf ~/tmp/go-bouquins.tar.gz go-bouquins assets/ templates/

View File

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

16
main.go
View File

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

View File

@ -1,5 +1,6 @@
{{ template "header.html" . }}
<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>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>