code.gitea.io/gitea@v1.21.7/routers/api/packages/maven/api.go (about)

     1  // Copyright 2021 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package maven
     5  
     6  import (
     7  	"encoding/xml"
     8  	"strings"
     9  
    10  	packages_model "code.gitea.io/gitea/models/packages"
    11  	maven_module "code.gitea.io/gitea/modules/packages/maven"
    12  )
    13  
    14  // MetadataResponse https://maven.apache.org/ref/3.2.5/maven-repository-metadata/repository-metadata.html
    15  type MetadataResponse struct {
    16  	XMLName    xml.Name `xml:"metadata"`
    17  	GroupID    string   `xml:"groupId"`
    18  	ArtifactID string   `xml:"artifactId"`
    19  	Release    string   `xml:"versioning>release,omitempty"`
    20  	Latest     string   `xml:"versioning>latest"`
    21  	Version    []string `xml:"versioning>versions>version"`
    22  }
    23  
    24  // pds is expected to be sorted ascending by CreatedUnix
    25  func createMetadataResponse(pds []*packages_model.PackageDescriptor) *MetadataResponse {
    26  	var release *packages_model.PackageDescriptor
    27  
    28  	versions := make([]string, 0, len(pds))
    29  	for _, pd := range pds {
    30  		if !strings.HasSuffix(pd.Version.Version, "-SNAPSHOT") {
    31  			release = pd
    32  		}
    33  		versions = append(versions, pd.Version.Version)
    34  	}
    35  
    36  	latest := pds[len(pds)-1]
    37  
    38  	metadata := latest.Metadata.(*maven_module.Metadata)
    39  
    40  	resp := &MetadataResponse{
    41  		GroupID:    metadata.GroupID,
    42  		ArtifactID: metadata.ArtifactID,
    43  		Latest:     latest.Version.Version,
    44  		Version:    versions,
    45  	}
    46  	if release != nil {
    47  		resp.Release = release.Version.Version
    48  	}
    49  	return resp
    50  }