Introduce version command to Authelia to check the version
The version command displays the tag and the commit hash of the built commit along with the time when the build was done.pull/490/head
parent
55460035f7
commit
b4a8c4f0ec
12
Dockerfile
12
Dockerfile
|
@ -3,6 +3,9 @@
|
||||||
# =======================================
|
# =======================================
|
||||||
FROM golang:1.13-alpine AS builder-backend
|
FROM golang:1.13-alpine AS builder-backend
|
||||||
|
|
||||||
|
ARG BUILD_TAG
|
||||||
|
ARG BUILD_COMMIT
|
||||||
|
|
||||||
# gcc and musl-dev are required for building go-sqlite3
|
# gcc and musl-dev are required for building go-sqlite3
|
||||||
RUN apk --no-cache add gcc musl-dev
|
RUN apk --no-cache add gcc musl-dev
|
||||||
|
|
||||||
|
@ -16,6 +19,13 @@ RUN go mod download
|
||||||
COPY cmd cmd
|
COPY cmd cmd
|
||||||
COPY internal internal
|
COPY internal internal
|
||||||
|
|
||||||
|
# Set the build version and time
|
||||||
|
RUN echo "Write tag ${BUILD_TAG} and commit ${BUILD_COMMIT} in binary." && \
|
||||||
|
BUILD_TIME=`date +"%Y-%m-%d %T"` && \
|
||||||
|
sed -i "s/__BUILD_TAG__/${BUILD_TAG}/" cmd/authelia/constants.go && \
|
||||||
|
sed -i "s/__BUILD_COMMIT__/${BUILD_COMMIT}/" cmd/authelia/constants.go && \
|
||||||
|
sed -i "s/__BUILD_TIME__/${BUILD_TIME}/" cmd/authelia/constants.go
|
||||||
|
|
||||||
# CGO_ENABLED=1 is mandatory for building go-sqlite3
|
# CGO_ENABLED=1 is mandatory for building go-sqlite3
|
||||||
RUN cd cmd/authelia && GOOS=linux GOARCH=amd64 CGO_ENABLED=1 go build -tags netgo -ldflags '-w' -o authelia
|
RUN cd cmd/authelia && GOOS=linux GOARCH=amd64 CGO_ENABLED=1 go build -tags netgo -ldflags '-w' -o authelia
|
||||||
|
|
||||||
|
@ -48,4 +58,4 @@ EXPOSE 9091
|
||||||
VOLUME /etc/authelia
|
VOLUME /etc/authelia
|
||||||
VOLUME /var/lib/authelia
|
VOLUME /var/lib/authelia
|
||||||
|
|
||||||
CMD ["./authelia", "-config", "/etc/authelia/configuration.yml"]
|
CMD ["./authelia", "--config", "/etc/authelia/configuration.yml"]
|
||||||
|
|
|
@ -3,6 +3,9 @@
|
||||||
# =======================================
|
# =======================================
|
||||||
FROM arm32v7/golang:1.13-alpine AS builder-backend
|
FROM arm32v7/golang:1.13-alpine AS builder-backend
|
||||||
|
|
||||||
|
ARG BUILD_TAG
|
||||||
|
ARG BUILD_COMMIT
|
||||||
|
|
||||||
# qemu binary, gcc and musl-dev are required for building go-sqlite3
|
# qemu binary, gcc and musl-dev are required for building go-sqlite3
|
||||||
COPY ./qemu-arm-static /usr/bin/qemu-arm-static
|
COPY ./qemu-arm-static /usr/bin/qemu-arm-static
|
||||||
RUN apk --no-cache add gcc musl-dev
|
RUN apk --no-cache add gcc musl-dev
|
||||||
|
@ -17,6 +20,13 @@ RUN go mod download
|
||||||
COPY cmd cmd
|
COPY cmd cmd
|
||||||
COPY internal internal
|
COPY internal internal
|
||||||
|
|
||||||
|
# Set the build version and time
|
||||||
|
RUN echo "Write tag ${BUILD_TAG} and commit ${BUILD_COMMIT} in binary." && \
|
||||||
|
BUILD_TIME=`date +"%Y-%m-%d %T"` && \
|
||||||
|
sed -i "s/__BUILD_TAG__/${BUILD_TAG}/" cmd/authelia/constants.go && \
|
||||||
|
sed -i "s/__BUILD_COMMIT__/${BUILD_COMMIT}/" cmd/authelia/constants.go && \
|
||||||
|
sed -i "s/__BUILD_TIME__/${BUILD_TIME}/" cmd/authelia/constants.go
|
||||||
|
|
||||||
# CGO_ENABLED=1 is mandatory for building go-sqlite3
|
# CGO_ENABLED=1 is mandatory for building go-sqlite3
|
||||||
RUN cd cmd/authelia && GOOS=linux GOARCH=arm CGO_ENABLED=1 go build -tags netgo -ldflags '-w' -o authelia
|
RUN cd cmd/authelia && GOOS=linux GOARCH=arm CGO_ENABLED=1 go build -tags netgo -ldflags '-w' -o authelia
|
||||||
|
|
||||||
|
@ -52,4 +62,4 @@ EXPOSE 9091
|
||||||
VOLUME /etc/authelia
|
VOLUME /etc/authelia
|
||||||
VOLUME /var/lib/authelia
|
VOLUME /var/lib/authelia
|
||||||
|
|
||||||
CMD ["./authelia", "-config", "/etc/authelia/configuration.yml"]
|
CMD ["./authelia", "--config", "/etc/authelia/configuration.yml"]
|
||||||
|
|
|
@ -3,6 +3,9 @@
|
||||||
# =======================================
|
# =======================================
|
||||||
FROM arm64v8/golang:1.13-alpine AS builder-backend
|
FROM arm64v8/golang:1.13-alpine AS builder-backend
|
||||||
|
|
||||||
|
ARG BUILD_TAG
|
||||||
|
ARG BUILD_COMMIT
|
||||||
|
|
||||||
# qemu binary, gcc and musl-dev are required for building go-sqlite3
|
# qemu binary, gcc and musl-dev are required for building go-sqlite3
|
||||||
COPY ./qemu-aarch64-static /usr/bin/qemu-aarch64-static
|
COPY ./qemu-aarch64-static /usr/bin/qemu-aarch64-static
|
||||||
RUN apk --no-cache add gcc musl-dev
|
RUN apk --no-cache add gcc musl-dev
|
||||||
|
@ -17,6 +20,13 @@ RUN go mod download
|
||||||
COPY cmd cmd
|
COPY cmd cmd
|
||||||
COPY internal internal
|
COPY internal internal
|
||||||
|
|
||||||
|
# Set the build version and time
|
||||||
|
RUN echo "Write tag ${BUILD_TAG} and commit ${BUILD_COMMIT} in binary." && \
|
||||||
|
BUILD_TIME=`date +"%Y-%m-%d %T"` && \
|
||||||
|
sed -i "s/__BUILD_TAG__/${BUILD_TAG}/" cmd/authelia/constants.go && \
|
||||||
|
sed -i "s/__BUILD_COMMIT__/${BUILD_COMMIT}/" cmd/authelia/constants.go && \
|
||||||
|
sed -i "s/__BUILD_TIME__/${BUILD_TIME}/" cmd/authelia/constants.go
|
||||||
|
|
||||||
# CGO_ENABLED=1 is mandatory for building go-sqlite3
|
# CGO_ENABLED=1 is mandatory for building go-sqlite3
|
||||||
RUN cd cmd/authelia && GOOS=linux GOARCH=arm64 CGO_ENABLED=1 go build -tags netgo -ldflags '-w' -o authelia
|
RUN cd cmd/authelia && GOOS=linux GOARCH=arm64 CGO_ENABLED=1 go build -tags netgo -ldflags '-w' -o authelia
|
||||||
|
|
||||||
|
@ -52,4 +62,4 @@ EXPOSE 9091
|
||||||
VOLUME /etc/authelia
|
VOLUME /etc/authelia
|
||||||
VOLUME /var/lib/authelia
|
VOLUME /var/lib/authelia
|
||||||
|
|
||||||
CMD ["./authelia", "-config", "/etc/authelia/configuration.yml"]
|
CMD ["./authelia", "--config", "/etc/authelia/configuration.yml"]
|
||||||
|
|
|
@ -13,6 +13,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
var arch string
|
var arch string
|
||||||
|
|
||||||
var supportedArch = []string{"amd64", "arm32v7", "arm64v8"}
|
var supportedArch = []string{"amd64", "arm32v7", "arm64v8"}
|
||||||
var defaultArch = "amd64"
|
var defaultArch = "amd64"
|
||||||
var travisBranch = os.Getenv("TRAVIS_BRANCH")
|
var travisBranch = os.Getenv("TRAVIS_BRANCH")
|
||||||
|
@ -25,7 +26,6 @@ var tags = dockerTags.FindStringSubmatch(travisTag)
|
||||||
func init() {
|
func init() {
|
||||||
DockerBuildCmd.PersistentFlags().StringVar(&arch, "arch", defaultArch, "target architecture among: "+strings.Join(supportedArch, ", "))
|
DockerBuildCmd.PersistentFlags().StringVar(&arch, "arch", defaultArch, "target architecture among: "+strings.Join(supportedArch, ", "))
|
||||||
DockerPushCmd.PersistentFlags().StringVar(&arch, "arch", defaultArch, "target architecture among: "+strings.Join(supportedArch, ", "))
|
DockerPushCmd.PersistentFlags().StringVar(&arch, "arch", defaultArch, "target architecture among: "+strings.Join(supportedArch, ", "))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkArchIsSupported(arch string) {
|
func checkArchIsSupported(arch string) {
|
||||||
|
@ -75,7 +75,22 @@ func dockerBuildOfficialImage(arch string) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return docker.Build(IntermediateDockerImageName, dockerfile, ".")
|
gitTag := travisTag
|
||||||
|
if gitTag == "" {
|
||||||
|
// If commit is not tagged, mark the build has having unknown tag.
|
||||||
|
gitTag = "unknown"
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd := utils.Shell("git rev-parse HEAD")
|
||||||
|
cmd.Stdout = nil
|
||||||
|
cmd.Stderr = nil
|
||||||
|
commitBytes, err := cmd.Output()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
commitHash := strings.Trim(string(commitBytes), "\n")
|
||||||
|
|
||||||
|
return docker.Build(IntermediateDockerImageName, dockerfile, ".", gitTag, commitHash)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DockerBuildCmd Command for building docker image of Authelia.
|
// DockerBuildCmd Command for building docker image of Authelia.
|
||||||
|
|
|
@ -11,7 +11,7 @@ import (
|
||||||
// ServeCmd serve authelia with the provided configuration
|
// ServeCmd serve authelia with the provided configuration
|
||||||
func ServeCmd(cobraCmd *cobra.Command, args []string) {
|
func ServeCmd(cobraCmd *cobra.Command, args []string) {
|
||||||
log.Infof("Running Authelia with config %s...", args[0])
|
log.Infof("Running Authelia with config %s...", args[0])
|
||||||
cmd := utils.CommandWithStdout(OutputDir+"/authelia", "-config", args[0])
|
cmd := utils.CommandWithStdout(OutputDir+"/authelia", "--config", args[0])
|
||||||
cmd.Env = append(os.Environ(), "PUBLIC_DIR=dist/public_html")
|
cmd.Env = append(os.Environ(), "PUBLIC_DIR=dist/public_html")
|
||||||
utils.RunCommandUntilCtrlC(cmd)
|
utils.RunCommandUntilCtrlC(cmd)
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,8 +8,10 @@ import (
|
||||||
type Docker struct{}
|
type Docker struct{}
|
||||||
|
|
||||||
// Build build a docker image
|
// Build build a docker image
|
||||||
func (d *Docker) Build(tag, dockerfile, target string) error {
|
func (d *Docker) Build(tag, dockerfile, target, gitTag, gitCommit string) error {
|
||||||
return utils.CommandWithStdout("docker", "build", "-t", tag, "-f", dockerfile, target).Run()
|
return utils.CommandWithStdout(
|
||||||
|
"docker", "build", "-t", tag, "-f", dockerfile, "--build-arg",
|
||||||
|
"BUILD_TAG="+gitTag, "--build-arg", "BUILD_COMMIT="+gitCommit, target).Run()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tag tag a docker image.
|
// Tag tag a docker image.
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
var BuildTag = "__BUILD_TAG__"
|
||||||
|
var BuildCommit = "__BUILD_COMMIT__"
|
||||||
|
var BuildTime = "__BUILD_TIME__"
|
|
@ -2,7 +2,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"flag"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
|
@ -18,33 +18,24 @@ import (
|
||||||
"github.com/clems4ever/authelia/internal/storage"
|
"github.com/clems4ever/authelia/internal/storage"
|
||||||
"github.com/clems4ever/authelia/internal/utils"
|
"github.com/clems4ever/authelia/internal/utils"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
func tryExtractConfigPath() (string, error) {
|
var configPathFlag string
|
||||||
configPtr := flag.String("config", "", "The path to a configuration file.")
|
|
||||||
flag.Parse()
|
|
||||||
|
|
||||||
if *configPtr == "" {
|
func startServer() {
|
||||||
return "", errors.New("No config file path provided")
|
if configPathFlag == "" {
|
||||||
|
log.Fatal(errors.New("No config file path provided"))
|
||||||
}
|
}
|
||||||
|
|
||||||
return *configPtr, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
if os.Getenv("ENVIRONMENT") == "dev" {
|
if os.Getenv("ENVIRONMENT") == "dev" {
|
||||||
logging.Logger().Info("===> Authelia is running in development mode. <===")
|
logging.Logger().Info("===> Authelia is running in development mode. <===")
|
||||||
}
|
}
|
||||||
|
|
||||||
configPath, err := tryExtractConfigPath()
|
config, errs := configuration.Read(configPathFlag)
|
||||||
if err != nil {
|
|
||||||
logging.Logger().Error(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
config, errs := configuration.Read(configPath)
|
|
||||||
|
|
||||||
if len(errs) > 0 {
|
if len(errs) > 0 {
|
||||||
for _, err = range errs {
|
for _, err := range errs {
|
||||||
logging.Logger().Error(err)
|
logging.Logger().Error(err)
|
||||||
}
|
}
|
||||||
panic(errors.New("Some errors have been reported"))
|
panic(errors.New("Some errors have been reported"))
|
||||||
|
@ -109,3 +100,26 @@ func main() {
|
||||||
}
|
}
|
||||||
server.StartServer(*config, providers)
|
server.StartServer(*config, providers)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
rootCmd := &cobra.Command{
|
||||||
|
Use: "authelia",
|
||||||
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
|
startServer()
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
rootCmd.Flags().StringVar(&configPathFlag, "config", "", "Configuration file")
|
||||||
|
|
||||||
|
versionCmd := &cobra.Command{
|
||||||
|
Use: "version",
|
||||||
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
|
fmt.Printf("build git tag: %s\n", BuildTag)
|
||||||
|
fmt.Printf("build git commit: %s\n", BuildCommit)
|
||||||
|
fmt.Printf("build time: %s\n", BuildTime)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
rootCmd.AddCommand(versionCmd)
|
||||||
|
rootCmd.Execute()
|
||||||
|
}
|
||||||
|
|
|
@ -8,5 +8,5 @@ repository. All the details are documented there.
|
||||||
When running **Authelia**, you can specify your configuration file by passing
|
When running **Authelia**, you can specify your configuration file by passing
|
||||||
the file path as the first argument of **Authelia**.
|
the file path as the first argument of **Authelia**.
|
||||||
|
|
||||||
$ authelia -config config.custom.yml
|
$ authelia --config config.custom.yml
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ either by pulling the Docker image or building distributable version.
|
||||||
## Build and deploy the distributable version
|
## Build and deploy the distributable version
|
||||||
|
|
||||||
$ authelia-scripts build
|
$ authelia-scripts build
|
||||||
$ PUBLIC_DIR=./dist/public_html ./dist/authelia -config /path/to/your/config.yml
|
$ PUBLIC_DIR=./dist/public_html ./dist/authelia --config /path/to/your/config.yml
|
||||||
|
|
||||||
## Deploy with Docker
|
## Deploy with Docker
|
||||||
|
|
||||||
|
|
|
@ -32,11 +32,11 @@ the root of the repo.
|
||||||
|
|
||||||
# Build it if not done already
|
# Build it if not done already
|
||||||
$ authelia-scripts build
|
$ authelia-scripts build
|
||||||
$ PUBLIC_DIR=./dist/public_html authelia -config /path/to/your/config.yml
|
$ PUBLIC_DIR=./dist/public_html authelia --config /path/to/your/config.yml
|
||||||
|
|
||||||
### Deploy With Docker
|
### Deploy With Docker
|
||||||
|
|
||||||
$ docker run -v /path/to/your/config.yml:/etc/authelia/config.yml -e TZ=Europe/Paris clems4ever/$ $ authelia -config /etc/authelia/config.yml
|
$ docker run -v /path/to/your/config.yml:/etc/authelia/config.yml -e TZ=Europe/Paris clems4ever/$ $ authelia --config /etc/authelia/config.yml
|
||||||
|
|
||||||
|
|
||||||
## On top of Kubernetes
|
## On top of Kubernetes
|
||||||
|
|
|
@ -3,10 +3,10 @@
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# Build the binary
|
# Build the binary
|
||||||
go build -o /tmp/authelia/authelia-tmp cmd/authelia/main.go
|
go build -o /tmp/authelia/authelia-tmp cmd/authelia/*.go
|
||||||
|
|
||||||
while true;
|
while true;
|
||||||
do
|
do
|
||||||
/tmp/authelia/authelia-tmp -config /etc/authelia/configuration.yml
|
/tmp/authelia/authelia-tmp --config /etc/authelia/configuration.yml
|
||||||
sleep 10
|
sleep 10
|
||||||
done
|
done
|
Loading…
Reference in New Issue