Skip to content

Proposed PR template and CI workflows (client/studio/installer/CodeQL/ImgBot) — files to add #7

Description

@SSMGAlt

I prepared a set of CI workflow files and a Pull Request template but could not push them directly due to permissions. Creating this issue to paste the files so someone with push access can review and commit them.

Files included below. Please create these paths in the repository (exact filenames).


.github/pull_request_template.md

---
name: Pull Request Template
about: Use this template for PRs to help reviewers
---

## Summary

Describe the changes in this pull request.

## Checklist

- [ ] I have read the contributing guidelines.
- [ ] The change has tests where applicable.
- [ ] I have run the appropriate build(s) locally.

## Platforms affected

List platforms affected (Windows, macOS, iOS, Android, etc.).

## CI / Build Notes

Add any CI-specific steps or notes needed to validate this PR.

.github/workflows/client-release.yml

name: Client Release Build

on:
  workflow_dispatch:
  push:
    branches:
      - main
      - master

jobs:
  windows:
    name: Windows Release
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v6
      - name: Retarget Visual Studio toolset to v143
        run: |
          git ls-files "**/*.vcxproj" | %{ (Get-Content $_) -replace 'v141_xp','v143' | Set-Content $_ }
        shell: pwsh
      - name: Build solution (Release)
        run: |
          msbuild.exe Roblox.sln /m /p:Configuration=Release /p:Platform=x64
        shell: pwsh

  macos:
    name: macOS Release
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v6
      - name: Build macOS client (Release)
        run: |
          if [ -d "MacClient.xcodeproj" ]; then
            xcodebuild -project MacClient.xcodeproj -configuration Release -quiet
          else
            echo "Mac project not found, skipping"
          fi

  android:
    name: Android Release
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - name: Build Android (Release) if present
        run: |
          if [ -d "Android" ]; then
            if [ -f "Android/gradlew" ]; then
              cd Android && ./gradlew assembleRelease
            else
              echo "No gradle wrapper found in Android/, skipping"
            fi
          else
            echo "Android directory not present, skipping"
          fi

  ios:
    name: iOS Release
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v6
      - name: Build iOS (Release) if present
        run: |
          if [ -d "iOS" ] || [ -f "RobloxPlayer-Info.plist" ]; then
            echo "Attempting iOS build"
            find . -name "*.xcodeproj" -maxdepth 3 -print | while read proj; do
              xcodebuild -project "$proj" -configuration Release -quiet || true
            done
          else
            echo "iOS sources not present, skipping"
          fi

.github/workflows/client-debug.yml

name: Client Debug Build

on:
  workflow_dispatch:
  pull_request:
    branches:
      - main
      - master

jobs:
  windows:
    name: Windows Debug
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v6
      - name: Retarget Visual Studio toolset to v143
        run: |
          git ls-files "**/*.vcxproj" | %{ (Get-Content $_) -replace 'v141_xp','v143' | Set-Content $_ }
        shell: pwsh
      - name: Build solution (Debug)
        run: |
          msbuild.exe Roblox.sln /m /p:Configuration=Debug /p:Platform=x64
        shell: pwsh

  macos:
    name: macOS Debug
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v6
      - name: Build macOS client (Debug)
        run: |
          if [ -d "MacClient.xcodeproj" ]; then
            xcodebuild -project MacClient.xcodeproj -configuration Debug -quiet
          else
            echo "Mac project not found, skipping"
          fi

  android:
    name: Android Debug
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - name: Build Android (Debug) if present
        run: |
          if [ -d "Android" ]; then
            if [ -f "Android/gradlew" ]; then
              cd Android && ./gradlew assembleDebug
            else
              echo "No gradle wrapper found in Android/, skipping"
            fi
          else
            echo "Android directory not present, skipping"
          fi

  ios:
    name: iOS Debug
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v6
      - name: Build iOS (Debug) if present
        run: |
          if [ -d "iOS" ] || [ -f "RobloxPlayer-Info.plist" ]; then
            find . -name "*.xcodeproj" -maxdepth 3 -print | while read proj; do
              xcodebuild -project "$proj" -configuration Debug -quiet || true
            done
          else
            echo "iOS sources not present, skipping"
          fi

.github/workflows/client-installer.yml

name: Client Installer Build

on:
  workflow_dispatch:
  push:
    branches:
      - main
      - master

