Skip to content

Commit

Permalink
fix required optionalUrl, remove default, assume semver from firstpage
Browse files Browse the repository at this point in the history
  • Loading branch information
CanisHelix committed Dec 18, 2023
1 parent 441f2ba commit dc113e0
Show file tree
Hide file tree
Showing 5 changed files with 10 additions and 86 deletions.
71 changes: 0 additions & 71 deletions services/gitea/gitea-base.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,75 +16,4 @@ export default class GiteaBase extends BaseJsonService {
}),
)
}

async fetchPage({ page, requestParams, schema }) {
const {
options: { searchParams: existingQuery, ...restOptions } = {},
...rest
} = requestParams

requestParams = {
options: {
searchParams: {
...existingQuery,
...{ page },
},
...restOptions,
},
...rest,
}

const { res, buffer } = await this._request(
this.authHelper.withBearerAuthHeader({
...requestParams,
}),
)

const json = this._parseJson(buffer)
const data = this.constructor._validate(json, schema)

return { res, data }
}

async fetchPaginatedArrayData({
url,
options,
schema,
httpErrors,
firstPageOnly = false,
}) {
const requestLimit = 100
const requestParams = {
url,
options: {
headers: { Accept: 'application/json' },
searchParams: { limit: requestLimit },
...options,
},
httpErrors,
}

const {
res: { headers },
data,
} = await this.fetchPage({ page: 1, requestParams, schema })
const numberOfItems = headers['x-total-count']

let numberOfPages = 1
if (numberOfItems > 0) {
numberOfPages = Math.ceil(numberOfItems / requestLimit)
}

if (numberOfPages === 1 || firstPageOnly) {
return data
}

const pageData = await Promise.all(
[...Array(numberOfPages - 1).keys()].map((_, i) =>
this.fetchPage({ page: ++i + 1, requestParams, schema }),
),
)

return [...data].concat(...pageData.map(p => p.data))
}
}
3 changes: 1 addition & 2 deletions services/gitea/gitea-helper.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
const documentation = `
Note that only internet-accessible Gitea compatible instances are supported, for example
[https://codeberg.org](https://codeberg.org).
Note that the gitea_url parameter is required because there is canonical hosted gitea service provided by Gitea.
`

function httpErrorsFor() {
Expand Down
9 changes: 3 additions & 6 deletions services/gitea/gitea-languages-count.service.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ The keys could be anything and {} is a valid response (e.g: for an empty repo)
const schema = Joi.object().pattern(/./, nonNegativeInteger)

const queryParamSchema = Joi.object({
gitea_url: optionalUrl,
gitea_url: optionalUrl.required(),
}).required()

export default class GiteaLanguageCount extends GiteaBase {
Expand Down Expand Up @@ -58,18 +58,15 @@ export default class GiteaLanguageCount extends GiteaBase {
}

async fetch({ user, repo, baseUrl }) {
// https://codeberg.org/api/swagger#/repository/repoGetLanguages
// https://try.gitea.io/api/swagger#/repository/repoGetLanguages
return super.fetch({
schema,
url: `${baseUrl}/api/v1/repos/${user}/${repo}/languages`,
httpErrors: httpErrorsFor('user or repo not found'),
})
}

async handle(
{ user, repo },
{ gitea_url: baseUrl = 'https://codeberg.org' },
) {
async handle({ user, repo }, { gitea_url: baseUrl }) {
const data = await this.fetch({
user,
repo,
Expand Down
11 changes: 5 additions & 6 deletions services/gitea/gitea-release.service.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ const displayNameEnum = ['tag', 'release']
const dateOrderByEnum = ['created_at', 'published_at']

const queryParamSchema = Joi.object({
gitea_url: optionalUrl,
gitea_url: optionalUrl.required(),
include_prereleases: Joi.equal(''),
sort: Joi.string()
.valid(...sortEnum)
Expand Down Expand Up @@ -86,13 +86,12 @@ export default class GiteaRelease extends GiteaBase {

static defaultBadgeData = { label: 'release' }

async fetch({ user, repo, baseUrl, isSemver }) {
// https://codeberg.org/api/swagger#/repository/repoGetRelease
return this.fetchPaginatedArrayData({
async fetch({ user, repo, baseUrl }) {
// https://try.gitea.io/api/swagger#/repository/repoGetRelease
return super.fetch({
schema,
url: `${baseUrl}/api/v1/repos/${user}/${repo}/releases`,
httpErrors: httpErrorsFor(),
firstPageOnly: !isSemver,
})
}

Expand Down Expand Up @@ -123,7 +122,7 @@ export default class GiteaRelease extends GiteaBase {
async handle(
{ user, repo },
{
gitea_url: baseUrl = 'https://codeberg.org',
gitea_url: baseUrl,
include_prereleases: pre,
sort,
display_name: displayName,
Expand Down
2 changes: 1 addition & 1 deletion services/gitea/gitea-release.tester.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ t.create('Release (latest by semver pre-release)')
.expectBadge({ label: 'release', message: 'v5.0.0-rc1', color: 'orange' })

t.create('Release (project not found)')
.get('/CanisHelix/does-not-exist.json')
.get('/CanisHelix/does-not-exist.json?gitea_url=https://codeberg.org')
.expectBadge({ label: 'release', message: 'user or repo not found' })

t.create('Release (no tags)')
Expand Down

0 comments on commit dc113e0

Please sign in to comment.