diff --git a/.gitea/workflows/main.yaml b/.gitea/workflows/main.yaml index 5a85ba5..a24308c 100644 --- a/.gitea/workflows/main.yaml +++ b/.gitea/workflows/main.yaml @@ -1,150 +1,236 @@ name: Mod Build -on: - push: - tags: - - "*" +on: push env: MOD_NAME: "RefinedRDApi" MOD_ID: "7q2RnptXynYzEX" - SML_DIR: "S:/SF/SML" - ENGINE_DIR: "F:/5.3.2-CSS" + SML_DIR: "S:/SML" + ENGINE_DIR: "S:/UE" BUILT_MODS_DIR: "${{ gitea.workspace }}/BuiltMods" DEV_BUILDS_DIR: "${{ gitea.workspace }}/DevBuilds" + MODS_TO_BUILD: "RefinedRDApi" + MOD_DEPENDENCIES: "" + IS_GAME_FEATURE_PLUGIN: "false" + jobs: - Setup: - runs-on: windows-2022 + Details: + runs-on: ubuntu-docker + steps: + - run: | + echo "DEPLOY: ${{vars.DEPLOY}}" + echo "DEVBUILD: ${{vars.DEVBUILD}}" + echo "Branch/Tag: ${{gitea.ref_name}}" + echo "Mod Name: ${{env.MOD_NAME}}" + echo "SML Directory: ${{env.SML_DIR}}" + echo "Engine Directory: ${{env.ENGINE_DIR}}" + echo "Built Mods Directory: ${{env.BUILT_MODS_DIR}}" + echo "Dev Build Directory: ${{env.DEV_BUILDS_DIR}}" + echo "Change Log: ${{vars.CHANGELOG}}" + + Build: + runs-on: windows-ue defaults: run: shell: pwsh + outputs: + version: ${{steps.version.outputs.version}} steps: + - name: Compute Version + id: version + run: | + $year = (Get-Date).Year + $month = (Get-Date).Month + $quarter = [math]::Ceiling($month / 3) + $quarterKey = "$year.$quarter" + + $response = curl -s -X POST ` + -H "x-rp-key: ${{secrets.RRD_API_KEY}}" ` + -H "Content-Type: application/json" ` + -d "{`"quarter`":`"$quarterKey`"}" ` + "${{secrets.RRD_API_URL}}/api/v1/mods/buildnumber/${{env.MOD_NAME}}/increment" | ConvertFrom-Json + + if (-not $response.build) { + Write-Error "Failed to get build number from API" + exit 1 + } + + $version = "$quarterKey.$($response.build)" + Write-Output "version=$version" >> $Env:GITHUB_OUTPUT + echo "Computed version: $version" + - name: Setup SML run: | - if (!(Test-Path ${{env.SML_DIR}} -PathType Container)) {git clone --branch dev https://github.com/satisfactorymodding/SatisfactoryModLoader.git ${{env.SML_DIR}}} - - name: Install WWise - run: | - cd ${{env.SML_DIR}} - if ((Test-Path ${{env.SML_DIR}}/Plugins/Wwise) -eq $true){ echo "WWise already Installed Skipping.."; exit 0 } - S:/SF/Scripts/wwise-cli.exe integrate-ue --integration-version "2022.1.5.2714" --project "${{env.SML_DIR}}/FactoryGame.uproject" - - name: Pull WWise Project + if (Test-Path "${{env.SML_DIR}}/.git" -PathType Container) { + cd ${{env.SML_DIR}} + git fetch origin dev + git reset --hard origin/dev + } else { + git clone --branch dev https://github.com/satisfactorymodding/SatisfactoryModLoader.git ${{env.SML_DIR}} + } + + - name: Pull Wwise Project run: | + if (!(Test-Path "${{env.SML_DIR}}/SML_WwiseProject" -PathType Container)) { + git clone --branch main git@10.10.10.14:RefinedRD/WwiseProject.git "${{env.SML_DIR}}/SML_WwiseProject" + } cd ${{env.SML_DIR}}/SML_WwiseProject git fetch --all git reset --hard origin/main git lfs fetch --all git lfs pull git lfs checkout - & "C:/Program Files (x86)/Audiokinetic/Wwise2023.1.3.8471/Authoring/x64/Release/bin/WwiseConsole.exe" generate-soundbank "${{env.SML_DIR}}/SML_WwiseProject/SML_WwiseProject.wproj" --platform Windows Mac --verbose + $wwiseConsole = "C:/Program Files (x86)/Audiokinetic/Wwise2023.1.14.8770/Authoring/x64/Release/bin/WwiseConsole.exe" + if (!(Test-Path $wwiseConsole)) { + Write-Error "WwiseConsole not found at $wwiseConsole" + exit 1 + } + & $wwiseConsole generate-soundbank "${{env.SML_DIR}}/SML_WwiseProject/SML_WwiseProject.wproj" --platform Windows Mac --verbose echo "Done" - - name: "SML Headers" + + - name: Pull Mods run: | - cd S:/SF/Scripts/sml-fixer - ./sml-fixer.exe - PullMods: - needs: Setup - strategy: - matrix: - value: ["RefinedRDApi"] - runs-on: windows-2022 - defaults: - run: - shell: pwsh - steps: - - name: "Clone Mod" + $modPath = "${{env.SML_DIR}}/Mods/${{env.MOD_NAME}}" + $repoName = "sf_mod_${{env.MOD_NAME}}" + + if ("${{env.IS_GAME_FEATURE_PLUGIN}}" -eq "true") { + $modPath = "${{env.SML_DIR}}/Mods/GameFeatures/${{env.MOD_NAME}}" + } + + if (!(Test-Path $modPath -PathType Container)) { + git clone git@10.10.10.14:RefinedRD/$repoName.git $modPath + } + + cd $modPath + $ref = "${{gitea.ref_name}}" + git fetch --all --tags + if (git rev-parse --verify --quiet "refs/tags/$ref") { + git reset --hard $ref + } else { + git reset --hard "origin/$ref" + } + echo "Pulled ${{env.MOD_NAME}} @ latest (${{gitea.ref_name}})" + + - name: Update UPlugin Versions run: | - echo "Cloning Mod ${{matrix.value}}" - cd ${{env.SML_DIR}}/Mods - if (!(Test-Path ${{env.SML_DIR}}/Mods/${{matrix.value}} -PathType Container)) {git clone --branch main git@10.10.10.14:RefinedRD/sf_mod_${{matrix.value}}.git ${{env.SML_DIR}}/Mods/${{matrix.value}}} - cd ${{env.SML_DIR}}/Mods/${{matrix.value}} - git fetch --all - git reset --hard origin/main - echo "Done" - UpdateUPlugins: - needs: PullMods - strategy: - matrix: - value: ["RefinedRDApi"] - runs-on: windows-2022 - defaults: - run: - shell: pwsh - steps: - - name: "Update Mod UPlugin Version" - run: | - echo "Updating ${{env.SML_DIR}}/Mods/${{matrix.value}}/${{matrix.value}}.uplugin" - $Uplugin = (Get-Content ${{env.SML_DIR}}/Mods/${{matrix.value}}/${{matrix.value}}.uplugin | convertfrom-json) - $UPlugin.SemVersion = $(Get-Content "${{env.SML_DIR}}/Mods/${{matrix.value}}/VERSION") - $UPlugin.VersionName = $(Get-Content "${{env.SML_DIR}}/Mods/${{matrix.value}}/VERSION") - $Version = $Uplugin.SemVersion - ($UPlugin | convertto-json -Depth 100) -replace '\\u0026', '&' | Set-Content ${{env.SML_DIR}}/Mods/${{matrix.value}}/${{matrix.value}}.uplugin - echo "Done" - CompileEditor: - needs: UpdateUPlugins - runs-on: windows-2022 - outputs: - version: ${{steps.getversion.outputs.version}} - defaults: - run: - shell: pwsh - env: - BUILD_TOOL_EXE: ${{env.ENGINE_DIR}}/Engine/Binaries/DotNET/UnrealBuildTool/UnrealBuildTool.exe - steps: - - name: Get Version - id: getversion - run: | - $Version = $(Get-Content "${{env.SML_DIR}}/Mods/${{env.MOD_NAME}}/VERSION") - Write-Output "version=$($Version)" >> $Env:GITHUB_OUTPUT - - name: "Gen-VS-Files" - run: | - cd ${{env.SML_DIR}} - ${{env.BUILD_TOOL_EXE}} -projectfiles -project="${{env.SML_DIR}}/FactoryGame.uproject" -game -rocket -progress + $newVersion = "${{steps.version.outputs.version}}" + + $mod = "${{env.MOD_NAME}}" + $modPath = "${{env.SML_DIR}}/Mods/$mod" + + if ("${{env.IS_GAME_FEATURE_PLUGIN}}" -eq "true") { + $modPath = "${{env.SML_DIR}}/Mods/GameFeatures/$mod" + } + + $upluginPath = "$modPath/$mod.uplugin" + $UPlugin = (Get-Content $upluginPath | ConvertFrom-Json) + + $majorVersion = [int]($newVersion -split '\.')[0] + + $UPlugin.Version = $majorVersion + $UPlugin.SemVersion = $newVersion + $UPlugin.VersionName = $newVersion + echo "Set $mod version to $newVersion (Version=$majorVersion)" + + ($UPlugin | ConvertTo-Json -Depth 100) -replace '\\u0026', '&' | Set-Content $upluginPath + - name: Compile Editor run: | + $buildTool = "${{env.ENGINE_DIR}}/Engine/Binaries/DotNET/UnrealBuildTool/UnrealBuildTool.exe" cd ${{env.SML_DIR}} - ${{env.BUILD_TOOL_EXE}} Development Win64 -project="${{env.SML_DIR}}/FactoryGame.uproject" -TargetType="Editor" -progress - BuildMods: - needs: CompileEditor - strategy: - matrix: - value: ["RefinedRDApi"] - runs-on: windows-2022 - defaults: - run: - shell: pwsh - steps: - - name: "Build Mod" + & $buildTool -projectfiles -project="${{env.SML_DIR}}/FactoryGame.uproject" -game -rocket -progress + & $buildTool Development Win64 -project="${{env.SML_DIR}}/FactoryGame.uproject" -TargetType="Editor" -progress + + - name: Build Mods run: | - $Version = $(Get-Content "${{env.SML_DIR}}/Mods/${{matrix.value}}/VERSION") - & "${{env.ENGINE_DIR}}/Engine/Build/BatchFiles/RunUAT.bat" -ScriptsForProject="${{env.SML_DIR}}/FactoryGame.uproject" PackagePlugin -Project="${{env.SML_DIR}}/FactoryGame.uproject" -dlcname="${{matrix.value}}" -build -server -clientconfig=Shipping -serverconfig=Shipping -platform=Win64 -serverplatform=Win64+Linux -nocompileeditor -installed -merge - if (!(Test-Path ${{env.BUILT_MODS_DIR}})) {New-Item -ItemType Directory -Force -Path ${{env.BUILT_MODS_DIR}}} - Copy-Item ${{env.SML_DIR}}/Saved/ArchivedPlugins/${{matrix.value}}/${{matrix.value}}.zip ${{env.BUILT_MODS_DIR}}/${{matrix.value}}.$Version.zip -Force + $newVersion = "${{steps.version.outputs.version}}" + + if (!(Test-Path ${{env.BUILT_MODS_DIR}})) { + New-Item -ItemType Directory -Force -Path ${{env.BUILT_MODS_DIR}} + } + $mod = "${{env.MOD_NAME}}" + if (Test-Path "${{env.SML_DIR}}/Saved/ArchivedPlugins/$mod") { + Remove-Item -Recurse "${{env.SML_DIR}}/Saved/ArchivedPlugins/$mod" + } + + if ("${{env.IS_GAME_FEATURE_PLUGIN}}" -eq "true") { + $modPath = "${{env.SML_DIR}}/Mods/GameFeatures/$mod" + }else { + $modPath = "${{env.SML_DIR}}/Mods/$mod" + } + + $version = $newVersion + + & "${{env.ENGINE_DIR}}/Engine/Build/BatchFiles/RunUAT.bat" ` + -ScriptsForProject="${{env.SML_DIR}}/FactoryGame.uproject" ` + PackagePlugin ` + -Project="${{env.SML_DIR}}/FactoryGame.uproject" ` + -dlcname="$mod" ` + -build -server ` + -clientconfig=Shipping -serverconfig=Shipping ` + -platform=Win64 -serverplatform=Win64+Linux ` + -nocompileeditor -installed -merge + + Copy-Item "${{env.SML_DIR}}/Saved/ArchivedPlugins/$mod/$mod.zip" "${{env.BUILT_MODS_DIR}}/$mod.$version.zip" -Force + + echo "Done $mod @ $version" + + - name: Publish Built Version + run: | + $version = "${{steps.version.outputs.version}}" + $modPath = "${{env.SML_DIR}}/Mods/${{env.MOD_NAME}}" + if ("${{env.IS_GAME_FEATURE_PLUGIN}}" -eq "true") { + $modPath = "${{env.SML_DIR}}/Mods/GameFeatures/${{env.MOD_NAME}}" + } + $commit = (git -C $modPath rev-parse HEAD) + $body = "{`"version`":`"$version`",`"commit`":`"$commit`"}" + curl -s -X POST ` + -H "x-rp-key: ${{secrets.RRD_API_KEY}}" ` + -H "Content-Type: application/json" ` + -d $body ` + "${{secrets.RRD_API_URL}}/api/v1/mods/version/${{env.MOD_NAME}}" + echo "" + echo "Published ${{env.MOD_NAME}} @ $version ($commit)" + - uses: actions/upload-artifact@v3 with: name: built-mods - path: ${{env.BUILT_MODS_DIR}}/${{matrix.value}}.*.zip + path: | + ${{env.BUILT_MODS_DIR}}/*.zip + ${{env.BUILT_MODS_DIR}}/Install-DevBuild.ps1 overwrite: true + SMRDeploy: - if: ${{ vars.DEPLOY != 'false' }} - needs: BuildMods - runs-on: windows-2022 + if: ${{ vars.DEPLOY == 'true' }} + needs: Build + runs-on: windows-ue defaults: run: shell: pwsh steps: - - name: Download a artifact + - name: Download artifact uses: actions/download-artifact@v3 with: name: built-mods path: ${{env.BUILT_MODS_DIR}} - - name: "Deploy to SMR" + + - name: Deploy to SMR run: | echo "Deploying to SMR" - $Version = $(Get-Content "${{env.SML_DIR}}/Mods/${{env.MOD_NAME}}/VERSION") + $Version = "${{needs.Build.outputs.version}}" $query = '{ "query": "query { getModByReference(modReference:\"${{env.MOD_NAME}}\"){ versions(filter:{limit: 1}){ version } }}"}' - echo $query - $SMRVersion = (Invoke-RestMethod -Method POST -uri "https://api.ficsit.app/v2/query" -body $query -ContentType "application/json").data.getModByReference.versions[0].version - if($Version -eq $SMRVersion) { echo "SMR Mod Version Already Exists.. Skip"; exit 0 } + $SMRVersion = (Invoke-RestMethod ` + -Method POST ` + -Uri "https://api.ficsit.app/v2/query" ` + -Body $query ` + -ContentType "application/json").data.getModByReference.versions[0].version + if ($Version -eq $SMRVersion) { + echo "SMR Mod Version Already Exists.. Skip" + exit 0 + } $File = (Get-ChildItem "${{env.BUILT_MODS_DIR}}/${{env.MOD_NAME}}*").FullName - $APIURL="https://api.ficsit.app" - write-host "$File, $APIURL" - & "S:/SF/Scripts/ficsit_windows_amd64.exe" smr upload --api-base "$APIURL" --api-key "${{secrets.FICSIT_TOKEN}}" "${{env.MOD_ID}}" "$File" "${{vars.CHANGELOG}}" + $APIURL = "https://api.ficsit.app" + Write-Host "Uploading $File to $APIURL" + & "S:/ficsit_windows_amd64.exe" smr upload ` + --api-base "$APIURL" ` + --api-key "${{secrets.FICSIT_TOKEN}}" ` + "${{env.MOD_ID}}" "$File" "${{vars.CHANGELOG}}" echo "Done"