Skip to content

Commit 474d26c

Browse files
raghavkaulashearin
authored andcommitted
🐛 Licenses: Get License SPDXId from GitLab API (ossf#3413)
* Fix licenses check * Update repoclient * Get SPDXId from `key` field in GitLab Projects API * Update e2etest repos Signed-off-by: Raghav Kaul <raghavkaul@google.com> * add test Signed-off-by: Raghav Kaul <raghavkaul@google.com> * stricter regex Signed-off-by: Raghav Kaul <raghavkaul@google.com> --------- Signed-off-by: Raghav Kaul <raghavkaul@google.com> Signed-off-by: Allen Shearin <allen.p.shearin@gmail.com>
1 parent a1c42bf commit 474d26c

File tree

3 files changed

+40
-21
lines changed

3 files changed

+40
-21
lines changed

clients/gitlabrepo/client.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ func (client *Client) InitRepo(inputRepo clients.Repo, commitSHA string, commitD
8181

8282
// Sanity check.
8383
proj := fmt.Sprintf("%s/%s", glRepo.owner, glRepo.project)
84-
repo, _, err := client.glClient.Projects.GetProject(proj, &gitlab.GetProjectOptions{})
84+
license := true // Get project license information. Used for licenses client.
85+
repo, _, err := client.glClient.Projects.GetProject(proj, &gitlab.GetProjectOptions{License: &license})
8586
if err != nil {
8687
return sce.WithMessage(sce.ErrRepoUnreachable, proj+"\t"+err.Error())
8788
}
@@ -107,7 +108,7 @@ func (client *Client) InitRepo(inputRepo clients.Repo, commitSHA string, commitD
107108
}
108109

109110
if repo.Owner != nil {
110-
client.repourl.owner = repo.Owner.Name
111+
client.repourl.owner = repo.Owner.Username
111112
}
112113

113114
// Init contributorsHandler

clients/gitlabrepo/licenses.go

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,18 +44,11 @@ var errLicenseURLParse = errors.New("couldn't parse gitlab repo license url")
4444

4545
func (handler *licensesHandler) setup() error {
4646
handler.once.Do(func() {
47-
licenseMap := []clients.License{}
48-
if len(licenseMap) == 0 {
49-
// TODO: handler.errSetup = fmt.Errorf("request for repo licenses failed with %w", err)
50-
handler.errSetup = fmt.Errorf("%w: ListLicenses not yet supported for gitlab", clients.ErrUnsupportedFeature)
51-
return
52-
}
53-
5447
l := handler.glProject.License
5548

56-
ptn, err := regexp.Compile(fmt.Sprintf("%s/~/blob/master/(.*)", handler.repourl.URI()))
49+
ptn, err := regexp.Compile(fmt.Sprintf("%s/-/blob/(?:\\w+)/(.*)", handler.repourl.URI()))
5750
if err != nil {
58-
handler.errSetup = fmt.Errorf("couldn't parse License URL: %w", err)
51+
handler.errSetup = fmt.Errorf("couldn't parse license url: %w", err)
5952
return
6053
}
6154

@@ -68,9 +61,10 @@ func (handler *licensesHandler) setup() error {
6861

6962
handler.licenses = append(handler.licenses,
7063
clients.License{
71-
Key: l.Key,
72-
Name: l.Name,
73-
Path: path,
64+
Key: l.Key,
65+
Name: l.Name,
66+
Path: path,
67+
SPDXId: l.Key,
7468
},
7569
)
7670

e2e/license_test.go

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,33 @@ var _ = Describe("E2E TEST:"+checks.CheckLicense, func() {
123123
skipIfTokenIsNot(gitlabPATTokenType, "GitLab only")
124124

125125
dl := scut.TestDetailLogger{}
126-
repo, err := gitlabrepo.MakeGitlabRepo("gitlab.com/N8BWert/scorecard-check-license-e2e")
126+
repo, err := gitlabrepo.MakeGitlabRepo("gitlab.com/ossf-test/scorecard-check-license-e2e")
127+
Expect(err).Should(BeNil())
128+
repoClient, err := gitlabrepo.CreateGitlabClient(context.Background(), repo.Host())
129+
Expect(err).Should(BeNil())
130+
err = repoClient.InitRepo(repo, clients.HeadSHA, 0)
131+
Expect(err).Should(BeNil())
132+
req := checker.CheckRequest{
133+
Ctx: context.Background(),
134+
RepoClient: repoClient,
135+
Repo: repo,
136+
Dlogger: &dl,
137+
}
138+
expected := scut.TestReturn{
139+
Error: nil,
140+
Score: 10,
141+
NumberOfInfo: 2,
142+
}
143+
result := checks.License(&req)
144+
145+
Expect(scut.ValidateTestReturn(nil, "license found", &expected, &result,
146+
&dl)).Should(BeTrue())
147+
})
148+
It("Should return license check works for unrecognized license type - GitLab", func() {
149+
skipIfTokenIsNot(gitlabPATTokenType, "GitLab only")
150+
151+
dl := scut.TestDetailLogger{}
152+
repo, err := gitlabrepo.MakeGitlabRepo("gitlab.com/ossf-test/scorecard-check-license-e2e-unrecognized-license-type")
127153
Expect(err).Should(BeNil())
128154
repoClient, err := gitlabrepo.CreateGitlabClient(context.Background(), repo.Host())
129155
Expect(err).Should(BeNil())
@@ -151,7 +177,7 @@ var _ = Describe("E2E TEST:"+checks.CheckLicense, func() {
151177
skipIfTokenIsNot(gitlabPATTokenType, "GitLab only")
152178

153179
dl := scut.TestDetailLogger{}
154-
repo, err := gitlabrepo.MakeGitlabRepo("gitlab.com/N8BWert/scorecard-check-license-e2e")
180+
repo, err := gitlabrepo.MakeGitlabRepo("gitlab.com/ossf-test/scorecard-check-license-e2e")
155181
Expect(err).Should(BeNil())
156182
repoClient, err := gitlabrepo.CreateGitlabClient(context.Background(), repo.Host())
157183
Expect(err).Should(BeNil())
@@ -164,11 +190,9 @@ var _ = Describe("E2E TEST:"+checks.CheckLicense, func() {
164190
Dlogger: &dl,
165191
}
166192
expected := scut.TestReturn{
167-
Error: nil,
168-
Score: 9,
169-
NumberOfWarn: 1,
170-
NumberOfInfo: 1,
171-
NumberOfDebug: 0,
193+
Error: nil,
194+
Score: 10,
195+
NumberOfInfo: 2,
172196
}
173197
result := checks.License(&req)
174198

0 commit comments

Comments
 (0)