From 7634587e56aa7461ae1355822b3de613658b4d6e Mon Sep 17 00:00:00 2001 From: Tianon Gravi Date: Tue, 20 Jun 2017 08:36:41 -0700 Subject: [PATCH] Add a separate ArchDockerFrom function for better template granularity Here's an example diff I plan to apply over in the docs with this: (with an example output from `python`) ```diff diff --git a/.template-helpers/generate-dockerfile-links-partial.tmpl b/.template-helpers/generate-dockerfile-links-partial.tmpl index 5c13047a..996b9d60 100644 --- a/.template-helpers/generate-dockerfile-links-partial.tmpl +++ b/.template-helpers/generate-dockerfile-links-partial.tmpl @@ -4,21 +4,13 @@ This template defines the "Supported tags and Dockerfile links" portion of an im */ -}} -{{- define "dockerfilePath" -}} - {{- $dir := .ArchDirectory arch -}} - {{- if ne $dir "." -}} - {{- $dir -}} - / - {{- end -}} - Dockerfile -{{- end -}} - {{- range $i, $e := $.Entries -}} - {{- if $e.HasArchitecture arch -}} + {{- $arch := ternary (ternary arch ($e.Architectures | first) ($e.HasArchitecture arch)) arch (eq arch "amd64") -}} + {{- if $e.HasArchitecture $arch -}} {{- /* force bashbrew to "fetch" the GitCommit so that it is fully resolved */ -}} - {{- $from := $.DockerFrom $e -}} + {{- $from := $.ArchDockerFrom $arch $e -}} - {{- $gitRepo := $e.ArchGitRepo arch -}} + {{- $gitRepo := $e.ArchGitRepo $arch -}} {{- $repoUrlBase := $gitRepo | replace "git://" "https://" | trimSuffixes ".git" -}} {{- $isGitHub := hasPrefix "https://github.com/" $repoUrlBase -}} @@ -28,9 +20,11 @@ This template defines the "Supported tags and Dockerfile links" portion of an im - {{- "\t" -}} {{- if $isGitHub -}} [ {{- end -}} - ` {{- $e.Tags | join "`, `" -}} ` (* {{- template "dockerfilePath" $e -}} *) - {{- $gitCommit := $e.ArchGitCommit arch -}} - {{- if $isGitHub -}} ]( {{- $repoUrlBase -}} /blob/ {{- $gitCommit -}} / {{- template "dockerfilePath" $e -}} ) {{- end -}} + {{- $dir := .ArchDirectory $arch -}} + {{- $dockerfilePath := ternary "Dockerfile" (join "/" $dir "Dockerfile") (eq $dir ".") -}} + ` {{- $e.Tags | join "`, `" -}} ` (* {{- $dockerfilePath -}} *) + {{- $gitCommit := $e.ArchGitCommit $arch -}} + {{- if $isGitHub -}} ]( {{- $repoUrlBase -}} /blob/ {{- $gitCommit -}} / {{- $dockerfilePath -}} ) {{- end -}} {{- /* TODO decide what to do (if anything) about non-GitHub repos with respect to URL */ -}} {{- end -}} {{- end -}} diff --git a/python/README.md b/python/README.md index c23f79f0..410b8525 100644 --- a/python/README.md +++ b/python/README.md @@ -22,6 +22,7 @@ WARNING: - [`2.7.13-alpine3.6`, `2.7-alpine3.6`, `2-alpine3.6` (*2.7/alpine3.6/Dockerfile*)](https://github.com/docker-library/python/blob/e81758e60c9214db0ab9da54c0e741b2a2d62e31/2.7/alpine3.6/Dockerfile) - [`2.7.13-wheezy`, `2.7-wheezy`, `2-wheezy` (*2.7/wheezy/Dockerfile*)](https://github.com/docker-library/python/blob/1ca4a57b20a2f66328e5ef72df866f701c0cd306/2.7/wheezy/Dockerfile) - [`2.7.13-onbuild`, `2.7-onbuild`, `2-onbuild` (*2.7/onbuild/Dockerfile*)](https://github.com/docker-library/python/blob/7663560df7547e69d13b1b548675502f4e0917d1/2.7/onbuild/Dockerfile) +- [`2.7.13-windowsservercore`, `2.7-windowsservercore`, `2-windowsservercore` (*2.7/windows/windowsservercore/Dockerfile*)](https://github.com/docker-library/python/blob/db2d58d73043c85ceecc8e675372b4dc6a77d136/2.7/windows/windowsservercore/Dockerfile) - [`3.3.6`, `3.3` (*3.3/Dockerfile*)](https://github.com/docker-library/python/blob/88ba87d31a3033d4dbefecf44ce25aa1b69ab3e5/3.3/Dockerfile) - [`3.3.6-slim`, `3.3-slim` (*3.3/slim/Dockerfile*)](https://github.com/docker-library/python/blob/88ba87d31a3033d4dbefecf44ce25aa1b69ab3e5/3.3/slim/Dockerfile) - [`3.3.6-alpine`, `3.3-alpine` (*3.3/alpine/Dockerfile*)](https://github.com/docker-library/python/blob/88ba87d31a3033d4dbefecf44ce25aa1b69ab3e5/3.3/alpine/Dockerfile) @@ -36,16 +37,19 @@ WARNING: - [`3.5.3-slim`, `3.5-slim` (*3.5/slim/Dockerfile*)](https://github.com/docker-library/python/blob/88ba87d31a3033d4dbefecf44ce25aa1b69ab3e5/3.5/slim/Dockerfile) - [`3.5.3-alpine`, `3.5-alpine` (*3.5/alpine/Dockerfile*)](https://github.com/docker-library/python/blob/88ba87d31a3033d4dbefecf44ce25aa1b69ab3e5/3.5/alpine/Dockerfile) - [`3.5.3-onbuild`, `3.5-onbuild` (*3.5/onbuild/Dockerfile*)](https://github.com/docker-library/python/blob/9a9021f2134d953165b31d98cacb95aa34076f90/3.5/onbuild/Dockerfile) +- [`3.5.3-windowsservercore`, `3.5-windowsservercore` (*3.5/windows/windowsservercore/Dockerfile*)](https://github.com/docker-library/python/blob/db2d58d73043c85ceecc8e675372b4dc6a77d136/3.5/windows/windowsservercore/Dockerfile) - [`3.6.1`, `3.6`, `3`, `latest` (*3.6/Dockerfile*)](https://github.com/docker-library/python/blob/88ba87d31a3033d4dbefecf44ce25aa1b69ab3e5/3.6/Dockerfile) - [`3.6.1-slim`, `3.6-slim`, `3-slim`, `slim` (*3.6/slim/Dockerfile*)](https://github.com/docker-library/python/blob/88ba87d31a3033d4dbefecf44ce25aa1b69ab3e5/3.6/slim/Dockerfile) - [`3.6.1-alpine`, `3.6-alpine`, `3-alpine`, `alpine` (*3.6/alpine/Dockerfile*)](https://github.com/docker-library/python/blob/88ba87d31a3033d4dbefecf44ce25aa1b69ab3e5/3.6/alpine/Dockerfile) - [`3.6.1-alpine3.6`, `3.6-alpine3.6`, `3-alpine3.6`, `alpine3.6` (*3.6/alpine3.6/Dockerfile*)](https://github.com/docker-library/python/blob/88ba87d31a3033d4dbefecf44ce25aa1b69ab3e5/3.6/alpine3.6/Dockerfile) - [`3.6.1-onbuild`, `3.6-onbuild`, `3-onbuild`, `onbuild` (*3.6/onbuild/Dockerfile*)](https://github.com/docker-library/python/blob/7eca63adca38729424a9bab957f006f5caad870f/3.6/onbuild/Dockerfile) +- [`3.6.1-windowsservercore`, `3.6-windowsservercore`, `3-windowsservercore`, `windowsservercore` (*3.6/windows/windowsservercore/Dockerfile*)](https://github.com/docker-library/python/blob/db2d58d73043c85ceecc8e675372b4dc6a77d136/3.6/windows/windowsservercore/Dockerfile) - [`3.6.2rc1`, `3.6-rc`, `rc` (*3.6-rc/Dockerfile*)](https://github.com/docker-library/python/blob/73d283d3dccd196f758466f29a715e6ab9b533a7/3.6-rc/Dockerfile) - [`3.6.2rc1-slim`, `3.6-rc-slim`, `rc-slim` (*3.6-rc/slim/Dockerfile*)](https://github.com/docker-library/python/blob/73d283d3dccd196f758466f29a715e6ab9b533a7/3.6-rc/slim/Dockerfile) - [`3.6.2rc1-alpine`, `3.6-rc-alpine`, `rc-alpine` (*3.6-rc/alpine/Dockerfile*)](https://github.com/docker-library/python/blob/73d283d3dccd196f758466f29a715e6ab9b533a7/3.6-rc/alpine/Dockerfile) - [`3.6.2rc1-alpine3.6`, `3.6-rc-alpine3.6`, `rc-alpine3.6` (*3.6-rc/alpine3.6/Dockerfile*)](https://github.com/docker-library/python/blob/73d283d3dccd196f758466f29a715e6ab9b533a7/3.6-rc/alpine3.6/Dockerfile) - [`3.6.2rc1-onbuild`, `3.6-rc-onbuild`, `rc-onbuild` (*3.6-rc/onbuild/Dockerfile*)](https://github.com/docker-library/python/blob/73d283d3dccd196f758466f29a715e6ab9b533a7/3.6-rc/onbuild/Dockerfile) +- [`3.6.2rc1-windowsservercore`, `3.6-rc-windowsservercore`, `rc-windowsservercore` (*3.6-rc/windows/windowsservercore/Dockerfile*)](https://github.com/docker-library/python/blob/73d283d3dccd196f758466f29a715e6ab9b533a7/3.6-rc/windows/windowsservercore/Dockerfile) # Quick reference ``` --- go/src/bashbrew/cmd-build.go | 2 +- go/src/bashbrew/docker.go | 7 ++++++- go/src/bashbrew/git.go | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/go/src/bashbrew/cmd-build.go b/go/src/bashbrew/cmd-build.go index 038b6fb..fa0195e 100644 --- a/go/src/bashbrew/cmd-build.go +++ b/go/src/bashbrew/cmd-build.go @@ -76,7 +76,7 @@ func cmdBuild(c *cli.Context) error { if err != nil { fmt.Printf("Building %s (%s)\n", cacheTag, r.EntryIdentifier(entry)) - commit, err := r.fetchGitRepo(&entry) + commit, err := r.fetchGitRepo(arch, &entry) if err != nil { return cli.NewMultiError(fmt.Errorf(`failed fetching git repo for %q (tags %q)`, r.RepoName, entry.TagsString()), err) } diff --git a/go/src/bashbrew/docker.go b/go/src/bashbrew/docker.go index bfe721e..608e798 100644 --- a/go/src/bashbrew/docker.go +++ b/go/src/bashbrew/docker.go @@ -19,7 +19,11 @@ import ( var dockerFromCache = map[string]string{} func (r Repo) DockerFrom(entry *manifest.Manifest2822Entry) (string, error) { - commit, err := r.fetchGitRepo(entry) + return r.ArchDockerFrom(arch, entry) +} + +func (r Repo) ArchDockerFrom(arch string, entry *manifest.Manifest2822Entry) (string, error) { + commit, err := r.fetchGitRepo(arch, entry) if err != nil { return "", err } @@ -56,6 +60,7 @@ func (r Repo) DockerFrom(entry *manifest.Manifest2822Entry) (string, error) { return from, nil } +// TODO determine multi-stage-builds impact here (once official images are willing/able to support them; post-17.06 at the earliest) func dockerfileFrom(dockerfile io.Reader) (string, error) { scanner := bufio.NewScanner(dockerfile) for scanner.Scan() { diff --git a/go/src/bashbrew/git.go b/go/src/bashbrew/git.go index b0b5d94..e09171d 100644 --- a/go/src/bashbrew/git.go +++ b/go/src/bashbrew/git.go @@ -103,7 +103,7 @@ func gitNormalizeForTagUsage(text string) string { var gitRepoCache = map[string]string{} -func (r Repo) fetchGitRepo(entry *manifest.Manifest2822Entry) (string, error) { +func (r Repo) fetchGitRepo(arch string, entry *manifest.Manifest2822Entry) (string, error) { cacheKey := strings.Join([]string{ entry.ArchGitRepo(arch), entry.ArchGitFetch(arch),