Release 260219 #58
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Update latest Release | |
| on: | |
| release: | |
| types: | |
| - published | |
| - deleted | |
| - edited | |
| - unpublished | |
| workflow_dispatch: | |
| jobs: | |
| update-latest: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Update or Create latest Release | |
| uses: actions/github-script@v6 | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| script: | | |
| const latestTag = 'latest'; | |
| async function getLatestReleaseSafe() { | |
| try { | |
| console.log("Fetching the latest release using the API"); | |
| const latestResponse = await github.rest.repos.getLatestRelease({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| }); | |
| console.log("Current latest release:", latestResponse.data.tag_name); | |
| return latestResponse.data; | |
| } catch (error) { | |
| if (error.status === 404) { | |
| console.log("No published (non-prerelease) release found."); | |
| return null; | |
| } | |
| throw error; | |
| } | |
| } | |
| const currentRelease = await getLatestReleaseSafe(); | |
| // 정식 릴리즈가 하나도 없으면 latest 태그를 삭제하거나 그냥 끝낼지 선택 | |
| if (!currentRelease) { | |
| console.log("No latest release. Trying to delete 'latest' tag if exists."); | |
| try { | |
| await github.rest.git.deleteRef({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| ref: `tags/${latestTag}`, | |
| }); | |
| console.log("Deleted 'latest' tag because there is no published release."); | |
| } catch (error) { | |
| console.log("No 'latest' tag to delete or failed to delete:", error.message); | |
| } | |
| return; | |
| } | |
| const releaseTagName = currentRelease.tag_name; | |
| console.log(`Fetching commit SHA for release tag: ${releaseTagName}`); | |
| const tagRef = await github.rest.git.getRef({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| ref: `tags/${releaseTagName}`, | |
| }); | |
| const currentSha = tagRef.data.object.sha; | |
| console.log(`Found commit SHA for latest release: ${currentSha}`); | |
| // latest 태그를 업데이트 또는 생성 | |
| try { | |
| await github.rest.git.updateRef({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| ref: `tags/${latestTag}`, | |
| sha: currentSha, | |
| force: true, | |
| }); | |
| console.log('Updated tag latest'); | |
| } catch (error) { | |
| console.log("Failed to update 'latest', will try to create. Reason:", error.message); | |
| await github.rest.git.createRef({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| ref: `refs/tags/${latestTag}`, | |
| sha: currentSha, | |
| }); | |
| console.log('Created tag latest'); | |
| } |