Skip to content

avoid create release with same tag name #98

avoid create release with same tag name

avoid create release with same tag name #98

Workflow file for this run

name: Build and Release
on:
push:
branches: [ main ]
tags:
- 'v*' # Trigger only when a tag starting with 'v' is pushed
pull_request:
branches: [ main ]
workflow_dispatch:
inputs:
tag_name:
description: 'Name of the tag'
required: false
default: 'v1.0.0'
upload_artifact:
description: 'Upload artifact to release'
required: false
default: 'true'
jobs:
build:
runs-on: windows-latest
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: 3.7
- run: pip install -r requirements.txt
- run: pyinstaller generate_ppt_from_txt.py --onefile --icon=lyrics2ppt.ico --name=lyrics2ppt
# Optionally verify that it works (provided that it does not need user interaction)
- run: ./dist/lyrics2ppt.exe
- uses: actions/upload-artifact@v2
with:
name: build-artifact
path: dist/*
release:
runs-on: windows-latest
needs: build
if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch'
steps:
- uses: actions/checkout@v2
- name: Download Build Artifact
uses: actions/download-artifact@v2
with:
name: build-artifact
path: ./dist
- name: Determine Tag Name
id: determine_tag_name
run: |
if ($env:GITHUB_REF -like "refs/tags/*") {
# Extract the tag name from GITHUB_REF
$tag_name = $env:GITHUB_REF.Substring(10) # Remove 'refs/tags/' (10 characters)
echo "::set-output name=tag_name::$tag_name"
} else {
# Use the tag_name from the event input
$tag_name = "${{ github.event.inputs.tag_name }}"
echo "::set-output name=tag_name::$tag_name"
}
- name: Check for Existing Tag
id: check_tag
run: |
TAG_NAME="${{ steps.determine_tag_name.outputs.tag_name }}"
existing_tag=$(curl -s -H "Authorization: token ${{ secrets.PAT }}" \
https://api.github.com/repos/${{ github.repository }}/git/refs/tags/$TAG_NAME | jq -r '.object.sha')
if [ "$existing_tag" != "null" ]; then
echo "Tag $TAG_NAME already exists. Skipping release creation."
echo "tag_exists=true" >> $GITHUB_ENV
else
echo "tag_exists=false" >> $GITHUB_ENV
fi
- name: Create Release
id: create_release
if: env.tag_exists == 'false' # Only create release if tag does not exist
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.PAT }}
with:
tag_name: ${{ steps.determine_tag_name.outputs.tag_name }}
release_name: Release ${{ steps.determine_tag_name.outputs.tag_name }}
draft: false
prerelease: false
- name: Upload Release Asset
if: ${{ github.event.inputs.upload_artifact == 'true' && env.tag_exists == 'false' }} # Only upload if tag does not exist
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.PAT }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./dist/lyrics2ppt.exe
asset_name: lyrics2ppt.exe
asset_content_type: application/octet-stream