Skip to content

Add CI job for running unit tests #651

Add CI job for running unit tests

Add CI job for running unit tests #651

Workflow file for this run

name: CI
on:
push:
branches:
- main
pull_request:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: Roblox/setup-foreman@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Lint
run: |
selene generate-roblox-std
selene src/
- name: Format
run: stylua --check src/
- name: Install dependencies
run: wally install
- name: Get model file name
run: |
name=$(jq -r .name default.project.json)
sha=${GITHUB_SHA:0:7}
echo "MODEL_FILE=$name-$sha.rbxm" >> $GITHUB_ENV
- name: Build
run: rojo build -o ${{ env.MODEL_FILE }}
- uses: actions/upload-artifact@v3
with:
name: ${{ env.MODEL_FILE }}
path: ${{ env.MODEL_FILE }}
analyze:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: Roblox/setup-foreman@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Install dependencies
run: wally install
- name: Download global Roblox types
shell: bash
run: curl -s -O https://raw.githubusercontent.com/JohnnyMorganz/luau-lsp/master/scripts/globalTypes.d.lua
- name: Generate sourcemap for LSP
shell: bash
run: rojo sourcemap dev.project.json -o sourcemap.json
- name: Analyze
shell: bash
run: luau-lsp analyze --sourcemap=sourcemap.json --defs=globalTypes.d.lua --defs=testez.d.lua --ignore=**/_Index/** src/
scripts:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Ensure each script is executable
run: |
for f in ./bin/*; do
if [[ ! -x "$f" ]]; then
echo "Script '$f' is not executable"
exit 1
fi
done
tests:
runs-on: windows-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v3
- name: Check for ROBLOSECURITY secret
shell: bash
run: ./.github/workflows/validate-secret.sh ROBLOSECURITY "${{ secrets.ROBLOSECURITY }}"
- name: Check for MULLVAD_ACCOUNT secret
shell: bash
run: ./.github/workflows/validate-secret.sh MULLVAD_ACCOUNT "${{ secrets.MULLVAD_ACCOUNT }}"
- uses: Roblox/setup-foreman@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Install dependencies
run: wally install
- name: Build place file
run: rojo build dev.project.json -o studio-tests.rbxl
- name: Install Mullvad
run: choco install mullvad-app
- name: Update path with Mullvad executable
shell: bash
run: |
BIN="/c/Program Files/Mullvad VPN/resources"
echo "$BIN" >> $GITHUB_PATH
- name: Login to Mullvad account
shell: bash
run: mullvad account login ${{ secrets.MULLVAD_ACCOUNT }}
- name: Set server to connect to
shell: bash
run: mullvad relay set location us-sjc-wg-001
- name: Export IP before connecting to VPN
shell: bash
run: |
ip=$(curl -s https://httpbin.org/ip | jq -r .origin)
echo "Current IP address: $ip"
echo "RUNNER_IP=$ip" >> $GITHUB_ENV
- name: Connect to VPN
shell: bash
run: mullvad connect
- name: Export device name
shell: bash
run: |
deviceName=$(mullvad account get | grep "Device name" | cut -d : -f 2 | xargs)
echo "Device name: $deviceName"
echo "DEVICE_NAME=$deviceName" >> $GITHUB_ENV
- name: Poll for IP change
uses: nick-fields/[email protected]
with:
max_attempts: 5
timeout_minutes: 2
retry_wait_seconds: 2
shell: bash
command: |
ip=$(curl -s https://httpbin.org/ip | jq -r .origin)
echo "Original IP: ${{ env.RUNNER_IP }}"
echo "Current IP: $ip"
if [[ $ip != "" && "${{ env.RUNNER_IP }}" != "$ip" ]]; then
echo "IP changed, assuming we're connected now to the VPN"
exit 0
else
echo "IP has not changed yet. Retrying...."
exit 1
fi
- name: Log Mullvad status
shell: bash
run: mullvad status -v
- name: List tokens
shell: bash
run: cmdkey /list:"LegacyGeneric:target=https://www.roblox.com:RobloxStudioAuth*"
- name: Set .ROBLOSECURITY token
shell: bash
run: |
AUTH_URL=https://www.roblox.com:RobloxStudioAuth
cmdkey /generic:"LegacyGeneric:target=${AUTH_URL}.ROBLOSECURITY" /user:"Roblox" /pass:"${{ secrets.ROBLOSECURITY }}"
cmdkey /generic:"LegacyGeneric:target=${AUTH_URL}Cookies" /user:"Roblox" /pass:".ROBLOSECURITY"
- name: List tokens
shell: bash
run: cmdkey /list:"LegacyGeneric:target=https://www.roblox.com:RobloxStudioAuth*"
- uses: actions/checkout@v3
with:
repository: vocksel/roblox-win-installer
path: roblox-win-installer
- name: Install Roblox Studio
shell: bash
run: |
cd roblox-win-installer
pip install --requirement requirements.txt;
python install.py "${{ secrets.ROBLOSECURITY }}"
- name: Create flag overrides for successful login
run: |
$flags = @{FFlagSTUDIOPLAT31379MultiAccountCookies3=$true; FLogAuthTokenManager=$true; FLogKeyValueStorage=$true; FLogError=$true; FLogMultiUserKeyValueStorage=$true}
New-Item -Path 'C:/Program Files (x86)/Roblox/Versions/version-*/' -Name "ClientSettings" -ItemType "directory"
New-Item -Path 'C:/Program Files (x86)/Roblox/Versions/version-*/ClientSettings' -Name "ClientAppSettings.json"
$flags | ConvertTo-Json -depth 32| set-content -Path 'C:/Program Files (x86)/Roblox/Versions/version-*/ClientSettings/ClientAppSettings.json'
- name: Run tests
run: run-in-roblox --place studio-tests.rbxl --script tests/init.server.lua
- name: Disconnect from VPN
if: always()
shell: bash
run: |
mullvad disconnect
mullvad account revoke-device "${{ env.DEVICE_NAME }}"
- name: Dump logs
uses: actions/upload-artifact@v3
if: failure()
with:
name: studio-logs
path: |
~/AppData/Local/Roblox/logs/**/*
- name: Upload screenshot
if: failure()
uses: OrbitalOwen/[email protected]
with:
file-name: 'roblox-studio-${{ github.run_id }}.jpg'