1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
import { GlobalConfig } from '../config/global';
import { logger } from '../logger';
import { GithubReleaseAttachmentsDatasource } from '../modules/datasource/github-release-attachments';
import { GithubReleasesDatasource } from '../modules/datasource/github-releases';
import { GithubTagsDatasource } from '../modules/datasource/github-tags';
import type { PackageFileContent } from '../modules/manager/types';
import type { CombinedHostRule } from '../types';
import * as memCache from '../util/cache/memory';
import * as hostRules from './host-rules';
export function checkGithubToken(
packageFiles: Record<string, PackageFileContent[]> = {},
): void {
const { token } = hostRules.find({
hostType: 'github',
url: 'https://api.github.com',
});
if (token) {
logger.trace('GitHub token is found');
return;
}
if (!GlobalConfig.get('githubTokenWarn')) {
logger.trace('GitHub token warning is disabled');
return;
}
const githubDeps: string[] = [];
const deps = Object.values(packageFiles)
.flat()
.map((file) => file.deps)
.flat();
for (const dep of deps) {
if (
!dep.skipReason &&
(dep.datasource === GithubTagsDatasource.id ||
dep.datasource === GithubReleasesDatasource.id ||
dep.datasource === GithubReleaseAttachmentsDatasource.id)
) {
dep.skipReason = 'github-token-required';
if (dep.depName) {
githubDeps.push(dep.depName);
}
}
}
if (githubDeps.length > 0) {
const warningLogged = memCache.get<boolean | undefined>(
'github-token-required-warning-logged',
);
if (!warningLogged) {
const withoutDuplicates = [...new Set(githubDeps)];
logger.warn(
{ githubDeps: withoutDuplicates },
`GitHub token is required for some dependencies`,
);
memCache.set('github-token-required-warning-logged', true);
}
}
}
export function isGithubPersonalAccessToken(token: string): boolean {
return token.startsWith('ghp_');
}
export function isGithubServerToServerToken(token: string): boolean {
return token.startsWith('ghs_');
}
export function isGithubFineGrainedPersonalAccessToken(token: string): boolean {
return token.startsWith('github_pat_');
}
export function findGithubToken(
searchResult: CombinedHostRule,
): string | undefined {
return searchResult?.token?.replace('x-access-token:', '');
}
export function takePersonalAccessTokenIfPossible(
githubToken: string | undefined,
gitTagsGithubToken: string | undefined,
): string | undefined {
if (gitTagsGithubToken && isGithubPersonalAccessToken(gitTagsGithubToken)) {
logger.debug('Using GitHub Personal Access Token (git-tags)');
return gitTagsGithubToken;
}
if (githubToken && isGithubPersonalAccessToken(githubToken)) {
logger.debug('Using GitHub Personal Access Token');
return githubToken;
}
if (
gitTagsGithubToken &&
isGithubFineGrainedPersonalAccessToken(gitTagsGithubToken)
) {
logger.debug('Using GitHub Fine-grained Personal Access Token (git-tags)');
return gitTagsGithubToken;
}
if (githubToken && isGithubFineGrainedPersonalAccessToken(githubToken)) {
logger.debug('Using GitHub Fine-grained Personal Access Token');
return githubToken;
}
if (gitTagsGithubToken) {
if (isGithubServerToServerToken(gitTagsGithubToken)) {
logger.debug('Using GitHub Server-to-Server token (git-tags)');
} else {
logger.debug('Using unknown GitHub token type (git-tags)');
}
return gitTagsGithubToken;
}
if (githubToken) {
if (isGithubServerToServerToken(githubToken)) {
logger.debug('Using GitHub Server-to-Server token');
} else {
logger.debug('Using unknown GitHub token type');
}
}
return githubToken;
}
|