15 Commits
v1.3.0 ... main

Author SHA1 Message Date
4875285c09 fix: author info 2025-11-07 16:09:48 +08:00
aae35ac409 Merge remote-tracking branch 'origin/main' into pr-branch 2025-11-07 16:04:59 +08:00
c95a2785f0 Merge pull request #8 from grypho/main
Feature: Preserve UI fields when creating/uploading a release
2025-11-07 16:56:49 +09:00
424dc33baa fix: Keep existing values by default when updating release 2025-11-07 08:22:00 +01:00
9ca8dcac95 Bugfix: body_path was ignored because of default body. 2025-10-20 11:59:36 +02:00
05b1004877 Update README 2025-10-20 11:25:28 +02:00
008a54b0cd Feature: When using the Gitea UI to create an release the fields "name", "body" and "prerelease" are no longer overwritten with empty values. The existing data is used by default. 2025-08-20 10:41:54 +02:00
fe8e032280 Merge pull request #7 from n08i40k/main
Declare missing body_path input in action.yml
2025-07-28 09:19:09 +08:00
3dbdc45d61 docs: declare body_path input 2025-07-26 14:35:12 +04:00
f66c1c98f1 fix: deletion of old releases
Duplicate deletions occur when users generate their own .md5 and .sha256 files and do not use action's built-in md5sum and sha256sum functions.
issue: https://github.com/akkuman/gitea-release-action/issues/5
2025-06-25 10:53:06 +08:00
65a502e85c fix: delete old release attachments 2025-06-23 15:10:15 +08:00
f119011bd6 fix: bool value parse 2024-05-06 23:15:48 +08:00
1d562cf526 chore: package build 2024-05-06 22:53:36 +08:00
f00f823d73 Merge pull request 'Fix parse bool bug' (#5) from lunny/fix_parsebool into main
Reviewed-on: https://gitea.com/actions/gitea-release-action/pulls/5
2024-05-06 14:46:35 +00:00
6a4c0c7c03 Fix parse bool bug 2024-05-06 22:08:41 +08:00
4 changed files with 71 additions and 32 deletions

View File

@ -2,6 +2,8 @@
An action to support publishing release to Gitea. An action to support publishing release to Gitea.
Preserves the fields body, prerelease and name when pushing the release if no value is given.
## Inputs ## Inputs
The following are optional as `step.with` keys The following are optional as `step.with` keys

View File

@ -10,10 +10,14 @@ inputs:
body: body:
description: "Note-worthy description of changes in release" description: "Note-worthy description of changes in release"
required: false required: false
default: ${{ github.event.release.body != '' && github.event.release.body || null }}
body_path:
description: "Path to load description of changes in this release"
required: false
name: name:
description: "Gives the release a custom name. Defaults to tag name" description: "Gives the release a custom name. Defaults to tag name"
required: false required: false
default: ${{ github.ref_name }} default: ${{ github.event.release.name != '' && github.event.release.name || github.ref_name }}
tag_name: tag_name:
description: "Gives a tag name. Defaults to github.GITHUB_REF" description: "Gives a tag name. Defaults to github.GITHUB_REF"
required: false required: false
@ -21,9 +25,11 @@ inputs:
draft: draft:
description: "Creates a draft release. Defaults to false" description: "Creates a draft release. Defaults to false"
required: false required: false
default: ${{ github.event.release.draft || false }}
prerelease: prerelease:
description: "Identify the release as a prerelease. Defaults to false" description: "Identify the release as a prerelease. Defaults to false"
required: false required: false
default: ${{ github.event.release.prerelease || false }}
files: files:
description: "Newline-delimited list of path globs for asset files to upload" description: "Newline-delimited list of path globs for asset files to upload"
required: false required: false

28
dist/index.js vendored
View File

@ -48144,6 +48144,10 @@ var crypto_js = __nccwpck_require__(4134);
function getIsTrue(v) {
const trueValue = ['true', 'True', 'TRUE']
return trueValue.includes(v)
}
async function run() { async function run() {
try { try {
@ -48151,14 +48155,14 @@ async function run() {
const name = core.getInput("name") const name = core.getInput("name")
const body = getReleaseBody(core.getInput("body"), core.getInput("body_path")) const body = getReleaseBody(core.getInput("body"), core.getInput("body_path"))
const tag_name = core.getInput("tag_name") const tag_name = core.getInput("tag_name")
const draft = Boolean(core.getInput("draft")) const draft = getIsTrue(core.getInput("draft"))
const prerelease = Boolean(core.getInput("prerelease")) const prerelease = getIsTrue(core.getInput("prerelease"))
const files = core.getInput("files") const files = core.getInput("files")
const repository = core.getInput("repository") const repository = core.getInput("repository")
const token = core.getInput("token") const token = core.getInput("token")
const target_commitish = core.getInput("target_commitish") const target_commitish = core.getInput("target_commitish")
const md5sum = core.getInput("md5sum") const md5sum = getIsTrue(core.getInput("md5sum"))
const sha256sum = core.getInput("sha256sum") const sha256sum = getIsTrue(core.getInput("sha256sum"))
const [owner, repo] = (repository).split("/") const [owner, repo] = (repository).split("/")
@ -48265,6 +48269,7 @@ function paths(patterns) {
* @param {String} repo * @param {String} repo
* @param {Number} release_id * @param {Number} release_id
* @param {Array<String>} all_files * @param {Array<String>} all_files
* @param {Map<String, Any>} additional parameters
*/ */
async function uploadFiles(client, owner, repo, release_id, all_files, params) { async function uploadFiles(client, owner, repo, release_id, all_files, params) {
params = params || {}; params = params || {};
@ -48273,10 +48278,19 @@ async function uploadFiles(client, owner, repo, release_id, all_files, params) {
repo: repo, repo: repo,
id: release_id, id: release_id,
}) })
// deleted old release attachment
const will_deleted = new Set();
for (const filepath of all_files) { for (const filepath of all_files) {
will_deleted.add(external_path_.basename(filepath));
if (params.md5sum) {
will_deleted.add(`${external_path_.basename(filepath)}.md5`);
}
if (params.sha256sum) {
will_deleted.add(`${external_path_.basename(filepath)}.sha256`);
}
}
for (const attachment of attachments) { for (const attachment of attachments) {
let will_deleted = [external_path_.basename(filepath), `${external_path_.basename(filepath)}.md5`, `${external_path_.basename(filepath)}.sha256`] if (will_deleted.has(attachment.name)) {
if (will_deleted.includes(attachment.name)) {
await client.repository.repoDeleteReleaseAttachment({ await client.repository.repoDeleteReleaseAttachment({
owner: owner, owner: owner,
repo: repo, repo: repo,
@ -48286,6 +48300,8 @@ async function uploadFiles(client, owner, repo, release_id, all_files, params) {
console.log(`Successfully deleted old release attachment ${attachment.name}`) console.log(`Successfully deleted old release attachment ${attachment.name}`)
} }
} }
// upload new release attachment
for (const filepath of all_files) {
const content = external_fs_.readFileSync(filepath); const content = external_fs_.readFileSync(filepath);
let blob = new external_buffer_.Blob([content]); let blob = new external_buffer_.Blob([content]);
await client.repository.repoCreateReleaseAttachment({ await client.repository.repoCreateReleaseAttachment({

27
main.js
View File

@ -8,6 +8,10 @@ import gitea from "gitea-api";
import path from 'path'; import path from 'path';
import CryptoJS from 'crypto-js'; import CryptoJS from 'crypto-js';
function getIsTrue(v) {
const trueValue = ['true', 'True', 'TRUE']
return trueValue.includes(v)
}
async function run() { async function run() {
try { try {
@ -15,14 +19,14 @@ async function run() {
const name = core.getInput("name") const name = core.getInput("name")
const body = getReleaseBody(core.getInput("body"), core.getInput("body_path")) const body = getReleaseBody(core.getInput("body"), core.getInput("body_path"))
const tag_name = core.getInput("tag_name") const tag_name = core.getInput("tag_name")
const draft = Boolean(core.getInput("draft")) const draft = getIsTrue(core.getInput("draft"))
const prerelease = Boolean(core.getInput("prerelease")) const prerelease = getIsTrue(core.getInput("prerelease"))
const files = core.getInput("files") const files = core.getInput("files")
const repository = core.getInput("repository") const repository = core.getInput("repository")
const token = core.getInput("token") const token = core.getInput("token")
const target_commitish = core.getInput("target_commitish") const target_commitish = core.getInput("target_commitish")
const md5sum = core.getInput("md5sum") const md5sum = getIsTrue(core.getInput("md5sum"))
const sha256sum = core.getInput("sha256sum") const sha256sum = getIsTrue(core.getInput("sha256sum"))
const [owner, repo] = (repository).split("/") const [owner, repo] = (repository).split("/")
@ -138,10 +142,19 @@ async function uploadFiles(client, owner, repo, release_id, all_files, params) {
repo: repo, repo: repo,
id: release_id, id: release_id,
}) })
// deleted old release attachment
const will_deleted = new Set();
for (const filepath of all_files) { for (const filepath of all_files) {
will_deleted.add(path.basename(filepath));
if (params.md5sum) {
will_deleted.add(`${path.basename(filepath)}.md5`);
}
if (params.sha256sum) {
will_deleted.add(`${path.basename(filepath)}.sha256`);
}
}
for (const attachment of attachments) { for (const attachment of attachments) {
let will_deleted = [path.basename(filepath), `${path.basename(filepath)}.md5`, `${path.basename(filepath)}.sha256`] if (will_deleted.has(attachment.name)) {
if (will_deleted.includes(attachment.name)) {
await client.repository.repoDeleteReleaseAttachment({ await client.repository.repoDeleteReleaseAttachment({
owner: owner, owner: owner,
repo: repo, repo: repo,
@ -151,6 +164,8 @@ async function uploadFiles(client, owner, repo, release_id, all_files, params) {
console.log(`Successfully deleted old release attachment ${attachment.name}`) console.log(`Successfully deleted old release attachment ${attachment.name}`)
} }
} }
// upload new release attachment
for (const filepath of all_files) {
const content = fs.readFileSync(filepath); const content = fs.readFileSync(filepath);
let blob = new Blob([content]); let blob = new Blob([content]);
await client.repository.repoCreateReleaseAttachment({ await client.repository.repoCreateReleaseAttachment({