File tree 15 files changed +704
-0
lines changed
15 files changed +704
-0
lines changed Original file line number Diff line number Diff line change
1
+ config.json
2
+ local-store
3
+ debug
Original file line number Diff line number Diff line change
1
+ {
2
+ "version" : " 0.2.0" ,
3
+ "configurations" : [
4
+ {
5
+ "name" : " Launch" ,
6
+ "type" : " go" ,
7
+ "request" : " launch" ,
8
+ "mode" : " debug" ,
9
+ "remotePath" : " " ,
10
+ "port" : 2345 ,
11
+ "host" : " 127.0.0.1" ,
12
+ "program" : " ${workspaceRoot}" ,
13
+ "env" : {},
14
+ "args" : [],
15
+ "showLog" : true
16
+ }
17
+ ]
18
+ }
Original file line number Diff line number Diff line change
1
+ # dollop
2
+
3
+ Coming soon...
Original file line number Diff line number Diff line change
1
+ {
2
+ "Repositories" : {
3
+ "test" : {
4
+ "Metadata" : {
5
+ "Path" : " local-store/metadata-test.json"
6
+ },
7
+ "Storage" : {
8
+ "Path" : " local-store/storage-test"
9
+ }
10
+ }
11
+ }
12
+ }
Original file line number Diff line number Diff line change
1
+ # Design
2
+
3
+ ## Exposures
4
+
5
+ For most average users, the only thing that is relevant is the "exposures" that
6
+ Sage provides. It looks up metadata and returns packages from storage. Currently,
7
+ Sage only supports a Maven exposure.
8
+
9
+ ## Package storage
10
+
11
+ Backing all exposures is a generic storage backend that allows package information
12
+ to be retrieved on demand.
13
+
14
+ Sage decouples metadata from package content to allow flexibility in how you can
15
+ serve your packages. For instance, you might look up metadata in MySQL but serve
16
+ packages over Amazon S3.
Original file line number Diff line number Diff line change
1
+ package main
2
+
3
+ import (
4
+ "log"
5
+ "net/http"
6
+
7
+ "github.com/minecrafter/sage/repository/maven"
8
+ "github.com/minecrafter/sage/repository/store"
9
+ "github.com/minecrafter/sage/server"
10
+ )
11
+
12
+ func main () {
13
+ conf , err := server .LoadConfig ("config.json" )
14
+ if err != nil {
15
+ log .Fatalln (err )
16
+ }
17
+
18
+ configuredRepositories := make (map [string ]maven.MavenRetrieveHandler )
19
+ for key , value := range conf .Repositories {
20
+ configuredRepositories [key ] = maven .NewMavenRetrieveHandler ("/" + key ,
21
+ store .NewLocalMetadataStore (value .Metadata .Path ),
22
+ store .NewLocalPackageStore (value .Storage .Path ))
23
+ }
24
+
25
+ if err := http .ListenAndServe (":8196" , server.RepoHTTPHandler {
26
+ Repositories : configuredRepositories ,
27
+ }); err != nil {
28
+ log .Fatalln (err )
29
+ }
30
+ }
Original file line number Diff line number Diff line change
1
+ package maven
2
+
3
+ import (
4
+ "encoding/xml"
5
+ )
6
+
7
+ // Represents a maven-metadata.xml file.
8
+ type MavenMetadata struct {
9
+ XMLName xml.Name `xml:"metadata"`
10
+ GroupID string `xml:"groupId"`
11
+ ArtifactID string `xml:"artifactId"`
12
+ Versioning MavenMetadataVersioning `xml:"versioning"`
13
+ }
14
+
15
+ type MavenMetadataVersioning struct {
16
+ Latest string `xml:"latest"`
17
+ Release string `xml:"release"`
18
+ Versions MavenMetadataVersions `xml:"versions"`
19
+ LastUpdated string `xml:"lastUpdated"`
20
+ }
21
+
22
+ type MavenMetadataVersions struct {
23
+ Version []string `xml:"version"`
24
+ }
Original file line number Diff line number Diff line change
1
+ package maven
2
+
3
+ import (
4
+ "sort"
5
+
6
+ "github.com/minecrafter/sage/repository"
7
+ )
8
+
9
+ const (
10
+ mavenDateFormat = "20060102150405"
11
+ )
12
+
13
+ // CreateMavenMetadata converts a Sage PackageMetadata into a maven-metadata.xml file.
14
+ func CreateMavenMetadata (metadata repository.PackageMetadata ) MavenMetadata {
15
+ m := MavenMetadata {
16
+ GroupID : metadata .MavenData .GroupID ,
17
+ ArtifactID : metadata .MavenData .ArtifactID ,
18
+ }
19
+
20
+ // Copy and sort versions. While we could have sorted versions beforehand, we would only gain mimimal beenfits.
21
+ versions := make ([]repository.PackageVersionMetadata , len (metadata .Versions ))
22
+ copy (versions , metadata .Versions )
23
+ sort .Sort (repository .PackageVersionCollection (versions ))
24
+
25
+ sortedVersions := make ([]string , len (metadata .Versions ))
26
+ for i , version := range versions {
27
+ sortedVersions [i ] = version .Version
28
+ }
29
+ m .Versioning = MavenMetadataVersioning {
30
+ Latest : sortedVersions [len (sortedVersions )- 1 ],
31
+ Versions : MavenMetadataVersions {sortedVersions },
32
+ LastUpdated : versions [len (versions )- 1 ].Created .Format (mavenDateFormat ),
33
+ }
34
+ return m
35
+ }
You can’t perform that action at this time.
0 commit comments