github.com/docker-library/go-dockerlibrary@v0.0.0-20200821205225-669fbe5c1d52/manifest/example_test.go (about)

     1  package manifest_test
     2  
     3  import (
     4  	"bufio"
     5  	"fmt"
     6  	"strings"
     7  
     8  	"github.com/docker-library/go-dockerlibrary/manifest"
     9  )
    10  
    11  func Example() {
    12  	man, err := manifest.Parse(bufio.NewReader(strings.NewReader(`# RFC 2822
    13  
    14  	# I LOVE CAKE
    15  
    16  Maintainers: InfoSiftr <github@infosiftr.com> (@infosiftr),
    17               Johan Euphrosine <proppy@google.com> (@proppy)
    18  GitFetch: refs/heads/master
    19  GitRepo: https://github.com/docker-library/golang.git
    20  SharedTags: latest
    21  arm64v8-GitRepo: https://github.com/docker-library/golang.git
    22  Architectures: amd64, amd64
    23  
    24  
    25   # hi
    26  
    27  
    28   	 # blasphemer
    29  
    30  
    31  # Go 1.6
    32  Tags: 1.6.1, 1.6, 1
    33  arm64v8-GitRepo: https://github.com/docker-library/golang.git
    34  Directory: 1.6
    35  GitCommit: 0ce80411b9f41e9c3a21fc0a1bffba6ae761825a
    36  Constraints: some-random-build-server
    37  
    38  
    39  # Go 1.5
    40  Tags: 1.5.3
    41  GitCommit: d7e2a8d90a9b8f5dfd5bcd428e0c33b68c40cc19
    42  SharedTags: 1.5.3-debian, 1.5-debian
    43  Directory: 1.5
    44  s390x-GitCommit: b6c460e7cd79b595267870a98013ec3078b490df
    45  i386-GitFetch: refs/heads/i386
    46  ppc64le-Directory: 1.5/ppc64le/
    47  
    48  
    49  Tags: 1.5
    50  SharedTags: 1.5-debian
    51  GitCommit: d7e2a8d90a9b8f5dfd5bcd428e0c33b68c40cc19
    52  Directory: 1.5
    53  s390x-GitCommit: b6c460e7cd79b595267870a98013ec3078b490df
    54  i386-GitFetch: refs/heads/i386
    55  ppc64le-Directory: 1.5/ppc64le
    56  
    57  Tags: 1.5-alpine
    58  GitCommit: d7e2a8d90a9b8f5dfd5bcd428e0c33b68c40cc19
    59  Directory: 1.5
    60  File: Dockerfile.alpine
    61  s390x-File: Dockerfile.alpine.s390x.bad-boy
    62  
    63  SharedTags: raspbian
    64  GitCommit: deadbeefdeadbeefdeadbeefdeadbeefdeadbeef
    65  Tags: raspbian-s390x
    66  Architectures: s390x, i386
    67  File: Dockerfile-raspbian
    68  s390x-File: Dockerfile
    69  
    70  
    71  `)))
    72  	if err != nil {
    73  		panic(err)
    74  	}
    75  	fmt.Printf("-------------\n2822:\n%s\n", man)
    76  
    77  	fmt.Printf("\nShared Tag Groups:\n")
    78  	for _, group := range man.GetSharedTagGroups() {
    79  		fmt.Printf("\n  - %s\n", strings.Join(group.SharedTags, ", "))
    80  		for _, entry := range group.Entries {
    81  			fmt.Printf("    - %s\n", entry.TagsString())
    82  		}
    83  	}
    84  	fmt.Printf("\n")
    85  
    86  	man, err = manifest.Parse(bufio.NewReader(strings.NewReader(`
    87  # maintainer: InfoSiftr <github@infosiftr.com> (@infosiftr)
    88  # maintainer: John Smith <jsmith@example.com> (@example-jsmith)
    89  
    90  # first set
    91  a: b@c d
    92  e: b@c d
    93  
    94   # second set
    95  f: g@h
    96  i: g@h j
    97  `)))
    98  	if err != nil {
    99  		panic(err)
   100  	}
   101  	fmt.Printf("-------------\nline-based:\n%v\n", man)
   102  
   103  	// Output:
   104  	// -------------
   105  	// 2822:
   106  	// Maintainers: InfoSiftr <github@infosiftr.com> (@infosiftr), Johan Euphrosine <proppy@google.com> (@proppy)
   107  	// SharedTags: latest
   108  	// GitRepo: https://github.com/docker-library/golang.git
   109  	// arm64v8-GitRepo: https://github.com/docker-library/golang.git
   110  	//
   111  	// Tags: 1.6.1, 1.6, 1
   112  	// GitCommit: 0ce80411b9f41e9c3a21fc0a1bffba6ae761825a
   113  	// Directory: 1.6
   114  	// Constraints: some-random-build-server
   115  	//
   116  	// Tags: 1.5.3, 1.5
   117  	// SharedTags: 1.5.3-debian, 1.5-debian
   118  	// GitCommit: d7e2a8d90a9b8f5dfd5bcd428e0c33b68c40cc19
   119  	// Directory: 1.5
   120  	// i386-GitFetch: refs/heads/i386
   121  	// ppc64le-Directory: 1.5/ppc64le
   122  	// s390x-GitCommit: b6c460e7cd79b595267870a98013ec3078b490df
   123  	//
   124  	// Tags: 1.5-alpine
   125  	// GitCommit: d7e2a8d90a9b8f5dfd5bcd428e0c33b68c40cc19
   126  	// Directory: 1.5
   127  	// File: Dockerfile.alpine
   128  	// s390x-File: Dockerfile.alpine.s390x.bad-boy
   129  	//
   130  	// Tags: raspbian-s390x
   131  	// SharedTags: raspbian
   132  	// Architectures: i386, s390x
   133  	// GitCommit: deadbeefdeadbeefdeadbeefdeadbeefdeadbeef
   134  	// File: Dockerfile-raspbian
   135  	// s390x-File: Dockerfile
   136  	//
   137  	// Shared Tag Groups:
   138  	//
   139  	//   - latest
   140  	//     - 1.6.1, 1.6, 1
   141  	//     - 1.5-alpine
   142  	//
   143  	//   - 1.5.3-debian, 1.5-debian
   144  	//     - 1.5.3, 1.5
   145  	//
   146  	//   - raspbian
   147  	//     - raspbian-s390x
   148  	//
   149  	// -------------
   150  	// line-based:
   151  	// Maintainers: InfoSiftr <github@infosiftr.com> (@infosiftr), John Smith <jsmith@example.com> (@example-jsmith)
   152  	// GitFetch: refs/heads/*
   153  	//
   154  	// Tags: a, e
   155  	// GitRepo: b
   156  	// GitCommit: c
   157  	// Directory: d
   158  	//
   159  	// Tags: f
   160  	// GitRepo: g
   161  	// GitFetch: refs/tags/h
   162  	// GitCommit: FETCH_HEAD
   163  	//
   164  	// Tags: i
   165  	// GitRepo: g
   166  	// GitFetch: refs/tags/h
   167  	// GitCommit: FETCH_HEAD
   168  	// Directory: j
   169  }
   170  
   171  func ExampleFetch_local() {
   172  	repoName, tagName, man, err := manifest.Fetch("testdata", "bash:4.4")
   173  	if err != nil {
   174  		panic(err)
   175  	}
   176  
   177  	fmt.Printf("%s:%s\n\n", repoName, tagName)
   178  
   179  	fmt.Println(man.GetTag(tagName).ClearDefaults(manifest.DefaultManifestEntry).String())
   180  
   181  	// Output:
   182  	// bash:4.4
   183  	//
   184  	// Maintainers: Tianon Gravi <admwiggin@gmail.com> (@tianon)
   185  	// Tags: 4.4.12, 4.4, 4, latest
   186  	// GitRepo: https://github.com/tianon/docker-bash.git
   187  	// GitCommit: 1cbb5cf49b4c53bd5a986abf7a1afeb9a80eac1e
   188  	// Directory: 4.4
   189  }
   190  
   191  func ExampleFetch_remote() {
   192  	repoName, tagName, man, err := manifest.Fetch("/home/jsmith/docker/official-images/library", "https://github.com/docker-library/official-images/raw/1a3c4cd6d5cd53bd538a6f56a69f94c5b35325a7/library/bash:4.4")
   193  	if err != nil {
   194  		panic(err)
   195  	}
   196  
   197  	fmt.Printf("%s:%s\n\n", repoName, tagName)
   198  
   199  	fmt.Println(man.GetTag(tagName).ClearDefaults(manifest.DefaultManifestEntry).String())
   200  
   201  	// Output:
   202  	// bash:4.4
   203  	//
   204  	// Maintainers: Tianon Gravi <admwiggin@gmail.com> (@tianon)
   205  	// Tags: 4.4.12, 4.4, 4, latest
   206  	// GitRepo: https://github.com/tianon/docker-bash.git
   207  	// GitCommit: 1cbb5cf49b4c53bd5a986abf7a1afeb9a80eac1e
   208  	// Directory: 4.4
   209  }