diff --git a/.gitea/workflows/lightless-tag-and-release.yml b/.gitea/workflows/lightless-tag-and-release.yml index 63b4fb0..3401e21 100644 --- a/.gitea/workflows/lightless-tag-and-release.yml +++ b/.gitea/workflows/lightless-tag-and-release.yml @@ -2,7 +2,7 @@ name: Tag and Release Lightless on: push: - branches: [ master ] + branches: [ master, dev ] env: PLUGIN_NAME: LightlessSync @@ -62,7 +62,8 @@ jobs: mkdir -p output (cd /workspace/Lightless-Sync/LightlessClient/LightlessSync/bin/x64/Release/ && zip -r $OLDPWD/output/LightlessClient.zip *) - - name: Create Git tag if not exists + - name: Create Git tag if not exists (master) + if: github.ref == 'refs/heads/master' run: | tag="${{ steps.package_version.outputs.version }}" git fetch --tags @@ -76,7 +77,23 @@ jobs: echo "Tag $tag already exists. Skipping tag creation." fi - - name: Create Release + - name: Create Git tag if not exists (dev) + if: github.ref == 'refs/heads/dev' + run: | + tag="${{ steps.package_version.outputs.version }}-Dev" + git fetch --tags + if ! git tag -l "$tag" | grep -q "$tag"; then + echo "Tag $tag does not exist. Creating and pushing..." + git config user.name "GitHub Action" + git config user.email "action@github.com" + git tag "$tag" + git push origin "$tag" + else + echo "Tag $tag already exists. Skipping tag creation." + fi + + - name: Create Release (master) + if: github.ref == 'refs/heads/master' id: create_release run: | echo "=== Searching for existing release ${{ steps.package_version.outputs.version }}===" @@ -107,6 +124,35 @@ jobs: release_id=$(echo "$response" | jq -r .id) echo "release_id=$release_id" >> "$GITHUB_OUTPUT" + - name: Create Release (dev) + if: github.ref == 'refs/heads/dev' + id: create_release + run: | + version="${{ steps.package_version.outputs.version }}-Dev" + echo "=== Searching for existing release $version===" + release_id=$(curl -s -H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \ + "https://git.lightless-sync.org/api/v1/repos/${GITHUB_REPOSITORY}/releases/tags/$version" | jq -r .id) + if [ "$release_id" != "null" ]; then + echo "=== Deleting existing release $version===" + curl -X DELETE -H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \ + "https://git.lightless-sync.org/api/v1/repos/${GITHUB_REPOSITORY}/releases/$release_id" + fi + echo "=== Creating new release $version===" + response=$( + curl --fail-with-body -X POST \ + -H "Content-Type: application/json" \ + -H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \ + -d '{ + "tag_name": "'"$version"'", + "name": "'"$version"'", + "draft": false, + "prerelease": false + }' \ + "https://git.lightless-sync.org/api/v1/repos/${GITHUB_REPOSITORY}/releases" + ) + release_id=$(echo "$response" | jq -r .id) + echo "release_id=$release_id" >> "$GITHUB_OUTPUT" + - name: Upload Assets to release run: | curl --fail-with-body -s -X POST \ @@ -122,7 +168,8 @@ jobs: env: GIT_TERMINAL_PROMPT: 0 - - name: Update plogonmaster.json with version + - name: Update plogonmaster.json with version (master) + if: github.ref == 'refs/heads/master' env: VERSION: ${{ steps.package_version.outputs.version }} run: | @@ -159,7 +206,6 @@ jobs: .DalamudApiLevel = $dalamudApiLevel | .AssemblyVersion = $version | .DownloadLinkInstall = $downloadUrl - | .DownloadLinkTesting = $downloadUrl | .DownloadLinkUpdate = $downloadUrl else . @@ -172,6 +218,47 @@ jobs: # Output the content of the file cat "$repoJsonPath" + - name: Update plogonmaster.json with version (dev) + if: github.ref == 'refs/heads/dev' + env: + VERSION: ${{ steps.package_version.outputs.version }} + run: | + set -e + pluginJsonPath="${PLUGIN_NAME}/bin/x64/Release/${PLUGIN_NAME}.json" + repoJsonPath="LightlessSyncRepo/LightlessSync/plogonmaster.json" + assemblyVersion="${VERSION}" + version="${VERSION}-Dev" + downloadUrl="https://git.lightless-sync.org/${{ gitea.repository_owner }}/LightlessClient/releases/download/$version/LightlessClient.zip" + pluginJson=$(cat "$pluginJsonPath") + internalName=$(jq -r '.InternalName' <<< "$pluginJson") + dalamudApiLevel=$(jq -r '.DalamudApiLevel' <<< "$pluginJson") + repoJsonRaw=$(cat "$repoJsonPath") + if echo "$repoJsonRaw" | jq 'type' | grep -q '"array"'; then + repoJson="$repoJsonRaw" + else + repoJson="[$repoJsonRaw]" + fi + updatedRepoJson=$(jq \ + --arg internalName "$internalName" \ + --arg dalamudApiLevel "$dalamudApiLevel" \ + --arg assemblyVersion "$assemblyVersion" \ + --arg version "$version" \ + --arg downloadUrl "$downloadUrl" \ + ' + map( + if .InternalName == $internalName + then + .DalamudApiLevel = $dalamudApiLevel + | .TestingAssemblyVersion = $assemblyVersion + | .DownloadLinkTesting = $downloadUrl + else + . + end + ) + ' <<< "$repoJson") + echo "$updatedRepoJson" > "$repoJsonPath" + cat "$repoJsonPath" + - name: Commit and push to LightlessSync run: | cd LightlessSyncRepo/LightlessSync diff --git a/.github/workflows/lightless-tag-and-release.yml b/.github/workflows/lightless-tag-and-release.yml deleted file mode 100644 index 9391829..0000000 --- a/.github/workflows/lightless-tag-and-release.yml +++ /dev/null @@ -1,140 +0,0 @@ -name: Tag and Release Lightless - -on: - push: - branches: [ master ] - -env: - PLUGIN_NAME: LightlessSync - DOTNET_VERSION: 9.x - -jobs: - tag-and-release: - runs-on: windows-2022 - permissions: - contents: write - - steps: - - name: Checkout Lightless - uses: actions/checkout@v4 - with: - fetch-depth: 0 - submodules: true - - - name: Setup .NET 9 SDK - uses: actions/setup-dotnet@v4 - with: - dotnet-version: 9.x - - - name: Download Dalamud - run: | - Invoke-WebRequest -Uri https://goatcorp.github.io/dalamud-distrib/stg/latest.zip -OutFile latest.zip - Expand-Archive -Force latest.zip "$env:AppData\XIVLauncher\addon\Hooks\dev" - - - name: Lets Build Lightless! - run: | - dotnet restore - dotnet build --configuration Release --no-restore - dotnet publish --configuration Release --no-build - - - name: Get version - id: package_version - uses: KageKirin/get-csproj-version@v0 - with: - file: LightlessSync/LightlessSync.csproj - - - name: Display version - run: | - echo "Version: ${{ steps.package_version.outputs.version }}" - - - name: Prepare Lightless Client - run: | - $publishPath = "${{ env.PLUGIN_NAME }}/bin/x64/Release/publish" - if (Test-Path $publishPath) { - Remove-Item -Recurse -Force $publishPath - Write-Host "Removed $publishPath" - } else { - Write-Host "$publishPath does not exist, nothing to remove." - } - mkdir output - Compress-Archive -Path ${{ env.PLUGIN_NAME }}/bin/x64/Release/* -DestinationPath output/LightlessClient.zip - - - name: Create Git tag if not exists - shell: pwsh - run: | - $tag = "${{ steps.package_version.outputs.version }}" - git fetch --tags - if (-not (git tag -l $tag)) { - Write-Host "Tag $tag does not exist. Creating and pushing..." - git config user.name "GitHub Action" - git config user.email "action@github.com" - git tag $tag - git push origin $tag - } else { - Write-Host "Tag $tag already exists. Skipping tag creation." - } - - - name: Create GitHub Release - uses: softprops/action-gh-release@v2 - with: - tag_name: ${{ steps.package_version.outputs.version }} - name: ${{ steps.package_version.outputs.version }} - draft: false - prerelease: false - files: output/LightlessClient.zip - - - name: Clone plugin hosting repo - run: | - mkdir LightlessSyncRepo - cd LightlessSyncRepo - git clone https://github.com/${{ github.repository_owner }}/LightlessSync.git - env: - GIT_TERMINAL_PROMPT: 0 - - - name: Update plogonmaster.json with version - shell: pwsh - env: - VERSION: ${{ steps.package_version.outputs.version }} - run: | - $pluginJsonPath = "${{ env.PLUGIN_NAME }}/bin/x64/Release/${{ env.PLUGIN_NAME }}.json" - $pluginJson = Get-Content $pluginJsonPath | ConvertFrom-Json - $repoJsonPath = "LightlessSyncRepo/LightlessSync/plogonmaster.json" - $repoJsonRaw = Get-Content $repoJsonPath -Raw - $repoJson = $repoJsonRaw | ConvertFrom-Json - $version = $env:VERSION - $downloadUrl = "https://github.com/${{ github.repository_owner }}/LightlessClient/releases/download/$version/LightlessClient.zip" - - if (-not ($repoJson -is [System.Collections.IEnumerable])) { - $repoJson = @($repoJson) - } - - foreach ($plugin in $repoJson) { - if ($plugin.InternalName -eq $pluginJson.InternalName) { - $plugin.DalamudApiLevel = $pluginJson.DalamudApiLevel - $plugin.AssemblyVersion = $version - $plugin.DownloadLinkInstall = $downloadUrl - $plugin.DownloadLinkTesting = $downloadUrl - $plugin.DownloadLinkUpdate = $downloadUrl - } - } - - $repoJson | ConvertTo-Json -Depth 100 | Set-Content $repoJsonPath - - # Convert to JSON and force array brackets if necessary - $repoJsonString = $repoJson | ConvertTo-Json -Depth 100 - - # If the output is not an array, wrap it manually - if ($repoJsonString.Trim().StartsWith('{')) { - $repoJsonString = "[$repoJsonString]" - } - - $repoJsonString | Set-Content $repoJsonPath - - - name: Commit and push to LightlessSync - run: | - cd LightlessSyncRepo/LightlessSync - git config user.name "github-actions" - git config user.email "github-actions@github.com" - git add . - git commit -m "Update ${{ env.PLUGIN_NAME }} to ${{ steps.package_version.outputs.version }}" - git push https://x-access-token:${{ secrets.LIGHTLESS_TOKEN }}@github.com/${{ github.repository_owner }}/LightlessSync.git HEAD:main