Remove Travis and promote Buildkite (#545)
* Remove Travis and promote Buildkite * Add Docker Size badge to README.md * Call MicroBadger webhook to update metadata for shields Add updateMicroBadger function and refactor publishDockerReadme to be called explicitly instead of on every deployManifest call.pull/553/head
parent
5914f96de4
commit
9b8be0fef0
|
@ -24,28 +24,28 @@ steps:
|
||||||
- "build"
|
- "build"
|
||||||
key: "build-docker"
|
key: "build-docker"
|
||||||
|
|
||||||
# - wait:
|
- wait:
|
||||||
# if: build.branch == "master" || build.branch =~ /^v/
|
if: build.branch == "master" || build.branch =~ /^v/
|
||||||
#
|
|
||||||
# - label: ":docker: Image Deployments"
|
- label: ":docker: Image Deployments"
|
||||||
# command: ".buildkite/steps/deployimages.sh | buildkite-agent pipeline upload"
|
command: ".buildkite/steps/deployimages.sh | buildkite-agent pipeline upload"
|
||||||
# branches: "master v*"
|
branches: "master v*"
|
||||||
# depends_on:
|
depends_on:
|
||||||
# - "test"
|
- "test"
|
||||||
# - "build-docker"
|
- "build-docker"
|
||||||
#
|
|
||||||
# - wait:
|
- wait:
|
||||||
# if: build.branch == "master" || build.branch =~ /^v/
|
if: build.branch == "master" || build.branch =~ /^v/
|
||||||
#
|
|
||||||
# - label: ":docker: Deploy Manifests"
|
- label: ":docker: Deploy Manifests"
|
||||||
# command: "authelia-scripts docker push-manifest"
|
command: "authelia-scripts docker push-manifest"
|
||||||
# branches: "master v*"
|
branches: "master v*"
|
||||||
# env:
|
env:
|
||||||
# DOCKER_CLI_EXPERIMENTAL: "enabled"
|
DOCKER_CLI_EXPERIMENTAL: "enabled"
|
||||||
#
|
|
||||||
# - label: ":github: Deploy Artifacts"
|
- label: ":github: Deploy Artifacts"
|
||||||
# command: ".buildkite/steps/ghartifacts.sh"
|
command: ".buildkite/steps/ghartifacts.sh"
|
||||||
# agents:
|
agents:
|
||||||
# upload: "fast"
|
upload: "fast"
|
||||||
# depends_on: "build-docker"
|
depends_on: "build-docker"
|
||||||
# if: build.tag != null
|
if: build.tag != null
|
133
.travis.yml
133
.travis.yml
|
@ -1,133 +0,0 @@
|
||||||
language: go
|
|
||||||
|
|
||||||
required: sudo
|
|
||||||
|
|
||||||
go:
|
|
||||||
- "1.13"
|
|
||||||
|
|
||||||
services:
|
|
||||||
- docker
|
|
||||||
|
|
||||||
addons:
|
|
||||||
chrome: stable
|
|
||||||
apt:
|
|
||||||
sources:
|
|
||||||
- google-chrome
|
|
||||||
packages:
|
|
||||||
- google-chrome-stable
|
|
||||||
|
|
||||||
install:
|
|
||||||
- export PATH=$PATH:./cmd/authelia-scripts/:/tmp
|
|
||||||
- source bootstrap.sh
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
include:
|
|
||||||
- stage: build & test
|
|
||||||
before_script:
|
|
||||||
- curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
|
|
||||||
- nvm install v12 && nvm use v12
|
|
||||||
- go mod download
|
|
||||||
script:
|
|
||||||
- authelia-scripts --log-level debug ci
|
|
||||||
|
|
||||||
# Run all suites in a dedicated container
|
|
||||||
- &e2e-test
|
|
||||||
stage: end-to-end suite tests
|
|
||||||
env:
|
|
||||||
- SUITE_NAME=BypassAll
|
|
||||||
before_script:
|
|
||||||
# Install chrome driver
|
|
||||||
# TODO(c.michaud): this could be done in authelia-scripts instead for devs to not do the install themselves.
|
|
||||||
# or even provide a docker image with a selenium server.
|
|
||||||
- wget -N https://chromedriver.storage.googleapis.com/78.0.3904.70/chromedriver_linux64.zip -P ~/
|
|
||||||
- unzip ~/chromedriver_linux64.zip -d ~/
|
|
||||||
- rm ~/chromedriver_linux64.zip
|
|
||||||
- sudo mv -f ~/chromedriver /usr/bin/chromedriver
|
|
||||||
- sudo chmod +x /usr/bin/chromedriver
|
|
||||||
- sudo ln -s /usr/bin/google-chrome-stable /usr/bin/chromium-browser
|
|
||||||
- go mod download
|
|
||||||
script:
|
|
||||||
# Run the suite
|
|
||||||
- authelia-scripts --log-level debug suites test $SUITE_NAME --headless
|
|
||||||
# TODO(c.michaud): check if all suites are listed based on `authelia-scripts suites list` command.
|
|
||||||
- <<: *e2e-test
|
|
||||||
env:
|
|
||||||
- SUITE_NAME=Docker
|
|
||||||
- <<: *e2e-test
|
|
||||||
env:
|
|
||||||
- SUITE_NAME=DuoPush
|
|
||||||
- <<: *e2e-test
|
|
||||||
env:
|
|
||||||
- SUITE_NAME=HAProxy
|
|
||||||
- <<: *e2e-test
|
|
||||||
env:
|
|
||||||
- SUITE_NAME=HighAvailability
|
|
||||||
- <<: *e2e-test
|
|
||||||
env:
|
|
||||||
- SUITE_NAME=Kubernetes
|
|
||||||
- <<: *e2e-test
|
|
||||||
env:
|
|
||||||
- SUITE_NAME=LDAP
|
|
||||||
- <<: *e2e-test
|
|
||||||
env:
|
|
||||||
- SUITE_NAME=Mariadb
|
|
||||||
- <<: *e2e-test
|
|
||||||
env:
|
|
||||||
- SUITE_NAME=NetworkACL
|
|
||||||
- <<: *e2e-test
|
|
||||||
env:
|
|
||||||
- SUITE_NAME=Postgres
|
|
||||||
- <<: *e2e-test
|
|
||||||
env:
|
|
||||||
- SUITE_NAME=ShortTimeouts
|
|
||||||
- <<: *e2e-test
|
|
||||||
env:
|
|
||||||
- SUITE_NAME=Standalone
|
|
||||||
- <<: *e2e-test
|
|
||||||
env:
|
|
||||||
- SUITE_NAME=Traefik
|
|
||||||
|
|
||||||
- &build-images
|
|
||||||
stage: build images
|
|
||||||
if: branch = "master" && type != "pull_request" || branch =~ /^v/
|
|
||||||
env:
|
|
||||||
- ARCH=amd64
|
|
||||||
script:
|
|
||||||
- while sleep 9m; do echo '===== Prevent build from terminating ====='; done &
|
|
||||||
- authelia-scripts docker build --arch=$ARCH
|
|
||||||
- kill %1
|
|
||||||
after_success:
|
|
||||||
- authelia-scripts docker push-image --arch=$ARCH
|
|
||||||
before_deploy:
|
|
||||||
- docker create --name authelia-binary authelia/authelia:${TRAVIS_TAG:1}-$ARCH
|
|
||||||
- docker cp authelia-binary:/usr/app/authelia ./authelia-linux-$ARCH
|
|
||||||
- docker cp authelia-binary:/usr/app/public_html ./
|
|
||||||
- tar -I 'zstdmt -T0 -12' -cf authelia-linux-$ARCH.tar.zst authelia-linux-$ARCH public_html
|
|
||||||
- sha256sum authelia-linux-$ARCH.tar.zst > authelia-linux-$ARCH.tar.zst.sha256
|
|
||||||
deploy:
|
|
||||||
provider: releases
|
|
||||||
api_key: "$GITHUB_API_KEY"
|
|
||||||
file_glob: true
|
|
||||||
file: "authelia-linux-$ARCH.tar.zst*"
|
|
||||||
skip_cleanup: true
|
|
||||||
on:
|
|
||||||
tags: true
|
|
||||||
- <<: *build-images
|
|
||||||
env:
|
|
||||||
- ARCH=arm32v7
|
|
||||||
- <<: *build-images
|
|
||||||
env:
|
|
||||||
- ARCH=arm64v8
|
|
||||||
- stage: deploy manifests
|
|
||||||
if: branch = "master" && type != "pull_request" || branch =~ /^v/
|
|
||||||
env:
|
|
||||||
- DOCKER_CLI_EXPERIMENTAL=enabled
|
|
||||||
script:
|
|
||||||
- authelia-scripts docker push-manifest
|
|
||||||
|
|
||||||
notifications:
|
|
||||||
email:
|
|
||||||
recipients:
|
|
||||||
- clement.michaud34@gmail.com
|
|
||||||
on_success: change
|
|
||||||
on_failure: always
|
|
11
README.md
11
README.md
|
@ -2,9 +2,12 @@
|
||||||
<img src="./docs/images/authelia-title.png" width="350" title="Authelia">
|
<img src="./docs/images/authelia-title.png" width="350" title="Authelia">
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
[![license](https://img.shields.io/badge/license-Apache%202.0-green.svg)][Apache 2.0]
|
[![Docker Tag](https://images.microbadger.com/badges/version/authelia/authelia.svg)](https://microbadger.com/images/authelia/authelia)
|
||||||
[![Build](https://travis-ci.org/authelia/authelia.svg?branch=master)](https://travis-ci.org/authelia/authelia)
|
[![Docker Size](https://img.shields.io/microbadger/image-size/authelia/authelia?style=flat-square&=blue&logo=docker)](https://microbadger.com/images/authelia/authelia)
|
||||||
[![Gitter](https://img.shields.io/gitter/room/badges/shields.svg)](https://gitter.im/authelia/general?utm_source=share-link&utm_medium=link&utm_campaign=share-link)
|
[![GitHub Release](https://img.shields.io/github/release/authelia/authelia.svg?style=flat-square&color=blue&logo=github&logoColor=FFFFFF)](https://github.com/authelia/authelia/releases)
|
||||||
|
[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg?style=flat-square)][Apache 2.0]
|
||||||
|
[![Build](https://img.shields.io/buildkite/d6543d3ece3433f46dbe5fd9fcfaf1f68a6dbc48eb1048bc22/master?style=flat-square&color=brightgreen)](https://buildkite.com/authelia/authelia)
|
||||||
|
[![Gitter](https://img.shields.io/gitter/room/badges/shields.svg?style=flat-square&color=brightgreen)](https://gitter.im/authelia/general?utm_source=share-link&utm_medium=link&utm_campaign=share-link)
|
||||||
|
|
||||||
**Authelia** is an open-source authentication and authorization server
|
**Authelia** is an open-source authentication and authorization server
|
||||||
providing 2-factor authentication and single sign-on (SSO) for your
|
providing 2-factor authentication and single sign-on (SSO) for your
|
||||||
|
@ -56,7 +59,7 @@ For more details about the features, follow [Features](./docs/features.md).
|
||||||
|
|
||||||
## Proxy support
|
## Proxy support
|
||||||
|
|
||||||
Authelia works in combination with [nginx] or [Traefik] and [HAProxy]. It can be deployed on bare metal with
|
Authelia works in combination with [nginx], [Traefik] or [HAProxy]. It can be deployed on bare metal with
|
||||||
Docker or directly in [Kubernetes].
|
Docker or directly in [Kubernetes].
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
|
|
|
@ -18,16 +18,12 @@ var supportedArch = []string{"amd64", "arm32v7", "arm64v8", "CI"}
|
||||||
var defaultArch = "amd64"
|
var defaultArch = "amd64"
|
||||||
var buildkite = os.Getenv("BUILDKITE")
|
var buildkite = os.Getenv("BUILDKITE")
|
||||||
var buildkiteQEMU = os.Getenv("BUILDKITE_AGENT_META_DATA_QEMU")
|
var buildkiteQEMU = os.Getenv("BUILDKITE_AGENT_META_DATA_QEMU")
|
||||||
|
var ciBranch = os.Getenv("BUILDKITE_BRANCH")
|
||||||
//TODO(nightah): Uncomment when turning off Travis
|
var ciPullRequest = os.Getenv("BUILDKITE_PULL_REQUEST")
|
||||||
//var ciBranch = os.Getenv("BUILDKITE_BRANCH")
|
var ciTag = os.Getenv("BUILDKITE_TAG")
|
||||||
//var ciPullRequest = os.Getenv("BUILDKITE_PULL_REQUEST")
|
|
||||||
//var ciTag = os.Getenv("BUILDKITE_TAG")
|
|
||||||
var dockerTags = regexp.MustCompile(`v(?P<Patch>(?P<Minor>(?P<Major>\d+)\.\d+)\.\d+.*)`)
|
var dockerTags = regexp.MustCompile(`v(?P<Patch>(?P<Minor>(?P<Major>\d+)\.\d+)\.\d+.*)`)
|
||||||
var ignoredSuffixes = regexp.MustCompile("alpha|beta")
|
var ignoredSuffixes = regexp.MustCompile("alpha|beta")
|
||||||
|
var tags = dockerTags.FindStringSubmatch(ciTag)
|
||||||
//var tags = dockerTags.FindStringSubmatch(ciTag)
|
|
||||||
//TODO(nightah): Uncomment when turning off Travis
|
|
||||||
|
|
||||||
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, ", "))
|
||||||
|
@ -50,15 +46,6 @@ func dockerBuildOfficialImage(arch string) error {
|
||||||
// Set version of QEMU
|
// Set version of QEMU
|
||||||
qemuversion := "v4.2.0-2"
|
qemuversion := "v4.2.0-2"
|
||||||
|
|
||||||
//TODO(nightah): Remove when turning off Travis
|
|
||||||
ciTag := ""
|
|
||||||
if os.Getenv("TRAVIS_TAG") != "" {
|
|
||||||
ciTag = os.Getenv("TRAVIS_TAG")
|
|
||||||
} else {
|
|
||||||
ciTag = os.Getenv("BUILDKITE_TAG")
|
|
||||||
}
|
|
||||||
//TODO(nightah): Remove when turning off Travis
|
|
||||||
|
|
||||||
// If not the default value
|
// If not the default value
|
||||||
if arch != defaultArch {
|
if arch != defaultArch {
|
||||||
dockerfile = fmt.Sprintf("%s.%s", dockerfile, arch)
|
dockerfile = fmt.Sprintf("%s.%s", dockerfile, arch)
|
||||||
|
@ -132,23 +119,23 @@ var DockerBuildCmd = &cobra.Command{
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
// DockerPushCmd Command for pushing Authelia docker image to Dockerhub
|
// DockerPushCmd Command for pushing Authelia docker image to Docker Hub
|
||||||
var DockerPushCmd = &cobra.Command{
|
var DockerPushCmd = &cobra.Command{
|
||||||
Use: "push-image",
|
Use: "push-image",
|
||||||
Short: "Publish Authelia docker image to Dockerhub",
|
Short: "Publish Authelia docker image to Docker Hub",
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
log.Infof("Pushing Docker image %s to dockerhub...", DockerImageName)
|
log.Infof("Pushing Docker image %s to Docker Hub...", DockerImageName)
|
||||||
checkArchIsSupported(arch)
|
checkArchIsSupported(arch)
|
||||||
publishDockerImage(arch)
|
publishDockerImage(arch)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
// DockerManifestCmd Command for pushing Authelia docker manifest to Dockerhub
|
// DockerManifestCmd Command for pushing Authelia docker manifest to Docker Hub
|
||||||
var DockerManifestCmd = &cobra.Command{
|
var DockerManifestCmd = &cobra.Command{
|
||||||
Use: "push-manifest",
|
Use: "push-manifest",
|
||||||
Short: "Publish Authelia docker manifest to Dockerhub",
|
Short: "Publish Authelia docker manifest to Docker Hub",
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
log.Infof("Pushing Docker manifest of %s to dockerhub...", DockerImageName)
|
log.Infof("Pushing Docker manifest of %s to Docker Hub...", DockerImageName)
|
||||||
publishDockerManifest()
|
publishDockerManifest()
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -169,18 +156,18 @@ func login(docker *Docker) {
|
||||||
log.Fatal(errors.New("DOCKER_PASSWORD is empty"))
|
log.Fatal(errors.New("DOCKER_PASSWORD is empty"))
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Infof("Login to dockerhub as %s", username)
|
log.Infof("Login to Docker Hub as %s", username)
|
||||||
err := docker.Login(username, password)
|
err := docker.Login(username, password)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Login to dockerhub failed", err)
|
log.Fatal("Login to Docker Hub failed", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func deploy(docker *Docker, tag string) {
|
func deploy(docker *Docker, tag string) {
|
||||||
imageWithTag := DockerImageName + ":" + tag
|
imageWithTag := DockerImageName + ":" + tag
|
||||||
|
|
||||||
log.Infof("Docker image %s will be deployed on Dockerhub", imageWithTag)
|
log.Infof("Docker image %s will be deployed on Docker Hub", imageWithTag)
|
||||||
|
|
||||||
if err := docker.Tag(DockerImageName, imageWithTag); err != nil {
|
if err := docker.Tag(DockerImageName, imageWithTag); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
|
@ -194,7 +181,7 @@ func deploy(docker *Docker, tag string) {
|
||||||
func deployManifest(docker *Docker, tag string, amd64tag string, arm32v7tag string, arm64v8tag string) {
|
func deployManifest(docker *Docker, tag string, amd64tag string, arm32v7tag string, arm64v8tag string) {
|
||||||
dockerImagePrefix := DockerImageName + ":"
|
dockerImagePrefix := DockerImageName + ":"
|
||||||
|
|
||||||
log.Infof("Docker manifest %s%s will be deployed on Dockerhub", dockerImagePrefix, tag)
|
log.Infof("Docker manifest %s%s will be deployed on Docker Hub", dockerImagePrefix, tag)
|
||||||
|
|
||||||
err := docker.Manifest(dockerImagePrefix+tag, dockerImagePrefix+amd64tag, dockerImagePrefix+arm32v7tag, dockerImagePrefix+arm64v8tag)
|
err := docker.Manifest(dockerImagePrefix+tag, dockerImagePrefix+amd64tag, dockerImagePrefix+arm32v7tag, dockerImagePrefix+arm64v8tag)
|
||||||
|
|
||||||
|
@ -204,45 +191,17 @@ func deployManifest(docker *Docker, tag string, amd64tag string, arm32v7tag stri
|
||||||
|
|
||||||
tags := []string{amd64tag, arm32v7tag, arm64v8tag}
|
tags := []string{amd64tag, arm32v7tag, arm64v8tag}
|
||||||
for _, t := range tags {
|
for _, t := range tags {
|
||||||
log.Infof("Docker removing tag for %s%s on Dockerhub", dockerImagePrefix, t)
|
log.Infof("Docker removing tag for %s%s on Docker Hub", dockerImagePrefix, t)
|
||||||
|
|
||||||
if err := docker.CleanTag(t); err != nil {
|
if err := docker.CleanTag(t); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Info("Docker pushing README.md to Dockerhub")
|
|
||||||
|
|
||||||
if err := docker.PublishReadme(); err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func publishDockerImage(arch string) {
|
func publishDockerImage(arch string) {
|
||||||
docker := &Docker{}
|
docker := &Docker{}
|
||||||
|
|
||||||
//TODO(nightah): Remove when turning off Travis
|
|
||||||
ciBranch := ""
|
|
||||||
if os.Getenv("TRAVIS_BRANCH") != "" {
|
|
||||||
ciBranch = os.Getenv("TRAVIS_BRANCH")
|
|
||||||
} else {
|
|
||||||
ciBranch = os.Getenv("BUILDKITE_BRANCH")
|
|
||||||
}
|
|
||||||
ciPullRequest := ""
|
|
||||||
if os.Getenv("TRAVIS_PULL_REQUEST") != "" {
|
|
||||||
ciPullRequest = os.Getenv("TRAVIS_PULL_REQUEST")
|
|
||||||
} else {
|
|
||||||
ciPullRequest = os.Getenv("BUILDKITE_PULL_REQUEST")
|
|
||||||
}
|
|
||||||
ciTag := ""
|
|
||||||
if os.Getenv("TRAVIS_TAG") != "" {
|
|
||||||
ciTag = os.Getenv("TRAVIS_TAG")
|
|
||||||
} else {
|
|
||||||
ciTag = os.Getenv("BUILDKITE_TAG")
|
|
||||||
}
|
|
||||||
tags := dockerTags.FindStringSubmatch(ciTag)
|
|
||||||
//TODO(nightah): Remove when turning off Travis
|
|
||||||
|
|
||||||
if ciBranch == "master" && ciPullRequest == "false" {
|
if ciBranch == "master" && ciPullRequest == "false" {
|
||||||
login(docker)
|
login(docker)
|
||||||
deploy(docker, "master-"+arch)
|
deploy(docker, "master-"+arch)
|
||||||
|
@ -268,42 +227,24 @@ func publishDockerImage(arch string) {
|
||||||
func publishDockerManifest() {
|
func publishDockerManifest() {
|
||||||
docker := &Docker{}
|
docker := &Docker{}
|
||||||
|
|
||||||
//TODO(nightah): Remove when turning off Travis
|
|
||||||
ciBranch := ""
|
|
||||||
if os.Getenv("TRAVIS_BRANCH") != "" {
|
|
||||||
ciBranch = os.Getenv("TRAVIS_BRANCH")
|
|
||||||
} else {
|
|
||||||
ciBranch = os.Getenv("BUILDKITE_BRANCH")
|
|
||||||
}
|
|
||||||
ciPullRequest := ""
|
|
||||||
if os.Getenv("TRAVIS_PULL_REQUEST") != "" {
|
|
||||||
ciPullRequest = os.Getenv("TRAVIS_PULL_REQUEST")
|
|
||||||
} else {
|
|
||||||
ciPullRequest = os.Getenv("BUILDKITE_PULL_REQUEST")
|
|
||||||
}
|
|
||||||
ciTag := ""
|
|
||||||
if os.Getenv("TRAVIS_TAG") != "" {
|
|
||||||
ciTag = os.Getenv("TRAVIS_TAG")
|
|
||||||
} else {
|
|
||||||
ciTag = os.Getenv("BUILDKITE_TAG")
|
|
||||||
}
|
|
||||||
tags := dockerTags.FindStringSubmatch(ciTag)
|
|
||||||
//TODO(nightah): Remove when turning off Travis
|
|
||||||
|
|
||||||
if ciBranch == "master" && ciPullRequest == "false" {
|
if ciBranch == "master" && ciPullRequest == "false" {
|
||||||
login(docker)
|
login(docker)
|
||||||
deployManifest(docker, "master", "master-amd64", "master-arm32v7", "master-arm64v8")
|
deployManifest(docker, "master", "master-amd64", "master-arm32v7", "master-arm64v8")
|
||||||
|
publishDockerReadme(docker)
|
||||||
} else if ciTag != "" {
|
} else if ciTag != "" {
|
||||||
if len(tags) == 4 {
|
if len(tags) == 4 {
|
||||||
log.Infof("Detected tags: '%s' | '%s' | '%s'", tags[1], tags[2], tags[3])
|
log.Infof("Detected tags: '%s' | '%s' | '%s'", tags[1], tags[2], tags[3])
|
||||||
|
|
||||||
login(docker)
|
login(docker)
|
||||||
deployManifest(docker, tags[1], tags[1]+"-amd64", tags[1]+"-arm32v7", tags[1]+"-arm64v8")
|
deployManifest(docker, tags[1], tags[1]+"-amd64", tags[1]+"-arm32v7", tags[1]+"-arm64v8")
|
||||||
|
publishDockerReadme(docker)
|
||||||
|
|
||||||
if !ignoredSuffixes.MatchString(ciTag) {
|
if !ignoredSuffixes.MatchString(ciTag) {
|
||||||
deployManifest(docker, tags[2], tags[2]+"-amd64", tags[2]+"-arm32v7", tags[2]+"-arm64v8")
|
deployManifest(docker, tags[2], tags[2]+"-amd64", tags[2]+"-arm32v7", tags[2]+"-arm64v8")
|
||||||
deployManifest(docker, tags[3], tags[3]+"-amd64", tags[3]+"-arm32v7", tags[3]+"-arm64v8")
|
deployManifest(docker, tags[3], tags[3]+"-amd64", tags[3]+"-arm32v7", tags[3]+"-arm64v8")
|
||||||
deployManifest(docker, "latest", "latest-amd64", "latest-arm32v7", "latest-arm64v8")
|
deployManifest(docker, "latest", "latest-amd64", "latest-arm32v7", "latest-arm64v8")
|
||||||
|
publishDockerReadme(docker)
|
||||||
|
updateMicroBadger(docker)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
log.Fatal("Docker manifest will not be published, the specified tag does not conform to the standard")
|
log.Fatal("Docker manifest will not be published, the specified tag does not conform to the standard")
|
||||||
|
@ -312,3 +253,18 @@ func publishDockerManifest() {
|
||||||
log.Info("Docker manifest will not be published")
|
log.Info("Docker manifest will not be published")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func publishDockerReadme(docker *Docker) {
|
||||||
|
log.Info("Docker pushing README.md to Docker Hub")
|
||||||
|
|
||||||
|
if err := docker.PublishReadme(); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func updateMicroBadger(docker *Docker) {
|
||||||
|
log.Info("Updating MicroBadger metadata from Docker Hub")
|
||||||
|
|
||||||
|
if err := docker.UpdateMicroBadger(); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -61,3 +61,8 @@ func (d *Docker) CleanTag(tag string) error {
|
||||||
func (d *Docker) PublishReadme() error {
|
func (d *Docker) PublishReadme() error {
|
||||||
return utils.CommandWithStdout("bash", "-c", `token=$(curl -fs --retry 3 -H "Content-Type: application/json" -X "POST" -d '{"username": "'$DOCKER_USERNAME'", "password": "'$DOCKER_PASSWORD'"}' https://hub.docker.com/v2/users/login/ | jq -r .token) && jq -n --arg msg "$(cat README.md | sed -r 's/(\<img\ src\=\")(\.\/)/\1https:\/\/github.com\/authelia\/authelia\/raw\/master\//' | sed 's/\.\//https:\/\/github.com\/authelia\/authelia\/blob\/master\//g')" '{"registry":"registry-1.docker.io","full_description": $msg }' | curl -fs --retry 3 -o /dev/null -L -X "PATCH" -H "Content-Type: application/json" -H "Authorization: JWT $token" -d @- https://hub.docker.com/v2/repositories/authelia/authelia/`).Run()
|
return utils.CommandWithStdout("bash", "-c", `token=$(curl -fs --retry 3 -H "Content-Type: application/json" -X "POST" -d '{"username": "'$DOCKER_USERNAME'", "password": "'$DOCKER_PASSWORD'"}' https://hub.docker.com/v2/users/login/ | jq -r .token) && jq -n --arg msg "$(cat README.md | sed -r 's/(\<img\ src\=\")(\.\/)/\1https:\/\/github.com\/authelia\/authelia\/raw\/master\//' | sed 's/\.\//https:\/\/github.com\/authelia\/authelia\/blob\/master\//g')" '{"registry":"registry-1.docker.io","full_description": $msg }' | curl -fs --retry 3 -o /dev/null -L -X "PATCH" -H "Content-Type: application/json" -H "Authorization: JWT $token" -d @- https://hub.docker.com/v2/repositories/authelia/authelia/`).Run()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UpdateMicroBadger updates MicroBadger metadata based on dockerhub.
|
||||||
|
func (d *Docker) UpdateMicroBadger() error {
|
||||||
|
return utils.CommandWithStdout("curl", "-fs", "--retry", "3", "-X", "POST", "https://hooks.microbadger.com/images/authelia/authelia/6b8tWohGJpS4CbbPCgUHxVe_uY4=").Run()
|
||||||
|
}
|
||||||
|
|
|
@ -51,13 +51,13 @@ Enjoy!
|
||||||
|
|
||||||
### What version of Docker and docker-compose should I use?
|
### What version of Docker and docker-compose should I use?
|
||||||
|
|
||||||
Here are the versions used for testing in Travis:
|
Here are the versions used for testing in Buildkite:
|
||||||
|
|
||||||
$ docker --version
|
$ docker --version
|
||||||
Docker version 17.03.1-ce, build c6d412e
|
Docker version 19.03.5, build 633a0ea838
|
||||||
|
|
||||||
$ docker-compose --version
|
$ docker-compose --version
|
||||||
docker-compose version 1.14.0, build c7bdf9e
|
docker-compose version 1.24.1, build unknown
|
||||||
|
|
||||||
### How am I supposed to access the subdomains of example.com?
|
### How am I supposed to access the subdomains of example.com?
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,5 @@
|
||||||
FROM golang:1.13-alpine
|
FROM golang:1.13-alpine
|
||||||
|
|
||||||
#TODO(nightah): Remove when turning off Travis
|
|
||||||
ARG TRAVIS
|
|
||||||
RUN if [ "$TRAVIS" == "true" ]; then apk --no-cache add gcc musl-dev; fi
|
|
||||||
#TODO(nightah): Remove when turning off Travis
|
|
||||||
|
|
||||||
ARG USER_ID
|
ARG USER_ID
|
||||||
ARG GROUP_ID
|
ARG GROUP_ID
|
||||||
|
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
version: "3"
|
|
||||||
services:
|
|
||||||
authelia-backend:
|
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
dockerfile: Dockerfile
|
|
||||||
environment:
|
|
||||||
- ENVIRONMENT=dev
|
|
||||||
restart: always
|
|
||||||
networks:
|
|
||||||
authelianet:
|
|
||||||
ipv4_address: 192.168.240.50
|
|
|
@ -7,7 +7,6 @@ services:
|
||||||
args:
|
args:
|
||||||
USER_ID: ${USER_ID}
|
USER_ID: ${USER_ID}
|
||||||
GROUP_ID: ${GROUP_ID}
|
GROUP_ID: ${GROUP_ID}
|
||||||
TRAVIS: ${TRAVIS}
|
|
||||||
command: /resources/entrypoint-backend.sh
|
command: /resources/entrypoint-backend.sh
|
||||||
working_dir: /app
|
working_dir: /app
|
||||||
volumes:
|
volumes:
|
||||||
|
@ -17,7 +16,6 @@ services:
|
||||||
environment:
|
environment:
|
||||||
- ENVIRONMENT=dev
|
- ENVIRONMENT=dev
|
||||||
- CI=${CI}
|
- CI=${CI}
|
||||||
- TRAVIS=${TRAVIS}
|
|
||||||
networks:
|
networks:
|
||||||
authelianet:
|
authelianet:
|
||||||
ipv4_address: 192.168.240.50
|
ipv4_address: 192.168.240.50
|
|
@ -14,6 +14,5 @@ services:
|
||||||
- "./web:/app"
|
- "./web:/app"
|
||||||
environment:
|
environment:
|
||||||
- CI=${CI}
|
- CI=${CI}
|
||||||
- TRAVIS=${TRAVIS}
|
|
||||||
networks:
|
networks:
|
||||||
- authelianet
|
- authelianet
|
|
@ -2,10 +2,10 @@
|
||||||
|
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
if [ "$CI" == "true" ] && [ "$TRAVIS" != "true" ];
|
if [ "$CI" == "true" ];
|
||||||
then
|
then
|
||||||
echo "Use CI version of Authelia frontend"
|
echo "Use CI version of Authelia frontend"
|
||||||
/resources/run-frontend.sh
|
yarn start
|
||||||
else
|
else
|
||||||
yarn install && yarn start
|
yarn install && yarn start
|
||||||
fi
|
fi
|
|
@ -2,13 +2,6 @@
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
#TODO(nightah): Remove when turning off Travis
|
|
||||||
if [ "$CI" == "true" ] && [ "$TRAVIS" == "true" ];
|
|
||||||
then
|
|
||||||
go build -o /app/dist/authelia cmd/authelia/*.go
|
|
||||||
fi
|
|
||||||
#TODO(nightah): Remove when turning off Travis
|
|
||||||
|
|
||||||
while /app/dist/authelia --config /etc/authelia/configuration.yml; [ $? -ne 0 ];
|
while /app/dist/authelia --config /etc/authelia/configuration.yml; [ $? -ne 0 ];
|
||||||
do
|
do
|
||||||
echo "Waiting on services for Authelia"
|
echo "Waiting on services for Authelia"
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
yarn start
|
|
|
@ -2,27 +2,14 @@ package suites
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
//TODO(nightah): Remove when turning off Travis
|
|
||||||
"os"
|
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
//TODO(nightah): Remove when turning off Travis
|
|
||||||
travis := os.Getenv("TRAVIS")
|
|
||||||
backend := ""
|
|
||||||
if travis == "true" {
|
|
||||||
backend = "example/compose/authelia/docker-compose.backend-dist-travis.yml"
|
|
||||||
} else {
|
|
||||||
backend = "example/compose/authelia/docker-compose.backend-dist.yml"
|
|
||||||
}
|
|
||||||
//TODO(nightah): Remove when turning off Travis
|
|
||||||
|
|
||||||
dockerEnvironment := NewDockerEnvironment([]string{
|
dockerEnvironment := NewDockerEnvironment([]string{
|
||||||
"docker-compose.yml",
|
"docker-compose.yml",
|
||||||
"internal/suites/Docker/docker-compose.yml",
|
"internal/suites/Docker/docker-compose.yml",
|
||||||
//TODO(nightah): Change to "example/compose/authelia/docker-compose.backend-dist.yml" when removing Travis
|
"example/compose/authelia/docker-compose.backend-dist.yml",
|
||||||
backend,
|
|
||||||
"example/compose/authelia/docker-compose.frontend-dist.yml",
|
"example/compose/authelia/docker-compose.frontend-dist.yml",
|
||||||
"example/compose/nginx/backend/docker-compose.yml",
|
"example/compose/nginx/backend/docker-compose.yml",
|
||||||
"example/compose/nginx/portal/docker-compose.yml",
|
"example/compose/nginx/portal/docker-compose.yml",
|
||||||
|
|
|
@ -2,8 +2,6 @@ package suites
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
//TODO(nightah): Remove when turning off Travis
|
|
||||||
"os"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/authelia/authelia/internal/utils"
|
"github.com/authelia/authelia/internal/utils"
|
||||||
|
@ -44,18 +42,9 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Debug("Building authelia:dist image...")
|
log.Debug("Building authelia:dist image...")
|
||||||
//TODO(nightah): Remove when turning off Travis
|
|
||||||
travis := os.Getenv("TRAVIS")
|
|
||||||
if travis == "true" {
|
|
||||||
if err := utils.Shell("authelia-scripts docker build").Run(); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if err := utils.Shell("authelia-scripts docker build --arch=CI").Run(); err != nil {
|
if err := utils.Shell("authelia-scripts docker build --arch=CI").Run(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
|
||||||
//TODO(nightah): Remove when turning off Travis
|
|
||||||
|
|
||||||
log.Debug("Loading images into Kubernetes container...")
|
log.Debug("Loading images into Kubernetes container...")
|
||||||
if err = loadDockerImages(); err != nil {
|
if err = loadDockerImages(); err != nil {
|
||||||
|
|
Loading…
Reference in New Issue