Last active
April 2, 2019 11:44
-
-
Save fubarhouse/2b0b10472250bf25f7669cf8437da450 to your computer and use it in GitHub Desktop.
Magefile for Lagoon
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// +build mage | |
// An abstraction layer for Amazeeio's Lagoon Make process. | |
// Made to suit compatibility with v0.22.1 | |
package main | |
import ( | |
"fmt" | |
"io/ioutil" | |
"os" | |
"path/filepath" | |
"strings" | |
"github.com/magefile/mage/sh" | |
) | |
var baseImages = []string{ | |
"oc", | |
"mariadb", | |
"mariadb-drupal", | |
"mariadb-galera", | |
"mariadb-galera-drupal", | |
"postgres", | |
"postgres-ckan", | |
"postgres-drupal", | |
"oc-build-deploy-dind", | |
"commons", | |
"nginx", | |
"nginx-drupal", | |
"varnish", | |
"varnish-drupal", | |
"varnish-persistent", | |
"varnish-persistent-drupal", | |
"redis", | |
"redis-persistent", | |
"rabbitmq", | |
"rabbitmq-cluster", | |
"mongo", | |
"elasticsearch", | |
"kibana", | |
"logstash", | |
"athenapdf-service", | |
"curator", | |
"docker-host", | |
"yarn-workspace-builder", | |
} | |
var services = []string{ | |
"api", | |
"auth-server", | |
"logs2slack", | |
"logs2rocketchat", | |
"openshiftbuilddeploy", | |
"openshiftbuilddeploymonitor", | |
"openshiftjobs", | |
"openshiftjobsmonitor", | |
"openshiftmisc", | |
"openshiftremove", | |
"rest2tasks", | |
"webhook-handler", | |
"webhooks2tasks", | |
"broker", | |
"broker-single", | |
"logs-forwarder", | |
"logs-db", | |
"logs-db-ui", | |
"logs-db-curator", | |
"logs2logs-db", | |
"auto-idler", | |
"storage-calculator", | |
"api-db", | |
"drush-alias", | |
"keycloak", | |
"keycloak-db", | |
"ui", | |
"api-db-galera", | |
"keycloak-db-galera", | |
} | |
var pythonImages = []string{ | |
"python--2.7", | |
"python__3.7", | |
"python__2.7-ckan", | |
"python__2.7-ckandatapusher", | |
} | |
var phpImages = []string{ | |
"php__5.6-fpm", | |
"php__7.0-fpm", | |
"php__7.1-fpm", | |
"php__7.2-fpm", | |
"php__7.3-fpm", | |
"php__5.6-cli", | |
"php__7.0-cli", | |
"php__7.1-cli", | |
"php__7.2-cli", | |
"php__7.3-cli", | |
"php__5.6-cli-drupal", | |
"php__7.0-cli-drupal", | |
"php__7.1-cli-drupal", | |
"php__7.2-cli-drupal", | |
"php__7.3-cli-drupal", | |
} | |
var solrImages = []string{ | |
"solr__5.5", | |
"solr__6.6", | |
"solr__7.5", | |
"solr__5.5-drupal", | |
"solr__6.6-drupal", | |
"solr__7.5-drupal", | |
"solr__5.5-ckan", | |
"solr__6.6-ckan", | |
} | |
var nodeImages = []string{ | |
"node__10", | |
"node__9", | |
"node__8", | |
"node__6", | |
"node__10-builder", | |
"node__9-builder", | |
"node__8-builder", | |
"node__6-builder", | |
} | |
// Build lagoon images on the localhost. | |
func Build() error { | |
return sh.Run("make", "build") | |
} | |
// Start lagoon on the localhost via docker-compose. | |
func Run() error { | |
return sh.Run("docker-compose", "up", "-d") | |
} | |
// Terminate lagoon on the localhost via docker-compose. | |
func Stop() error { | |
return sh.Run("docker-compose", "down") | |
} | |
// Removes and cleans up file system from built lagoon images. | |
func Clean() error { | |
return sh.Run("make", "clean") | |
} | |
// Run lagoon tests on the localhost. | |
func Test() error { | |
return sh.Run("make", "tests") | |
} | |
// Push images from the localhost to MiniShift | |
func Minishift_push() error { | |
return sh.Run("make", "push-minishift") | |
} | |
// Setup Minishift Lagoon | |
func Minishift_setup() error { | |
return sh.Run("make", "openshift-lagoon-setup") | |
} | |
// Configure Lagoon Local | |
func Minishift_configure() error { | |
return sh.Run("make", "openshift/configure-lagoon-local") | |
} | |
// Setup UI for local development with docker-compose. | |
func Ui() error { | |
return sh.Run("make", "ui-development") | |
} | |
// Starts/installs minishift. | |
func Minishift() error { | |
return sh.Run("make", "minishift") | |
} | |
// Stop minishift. | |
func Minishift_stop() error { | |
return sh.Run("make", "minishift") | |
} | |
// Cleans minishift. | |
func Minishift_clean() error { | |
return sh.Run("make", "openshift/clean") | |
} | |
// Scans the file system from $PWD for any kubernetes objects files | |
func Find() error { | |
count := 0 | |
fileList := []string{} | |
err := filepath.Walk(".", func(path string, f os.FileInfo, err error) error { | |
if strings.HasSuffix(path, "yaml") || strings.HasSuffix(path, "yml") { | |
b, err := ioutil.ReadFile(path) | |
if err != nil { | |
panic(err) | |
} | |
s := string(b) | |
if strings.Contains(s, "spec:") && strings.Contains(s, "kind:") { | |
fileList = append(fileList, path) | |
count++ | |
} | |
} | |
return nil | |
}) | |
for _, file := range fileList { | |
fmt.Println(file) | |
} | |
fmt.Printf("\nFound %v Kubernetes object files\n", count) | |
return err | |
} | |
// Build process for images. | |
func build(identifier string) { | |
sepOne := strings.Split(identifier, "__") | |
sepTwo := strings.Split(identifier, "-") | |
name := strings.Replace(identifier, "--", "__", -1) | |
buildParams := []string{} | |
language := sepOne[0] | |
version := strings.Split(sepOne[len(sepOne)-1], "-")[0] | |
tag := sepTwo[len(sepTwo)-1] | |
if version == tag || strings.HasSuffix(tag, version) { | |
tag = "latest" | |
} | |
fmt.Println("Language: ", language) | |
fmt.Println("Version: ", version) | |
fmt.Println("Tag: ", tag) | |
//ddd := strings.Split(sepTwo[len(sepTwo)], "-") | |
// | |
//if len(ddd) > 0 { | |
// fmt.Println(ddd) | |
//} | |
dockerfilePath := fmt.Sprintf("images/%v/Dockerfile", name) | |
if strings.HasPrefix(identifier, "python") { | |
buildParams = []string{"build", "--quiet", "--build-arg", "LAGOON_VERSION=development", "--build-arg", "IMAGE_REPO=lagoon", "--build-arg", "PYTHON_VERSION="+version, "-t", "lagoon/python:"+tag, "-f", dockerfilePath, name} | |
} else if strings.HasPrefix(identifier, "php") { | |
buildParams = []string{"build", "--quiet", "--build-arg", "LAGOON_VERSION=development", "--build-arg", "IMAGE_REPO=lagoon", "--build-arg", "PHP_VERSION="+version, "-t", "lagoon/php:"+tag, "-f", dockerfilePath, name} | |
} else if strings.HasPrefix(identifier, "node") { | |
buildParams = []string{"build", "--quiet", "--build-arg", "LAGOON_VERSION=development", "--build-arg", "IMAGE_REPO=lagoon", "--build-arg", "NODE_VERSION="+version, "-t", "lagoon/node:"+tag, "-f", dockerfilePath, name} | |
} else if strings.HasPrefix(identifier, "solr") { | |
buildParams = []string{"build", "--quiet", "--build-arg", "LAGOON_VERSION=development", "--build-arg", "IMAGE_REPO=lagoon", "--build-arg", "SOLR_MAJ_MIN_VERSION="+version, "-t", "lagoon/solr:"+tag, "-f", dockerfilePath, name} | |
} | |
fmt.Println(buildParams) | |
} | |
// Manual build of all images. | |
func Construct() error { | |
for _, image := range baseImages { | |
fmt.Printf("building image lagoon/%v for registry push\n", image) | |
sh.Run("docker", | |
"build", | |
"--quiet", | |
"--build-arg", | |
"LAGOON_VERSION=development", | |
"--build-arg", | |
"IMAGE_REPO=lagoon", | |
"-t", | |
"lagoon/"+image, | |
"-f", | |
"images/"+image+"/Dockerfile", | |
"images/"+image, | |
) | |
} | |
for _, image := range services { | |
fmt.Printf("building image lagoon/%v for registry push\n", image) | |
sh.Run("docker", | |
"build", | |
"--quiet", | |
"--build-arg", | |
"LAGOON_VERSION=development", | |
"--build-arg", | |
"IMAGE_REPO=lagoon", | |
"-t", | |
"lagoon/"+image, | |
"-f", | |
"services/"+image+"/Dockerfile", | |
"services/"+image, | |
) | |
} | |
for _, image := range pythonImages { | |
fmt.Printf("building image lagoon/%v for registry push\n", image) | |
build(image) | |
} | |
for _, image := range nodeImages { | |
fmt.Printf("building image lagoon/%v for registry push\n", image) | |
build(image) | |
} | |
for _, image := range phpImages { | |
fmt.Printf("building image lagoon/%v for registry push\n", image) | |
build(image) | |
} | |
for _, image := range solrImages { | |
fmt.Printf("building image lagoon/%v for registry push\n", image) | |
build(image) | |
} | |
return nil | |
} | |
// A custom call to push all images to the Open/Mini Shift. | |
func Thrust() error { | |
content, err := ioutil.ReadFile("minishift") | |
if err != nil { | |
panic(err) | |
} | |
MINISHIFT := strings.Trim(string(content), "\n") | |
fmt.Sprint(MINISHIFT) | |
for _, image := range baseImages { | |
err := sh.Run("docker", "image", "inspect", "lagoon/" + image) | |
if err == nil { | |
fmt.Printf("pushing lagoon/%v to minishift registry\n", image) | |
//tagErr := sh.Run("docker", "tag", "lagoon/"+image, MINISHIFT+":3000/lagoon/"+image) | |
//pushErr := sh.Run("docker", "push", MINISHIFT+":3000/lagoon/"+image) | |
} else { | |
fmt.Printf("Error inspecting validity of %v\n", image) | |
} | |
} | |
for _, image := range services { | |
err := sh.Run("docker", "image", "inspect", "lagoon/" + image) | |
if err == nil { | |
fmt.Printf("pushing lagoon/%v to minishift registry\n", image) | |
//tagErr := sh.Run("docker", "tag", "lagoon/"+image, MINISHIFT+":3000/lagoon/"+image) | |
//pushErr := sh.Run("docker", "push", MINISHIFT+":3000/lagoon/"+image) | |
} else { | |
fmt.Printf("Error inspecting validity of %v\n", image) | |
} | |
} | |
return nil | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment