mirror of
https://github.com/tauri-apps/tauri-action.git
synced 2026-01-31 00:35:20 +01:00
fix(action) existing release detection
This commit is contained in:
65
dist/create-release.js
vendored
65
dist/create-release.js
vendored
@@ -27,6 +27,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||
});
|
||||
};
|
||||
var __asyncValues = (this && this.__asyncValues) || function (o) {
|
||||
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
||||
var m = o[Symbol.asyncIterator], i;
|
||||
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
|
||||
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
|
||||
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
||||
};
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
@@ -34,7 +41,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const core = __importStar(require("@actions/core"));
|
||||
const github_1 = require("@actions/github");
|
||||
const fs_1 = __importDefault(require("fs"));
|
||||
function allReleases(github) {
|
||||
const params = Object.assign({ per_page: 100 }, github_1.context);
|
||||
return github.paginate.iterator(github.repos.listReleases.endpoint.merge(params));
|
||||
}
|
||||
function createRelease(tagName, releaseName, body, commitish, draft = true, prerelease = true) {
|
||||
var e_1, _a;
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
if (process.env.GITHUB_TOKEN === undefined) {
|
||||
throw new Error('GITHUB_TOKEN is required');
|
||||
@@ -53,17 +65,44 @@ function createRelease(tagName, releaseName, body, commitish, draft = true, prer
|
||||
core.setFailed(error.message);
|
||||
}
|
||||
}
|
||||
let release;
|
||||
let release = null;
|
||||
try {
|
||||
release = yield github.repos.getReleaseByTag({
|
||||
owner,
|
||||
repo,
|
||||
tag: tagName
|
||||
});
|
||||
// you can't get a an existing draft by tag
|
||||
// so we must find one in the list of all releases
|
||||
if (draft) {
|
||||
try {
|
||||
for (var _b = __asyncValues(allReleases(github)), _c; _c = yield _b.next(), !_c.done;) {
|
||||
const response = _c.value;
|
||||
let releaseWithTag = response.data.find(release => release.tag_name === tagName);
|
||||
if (releaseWithTag) {
|
||||
release = releaseWithTag;
|
||||
console.log(`Found draft release with tag ${tagName} on the release list.`);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
||||
finally {
|
||||
try {
|
||||
if (_c && !_c.done && (_a = _b.return)) yield _a.call(_b);
|
||||
}
|
||||
finally { if (e_1) throw e_1.error; }
|
||||
}
|
||||
}
|
||||
else {
|
||||
const foundRelease = yield github.repos.getReleaseByTag({
|
||||
owner,
|
||||
repo,
|
||||
tag: tagName
|
||||
});
|
||||
release = foundRelease.data;
|
||||
console.log(`Found release with tag ${tagName}.`);
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
if (error.status === 404) {
|
||||
release = yield github.repos.createRelease({
|
||||
console.log(`Couldn't find release with tag ${tagName}. Creating one.`);
|
||||
const createdRelease = yield github.repos.createRelease({
|
||||
owner,
|
||||
repo,
|
||||
tag_name: tagName,
|
||||
@@ -73,18 +112,20 @@ function createRelease(tagName, releaseName, body, commitish, draft = true, prer
|
||||
prerelease,
|
||||
target_commitish: commitish || github_1.context.sha
|
||||
});
|
||||
release = createdRelease.data;
|
||||
}
|
||||
else {
|
||||
console.log(`⚠️ Unexpected error fetching GitHub release for tag ${tagName}: ${error}`);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
// Get the ID, html_url, and upload URL for the created Release from the response
|
||||
const { data: { id, html_url: htmlUrl, upload_url: uploadUrl } } = release;
|
||||
if (!release) {
|
||||
throw new Error('Release not found or created.');
|
||||
}
|
||||
return {
|
||||
id,
|
||||
htmlUrl,
|
||||
uploadUrl
|
||||
id: release.id,
|
||||
uploadUrl: release.upload_url,
|
||||
htmlUrl: release.html_url
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
12
dist/main.js
vendored
12
dist/main.js
vendored
@@ -66,7 +66,7 @@ function execCommand(command, { cwd }) {
|
||||
env: { FORCE_COLOR: '0' },
|
||||
}).then();
|
||||
}
|
||||
function buildProject(root, debug, { configPath, distPath }) {
|
||||
function buildProject(root, debug, { configPath, distPath, iconPath }) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return new Promise((resolve) => {
|
||||
if (hasTauriDependency(root)) {
|
||||
@@ -96,11 +96,15 @@ function buildProject(root, debug, { configPath, distPath }) {
|
||||
cargoManifest.package.name = appName;
|
||||
cargoManifest.package.version = version;
|
||||
fs_1.writeFileSync(manifestPath, toml_1.default.stringify(cargoManifest));
|
||||
return {
|
||||
const app = {
|
||||
runner,
|
||||
name: appName,
|
||||
version
|
||||
};
|
||||
if (iconPath) {
|
||||
return execCommand(`${runner} icon --i ${path_1.join(root, iconPath)}`, { cwd: root }).then(() => app);
|
||||
}
|
||||
return app;
|
||||
});
|
||||
}
|
||||
})
|
||||
@@ -144,6 +148,7 @@ function run() {
|
||||
const projectPath = path_1.resolve(process.cwd(), core.getInput('projectPath') || process.argv[2]);
|
||||
const configPath = path_1.join(projectPath, core.getInput('configPath') || 'tauri.conf.json');
|
||||
const distPath = core.getInput('distPath');
|
||||
const iconPath = core.getInput('iconPath');
|
||||
let tagName = core.getInput('tagName').replace('refs/tags/', '');
|
||||
let releaseName = core.getInput('releaseName').replace('refs/tags/', '');
|
||||
let body = core.getInput('releaseBody');
|
||||
@@ -153,7 +158,8 @@ function run() {
|
||||
if (Boolean(tagName) !== Boolean(releaseName)) {
|
||||
throw new Error('`tag` is required along with `releaseName` when creating a release.');
|
||||
}
|
||||
const artifacts = yield buildProject(projectPath, false, { configPath: fs_1.existsSync(configPath) ? configPath : null, distPath });
|
||||
const artifacts = yield buildProject(projectPath, false, { configPath: fs_1.existsSync(configPath) ? configPath : null, distPath, iconPath });
|
||||
console.log(`Artifacts: ${artifacts}.`);
|
||||
let uploadUrl;
|
||||
if (tagName) {
|
||||
const packageJson = getPackageJson(projectPath);
|
||||
|
||||
@@ -8,6 +8,22 @@ interface Release {
|
||||
htmlUrl: string
|
||||
}
|
||||
|
||||
interface GitHubRelease {
|
||||
id: number;
|
||||
upload_url: string;
|
||||
html_url: string;
|
||||
tag_name: string;
|
||||
body: string;
|
||||
target_commitish: string;
|
||||
}
|
||||
|
||||
function allReleases(github: GitHub): AsyncIterableIterator<{ data: GitHubRelease[] }> {
|
||||
const params = { per_page: 100, ...context };
|
||||
return github.paginate.iterator(
|
||||
github.repos.listReleases.endpoint.merge(params)
|
||||
);
|
||||
}
|
||||
|
||||
export default async function createRelease(tagName: string, releaseName: string, body?: string, commitish?: string, draft = true, prerelease = true): Promise<Release> {
|
||||
if (process.env.GITHUB_TOKEN === undefined) {
|
||||
throw new Error('GITHUB_TOKEN is required')
|
||||
@@ -29,16 +45,32 @@ export default async function createRelease(tagName: string, releaseName: string
|
||||
}
|
||||
}
|
||||
|
||||
let release
|
||||
let release: GitHubRelease | null = null
|
||||
try {
|
||||
release = await github.repos.getReleaseByTag({
|
||||
owner,
|
||||
repo,
|
||||
tag: tagName
|
||||
})
|
||||
// you can't get a an existing draft by tag
|
||||
// so we must find one in the list of all releases
|
||||
if (draft) {
|
||||
for await (const response of allReleases(github)) {
|
||||
let releaseWithTag = response.data.find(release => release.tag_name === tagName);
|
||||
if (releaseWithTag) {
|
||||
release = releaseWithTag
|
||||
console.log(`Found draft release with tag ${tagName} on the release list.`)
|
||||
break
|
||||
}
|
||||
}
|
||||
} else {
|
||||
const foundRelease = await github.repos.getReleaseByTag({
|
||||
owner,
|
||||
repo,
|
||||
tag: tagName
|
||||
})
|
||||
release = foundRelease.data
|
||||
console.log(`Found release with tag ${tagName}.`)
|
||||
}
|
||||
} catch (error) {
|
||||
if (error.status === 404) {
|
||||
release = await github.repos.createRelease({
|
||||
console.log(`Couldn't find release with tag ${tagName}. Creating one.`)
|
||||
const createdRelease = await github.repos.createRelease({
|
||||
owner,
|
||||
repo,
|
||||
tag_name: tagName,
|
||||
@@ -48,6 +80,8 @@ export default async function createRelease(tagName: string, releaseName: string
|
||||
prerelease,
|
||||
target_commitish: commitish || context.sha
|
||||
})
|
||||
|
||||
release = createdRelease.data
|
||||
} else {
|
||||
console.log(
|
||||
`⚠️ Unexpected error fetching GitHub release for tag ${tagName}: ${error}`
|
||||
@@ -56,14 +90,13 @@ export default async function createRelease(tagName: string, releaseName: string
|
||||
}
|
||||
}
|
||||
|
||||
// Get the ID, html_url, and upload URL for the created Release from the response
|
||||
const {
|
||||
data: { id, html_url: htmlUrl, upload_url: uploadUrl }
|
||||
} = release
|
||||
if (!release) {
|
||||
throw new Error('Release not found or created.')
|
||||
}
|
||||
|
||||
return {
|
||||
id,
|
||||
htmlUrl,
|
||||
uploadUrl
|
||||
id: release.id,
|
||||
uploadUrl: release.upload_url,
|
||||
htmlUrl: release.html_url
|
||||
}
|
||||
}
|
||||
|
||||
@@ -151,6 +151,7 @@ async function run(): Promise<void> {
|
||||
}
|
||||
|
||||
const artifacts = await buildProject(projectPath, false, { configPath: existsSync(configPath) ? configPath : null, distPath, iconPath })
|
||||
console.log(`Artifacts: ${artifacts}.`)
|
||||
|
||||
let uploadUrl: string
|
||||
if (tagName) {
|
||||
|
||||
Reference in New Issue
Block a user