Skip to content

Commit f1dbd53

Browse files
authored
feat: lock this major version of the action to use '~> v1' as 'latest' (#461)
* feat: warn about using 'latest' * feat: use "~> v1" as latest Signed-off-by: Carlos Alexandro Becker <[email protected]> * feat: default to "~> v1" instead of "latest" Signed-off-by: Carlos Alexandro Becker <[email protected]> --------- Signed-off-by: Carlos Alexandro Becker <[email protected]>
1 parent 2953d07 commit f1dbd53

File tree

8 files changed

+35
-24
lines changed

8 files changed

+35
-24
lines changed

README.md

+6-6
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ jobs:
6767
# either 'goreleaser' (default) or 'goreleaser-pro'
6868
distribution: goreleaser
6969
# 'latest', 'nightly', or a semver
70-
version: latest
70+
version: '~> v1'
7171
args: release --clean
7272
env:
7373
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -96,7 +96,7 @@ Or with a condition on GoReleaser step:
9696
uses: goreleaser/goreleaser-action@v5
9797
if: startsWith(github.ref, 'refs/tags/')
9898
with:
99-
version: latest
99+
version: '~> v1'
100100
args: release --clean
101101
env:
102102
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -121,7 +121,7 @@ the [Import GPG](https://github.com/crazy-max/ghaction-import-gpg) GitHub Action
121121
name: Run GoReleaser
122122
uses: goreleaser/goreleaser-action@v5
123123
with:
124-
version: latest
124+
version: '~> v1'
125125
args: release --clean
126126
env:
127127
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -146,7 +146,7 @@ purpose. You can do that with the [actions/upload-artifact](https://github.com/a
146146
name: Run GoReleaser
147147
uses: goreleaser/goreleaser-action@v5
148148
with:
149-
version: latest
149+
version: '~> v1'
150150
args: release --clean
151151
workdir: myfolder
152152
env:
@@ -182,7 +182,7 @@ Following inputs can be used as `step.with` keys
182182
| Name | Type | Default | Description |
183183
|------------------|---------|--------------|------------------------------------------------------------------|
184184
| `distribution` | String | `goreleaser` | GoReleaser distribution, either `goreleaser` or `goreleaser-pro` |
185-
| `version`**¹** | String | `latest` | GoReleaser version |
185+
| `version`**¹** | String | `~> v1` | GoReleaser version |
186186
| `args` | String | | Arguments to pass to GoReleaser |
187187
| `workdir` | String | `.` | Working directory (below repository root) |
188188
| `install-only` | Bool | `false` | Just install GoReleaser |
@@ -221,7 +221,7 @@ secret named `GH_PAT`, the step will look like this:
221221
name: Run GoReleaser
222222
uses: goreleaser/goreleaser-action@v5
223223
with:
224-
version: latest
224+
version: '~> v1'
225225
args: release --clean
226226
env:
227227
GITHUB_TOKEN: ${{ secrets.GH_PAT }}

__tests__/github.test.ts

+12
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,18 @@ describe('getRelease', () => {
3232
expect(release?.tag_name).not.toEqual('');
3333
});
3434

35+
it('returns latest v1 GoReleaser Pro GitHub release', async () => {
36+
const release = await github.getRelease('goreleaser-pro', '~> v1');
37+
expect(release).not.toBeNull();
38+
expect(release?.tag_name).not.toEqual('');
39+
});
40+
41+
it('returns latest v1 GoReleaser GitHub release', async () => {
42+
const release = await github.getRelease('goreleaser', '~> v1');
43+
expect(release).not.toBeNull();
44+
expect(release?.tag_name).not.toEqual('');
45+
});
46+
3547
it('returns nightly GoReleaser GitHub release', async () => {
3648
const release = await github.getRelease('goreleaser', 'nightly');
3749
expect(release).not.toBeNull();

__tests__/goreleaser.test.ts

+10
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,16 @@ describe('install', () => {
1818
expect(fs.existsSync(bin)).toBe(true);
1919
}, 100000);
2020

21+
it('acquires latest v1 version of GoReleaser', async () => {
22+
const bin = await goreleaser.install('goreleaser', '~> v1');
23+
expect(fs.existsSync(bin)).toBe(true);
24+
}, 100000);
25+
26+
it('acquires latest v1 version of GoReleaser Pro', async () => {
27+
const bin = await goreleaser.install('goreleaser-pro', '~> v1');
28+
expect(fs.existsSync(bin)).toBe(true);
29+
}, 100000);
30+
2131
it('acquires latest version of GoReleaser Pro', async () => {
2232
const bin = await goreleaser.install('goreleaser-pro', 'latest');
2333
expect(fs.existsSync(bin)).toBe(true);

action.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ inputs:
1313
required: false
1414
version:
1515
description: 'GoReleaser version'
16-
default: 'latest'
16+
default: '~> v1'
1717
required: false
1818
args:
1919
description: 'Arguments to pass to GoReleaser'

dist/index.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/index.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/context.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export interface Inputs {
1515
export async function getInputs(): Promise<Inputs> {
1616
return {
1717
distribution: core.getInput('distribution') || 'goreleaser',
18-
version: core.getInput('version') || 'latest',
18+
version: core.getInput('version') || '~> v1',
1919
args: core.getInput('args'),
2020
workdir: core.getInput('workdir') || '.',
2121
installOnly: core.getBooleanInput('install-only')

src/github.ts

+3-14
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@ export interface GitHubRelease {
88
}
99

1010
export const getRelease = async (distribution: string, version: string): Promise<GitHubRelease> => {
11+
// TODO: change this to ~> v2 on a future major, once goreleaser v2 is out
1112
if (version === 'latest') {
12-
return getLatestRelease(distribution);
13+
core.warning("You are using 'latest' as default version. Will lock to '~> v1'.");
14+
return getReleaseTag(distribution, '~> v1');
1315
}
1416
return getReleaseTag(distribution, version);
1517
};
@@ -38,19 +40,6 @@ export const getReleaseTag = async (distribution: string, version: string): Prom
3840
throw new Error(`Cannot find GoReleaser release ${version}${suffix} in ${url}`);
3941
};
4042

41-
export const getLatestRelease = async (distribution: string): Promise<GitHubRelease> => {
42-
const suffix: string = goreleaser.distribSuffix(distribution);
43-
const url = `https://goreleaser.com/static/latest${suffix}`;
44-
const http: httpm.HttpClient = new httpm.HttpClient('goreleaser-action');
45-
const resp: httpm.HttpClientResponse = await http.get(url);
46-
const body = await resp.readBody();
47-
const statusCode = resp.message.statusCode || 500;
48-
if (statusCode >= 400) {
49-
throw new Error(`Failed to get GoReleaser release latest from ${url} with status code ${statusCode}: ${body}`);
50-
}
51-
return {tag_name: body};
52-
};
53-
5443
const resolveVersion = async (distribution: string, version: string): Promise<string | null> => {
5544
const allTags: Array<string> | null = await getAllTags(distribution);
5645
if (!allTags) {

0 commit comments

Comments
 (0)