jobs:
  windows-installer:
    name: Windows Installer
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v6
      - name: Check for Installer content
        run: |
          if (!(Test-Path -Path "Installer")) { Write-Host "Installer directory not found, skipping"; exit 0 }
          Write-Host "Installer directory found"
        shell: pwsh
      - name: Run Windows installer build scripts if present
        run: |
          if (Test-Path Installer) {
            if (Test-Path Installer\RccServiceSetup) { Write-Host 'Found RccServiceSetup - custom steps may be required' }
            echo "No universal installer script detected; add project-specific commands here"
          }
        shell: pwsh

  macos-installer:
    name: macOS Installer
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v6
      - name: Check for Installer content
        run: |
          if [ ! -d "Installer" ]; then
            echo "Installer directory not found, skipping"
            exit 0
          fi
          echo "Installer directory found"
      - name: Run macOS installer steps if present
        run: |
          echo "No universal macOS installer script detected; add project-specific commands here"

.github/workflows/studio-release.yml

name: Studio Release Build

on:
  workflow_dispatch:
  push:
    branches:
      - main
      - master

jobs:
  windows:
    name: Windows Studio Release
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v6
      - name: Retarget Visual Studio toolset to v143
        run: |
          git ls-files "**/*.vcxproj" | %{ (Get-Content $_) -replace 'v141_xp','v143' | Set-Content $_ }
        shell: pwsh
      - name: Build RobloxStudio (Release) if project exists
        run: |
          $proj = Get-ChildItem -Path . -Recurse -Filter "RobloxStudio*.vcxproj" -ErrorAction SilentlyContinue | Select-Object -First 1
          if ($proj) {
            msbuild.exe $proj.FullName /m /p:Configuration=Release /p:Platform=x64
          } else {
            Write-Host "RobloxStudio project not found in repo, attempting solution-level build"
            msbuild.exe Roblox.sln /m /p:Configuration=Release /p:Platform=x64
          }
        shell: pwsh

  macos:
    name: macOS Studio Release
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v6
      - name: Build Studio for macOS if Xcode project found
        run: |
          find . -name "*Studio*.xcodeproj" -maxdepth 3 -print | while read proj; do
            xcodebuild -project "$proj" -configuration Release -quiet || true
          done

.github/workflows/studio-debug.yml

name: Studio Debug Build

on:
  workflow_dispatch:
  pull_request:
    branches:
      - main
      - master

jobs:
  windows:
    name: Windows Studio Debug
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v6
      - name: Retarget Visual Studio toolset to v143
        run: |
          git ls-files "**/*.vcxproj" | %{ (Get-Content $_) -replace 'v141_xp','v143' | Set-Content $_ }
        shell: pwsh
      - name: Build RobloxStudio (Debug) if project exists
        run: |
          $proj = Get-ChildItem -Path . -Recurse -Filter "RobloxStudio*.vcxproj" -ErrorAction SilentlyContinue | Select-Object -First 1
          if ($proj) {
            msbuild.exe $proj.FullName /m /p:Configuration=Debug /p:Platform=x64
          } else {
            Write-Host "RobloxStudio project not found in repo, attempting solution-level build"
            msbuild.exe Roblox.sln /m /p:Configuration=Debug /p:Platform=x64
          }
        shell: pwsh

  macos:
    name: macOS Studio Debug
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v6
      - name: Build Studio for macOS if Xcode project found
        run: |
          find . -name "*Studio*.xcodeproj" -maxdepth 3 -print | while read proj; do
            xcodebuild -project "$proj" -configuration Debug -quiet || true
          done

.github/workflows/imgbot.yml

name: Optimize Images (ImgBot)

on:
  schedule:
    - cron: '0 0 * * 0'
  workflow_dispatch:

jobs:
  optimize:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v6
      - name: Run ImgBot
        uses: ImgBotApp/github-action@v2
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}

.github/workflows/codeql.yml

name: CodeQL

on:
  push:
    branches:
      - main
      - master
  pull_request:
    branches:
      - main
      - master
  schedule:
    - cron: "0 5 * * 1"

concurrency:
  group: codeql-${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

permissions:
  actions: read
  contents: read
  security-events: write

jobs:
  analyze:
    name: Analyze (${{ matrix.language }})
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        include:
          - language: cpp
            os: windows-latest
          - language: python
            os: ubuntu-latest
          - language: objective-c
            os: macos-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v6
      - name: Retarget Visual Studio toolset to v143 (Windows C++)
        if: matrix.language == 'cpp' && matrix.os == 'windows-latest'
        run: |
          git ls-files "**/*.vcxproj" | %{ (Get-Content $_) -replace 'v141_xp','v143' | Set-Content $_ }
        shell: pwsh
      - name: Initialize CodeQL
        uses: github/codeql-action/init@v4
        with:
          languages: ${{ matrix.language }}
      - name: Autobuild (only for C/C++)
        if: matrix.language == 'cpp'
        uses: github/codeql-action/autobuild@v4
      - name: Perform CodeQL Analysis
        uses: github/codeql-action/analyze@v4
        with:
          category: "/language:${{ matrix.language }}"

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions