actions-up 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,3 @@
1
- /** Processed release information with normalized types. */
2
1
  interface ReleaseInfo {
3
2
  /** Release description or null if not provided. */
4
3
  description: string | null;
@@ -19,18 +18,19 @@ interface ReleaseInfo {
19
18
  interface TagInfo {
20
19
  /** Tag or commit message, null if not provided. */
21
20
  message: string | null;
21
+ /** Git commit SHA that this tag points to. */
22
+ sha: string | null;
22
23
  /** Date when the tag was created or committed. */
23
24
  date: Date | null;
24
25
  /** Tag name (e.g., 'v1.2.3'). */
25
26
  tag: string;
26
- /** Git commit SHA that this tag points to. */
27
- sha: string;
28
27
  }
29
28
  /** GitHub REST API client with optional authentication. */
30
29
  export declare class Client {
30
+ private readonly baseUrl;
31
+ private readonly token;
31
32
  private rateLimitReset;
32
33
  private rateLimitRemaining;
33
- private readonly octokit;
34
34
  /**
35
35
  * Creates a new GitHub API client.
36
36
  *
@@ -75,6 +75,7 @@ export declare class Client {
75
75
  * @returns True if rate limit is below threshold.
76
76
  */
77
77
  shouldWaitForRateLimit(threshold?: number): boolean;
78
+ private makeRequest;
78
79
  private updateRateLimitInfo;
79
80
  }
80
81
  export {};
@@ -1,4 +1,3 @@
1
- import { Octokit } from "@octokit/rest";
2
1
  var GitHubRateLimitError = class extends Error {
3
2
  constructor(resetAt) {
4
3
  let resetTime = resetAt.toLocaleTimeString();
@@ -7,14 +6,14 @@ var GitHubRateLimitError = class extends Error {
7
6
  }
8
7
  };
9
8
  var Client = class Client {
9
+ baseUrl = "https://api.github.com";
10
+ token;
10
11
  rateLimitReset = /* @__PURE__ */ new Date();
11
12
  rateLimitRemaining = 60;
12
- octokit;
13
13
  constructor(token) {
14
- let authToken = token ?? process.env["GITHUB_TOKEN"];
15
- this.octokit = new Octokit({ auth: authToken ?? void 0 });
16
- if (!authToken) console.warn("No GitHub token found. API rate limits will be restricted.");
17
- this.rateLimitRemaining = authToken ? 5e3 : 60;
14
+ this.token = token ?? process.env["GITHUB_TOKEN"];
15
+ if (!this.token) console.warn("No GitHub token found. API rate limits will be restricted.");
16
+ this.rateLimitRemaining = this.token ? 5e3 : 60;
18
17
  }
19
18
  static isRateLimitError(error) {
20
19
  if (error && typeof error === "object") {
@@ -29,19 +28,12 @@ var Client = class Client {
29
28
  try {
30
29
  let displayTag = tag.replace(/^refs\/tags\//u, "");
31
30
  try {
32
- let { headers: releaseHeaders, data: releaseData } = await this.octokit.repos.getReleaseByTag({
33
- tag: displayTag,
34
- owner,
35
- repo
36
- });
37
- this.updateRateLimitInfo(releaseHeaders);
31
+ let releaseResp = await this.makeRequest(`/repos/${owner}/${repo}/releases/tags/${displayTag}`);
32
+ let releaseData = releaseResp.data;
38
33
  let sha = null;
39
34
  if (releaseData.target_commitish) try {
40
- let { data: commitData } = await this.octokit.repos.getCommit({
41
- ref: releaseData.target_commitish,
42
- owner,
43
- repo
44
- });
35
+ let commitResp = await this.makeRequest(`/repos/${owner}/${repo}/commits/${releaseData.target_commitish}`);
36
+ let commitData = commitResp.data;
45
37
  ({sha} = commitData);
46
38
  } catch {
47
39
  sha = releaseData.target_commitish;
@@ -53,32 +45,22 @@ var Client = class Client {
53
45
  tag: displayTag
54
46
  };
55
47
  } catch (releaseError) {
56
- if (releaseError instanceof Error && "status" in releaseError && releaseError.status === 404) try {
57
- let { headers: referenceHeaders, data: referenceData } = await this.octokit.git.getRef({
58
- ref: `tags/${displayTag}`,
59
- owner,
60
- repo
61
- });
62
- this.updateRateLimitInfo(referenceHeaders);
48
+ if (releaseError && typeof releaseError === "object" && "status" in releaseError && releaseError.status === 404) try {
49
+ let referenceResp = await this.makeRequest(`/repos/${owner}/${repo}/git/refs/tags/${displayTag}`);
50
+ let referenceData = referenceResp.data;
63
51
  let { sha } = referenceData.object;
64
52
  let message = null;
65
53
  let date = null;
66
54
  if (referenceData.object.type === "tag") try {
67
- let { data: tagData } = await this.octokit.git.getTag({
68
- tag_sha: sha,
69
- owner,
70
- repo
71
- });
55
+ let tagResp = await this.makeRequest(`/repos/${owner}/${repo}/git/tags/${sha}`);
56
+ let tagData = tagResp.data;
72
57
  ({sha} = tagData.object);
73
- message = tagData.message || null;
58
+ ({message} = tagData);
74
59
  date = tagData.tagger.date ? new Date(tagData.tagger.date) : null;
75
60
  } catch {}
76
- else if (referenceData.object.type === "commit") try {
77
- let { data: commitData } = await this.octokit.git.getCommit({
78
- commit_sha: sha,
79
- owner,
80
- repo
81
- });
61
+ else try {
62
+ let commitResp = await this.makeRequest(`/repos/${owner}/${repo}/git/commits/${sha}`);
63
+ let commitData = commitResp.data;
82
64
  ({message} = commitData);
83
65
  date = commitData.author.date ? new Date(commitData.author.date) : null;
84
66
  } catch {}
@@ -89,7 +71,7 @@ var Client = class Client {
89
71
  sha
90
72
  };
91
73
  } catch (tagError) {
92
- if (tagError instanceof Error && "status" in tagError && tagError.status === 404) return null;
74
+ if (tagError && typeof tagError === "object" && "status" in tagError && tagError.status === 404) return null;
93
75
  throw tagError;
94
76
  }
95
77
  throw releaseError;
@@ -101,12 +83,8 @@ var Client = class Client {
101
83
  }
102
84
  async getAllReleases(owner, repo, limit = 10) {
103
85
  try {
104
- let { data: releases, headers } = await this.octokit.repos.listReleases({
105
- per_page: limit,
106
- owner,
107
- repo
108
- });
109
- this.updateRateLimitInfo(headers);
86
+ let releasesResp = await this.makeRequest(`/repos/${owner}/${repo}/releases?per_page=${limit}`);
87
+ let releases = releasesResp.data;
110
88
  let releaseInfos = [];
111
89
  await Promise.all(releases.map(async (release) => {
112
90
  let sha = null;
@@ -114,7 +92,7 @@ var Client = class Client {
114
92
  let tagInfo = await this.getTagInfo(owner, repo, release.tag_name);
115
93
  if (tagInfo) ({sha} = tagInfo);
116
94
  } catch {
117
- sha = release.target_commitish || null;
95
+ sha = release.target_commitish;
118
96
  }
119
97
  releaseInfos.push({
120
98
  publishedAt: new Date(release.published_at),
@@ -134,17 +112,14 @@ var Client = class Client {
134
112
  }
135
113
  async getLatestRelease(owner, repo) {
136
114
  try {
137
- let { data: release, headers } = await this.octokit.repos.getLatestRelease({
138
- owner,
139
- repo
140
- });
141
- this.updateRateLimitInfo(headers);
115
+ let releaseResp = await this.makeRequest(`/repos/${owner}/${repo}/releases/latest`);
116
+ let release = releaseResp.data;
142
117
  let sha = null;
143
118
  if (release.tag_name) try {
144
119
  let tagInfo = await this.getTagInfo(owner, repo, release.tag_name);
145
120
  if (tagInfo) ({sha} = tagInfo);
146
121
  } catch {
147
- sha = release.target_commitish || null;
122
+ sha = release.target_commitish;
148
123
  }
149
124
  return {
150
125
  publishedAt: new Date(release.published_at),
@@ -156,7 +131,7 @@ var Client = class Client {
156
131
  sha
157
132
  };
158
133
  } catch (error) {
159
- if (error instanceof Error && "status" in error && error.status === 404) return null;
134
+ if (error && typeof error === "object" && "status" in error && error.status === 404) return null;
160
135
  if (Client.isRateLimitError(error)) throw new GitHubRateLimitError(this.rateLimitReset);
161
136
  throw error;
162
137
  }
@@ -170,6 +145,35 @@ var Client = class Client {
170
145
  shouldWaitForRateLimit(threshold = 100) {
171
146
  return this.rateLimitRemaining < threshold;
172
147
  }
148
+ async makeRequest(path, options = {}) {
149
+ let headers = {
150
+ Accept: "application/vnd.github.v3+json",
151
+ "User-Agent": "actions-up",
152
+ ...options.headers
153
+ };
154
+ if (this.token) headers["Authorization"] = `Bearer ${this.token}`;
155
+ let response = await fetch(`${this.baseUrl}${path}`, {
156
+ ...options,
157
+ headers
158
+ });
159
+ let responseHeaders = {};
160
+ for (let [key, value] of response.headers.entries()) responseHeaders[key] = value;
161
+ this.updateRateLimitInfo(responseHeaders);
162
+ if (!response.ok) {
163
+ let error = /* @__PURE__ */ new Error(`GitHub API error: ${response.status} ${response.statusText}`);
164
+ error.status = response.status;
165
+ if (response.status === 403) {
166
+ let text = await response.text();
167
+ if (text.includes("rate limit") || text.includes("API rate limit")) error.message = "API rate limit exceeded";
168
+ }
169
+ throw error;
170
+ }
171
+ let data = await response.json();
172
+ return {
173
+ headers: responseHeaders,
174
+ data
175
+ };
176
+ }
173
177
  updateRateLimitInfo(headers) {
174
178
  let remaining = headers["x-ratelimit-remaining"];
175
179
  if (remaining !== void 0) this.rateLimitRemaining = typeof remaining === "string" ? Number.parseInt(remaining, 10) : remaining;
package/dist/package.js CHANGED
@@ -1,2 +1,2 @@
1
- const version = "1.1.0";
1
+ const version = "1.1.1";
2
2
  export { version };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "actions-up",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "Interactive CLI tool to update GitHub Actions to latest versions with SHA pinning",
5
5
  "keywords": [
6
6
  "github-actions",
@@ -36,7 +36,6 @@
36
36
  "./dist"
37
37
  ],
38
38
  "dependencies": {
39
- "@octokit/rest": "^22.0.0",
40
39
  "cac": "^6.7.14",
41
40
  "enquirer": "^2.4.1",
42
41
  "nanospinner": "^1.2.2",