Skip to content

The Cadwyn Order | A Rework and Lore Reflavouring of the Totod Order #22093

The Cadwyn Order | A Rework and Lore Reflavouring of the Totod Order

The Cadwyn Order | A Rework and Lore Reflavouring of the Totod Order #22093

Workflow file for this run

name: BYOND Build
on:
pull_request:
branches:
- main
merge_group:
branches:
- main
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
start_gate:
if: ( !contains(github.event.head_commit.message, '[ci skip]') )
name: Start Gate
runs-on: ubuntu-24.04
steps:
- name: Mandatory Empty Step
run: exit 0
run_linters:
name: Run Linters
needs: start_gate
runs-on: ubuntu-22.04
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup cache
uses: actions/cache@v4
with:
path: ~/SpacemanDMM
key: ${{ runner.os }}-spacemandmm-${{ hashFiles('dependencies.sh') }}
restore-keys: |
${{ runner.os }}-spacemandmm-
- name: Setup Bun
uses: ./.github/actions/setup_bun
- name: Restore Bootstrap cache
uses: actions/cache@v4
with:
path: tools/bootstrap/.cache
key: ${{ runner.os }}-bootstrap-${{ hashFiles('tools/requirements.txt') }}
restore-keys: |
${{ runner.os }}-bootstrap-
- name: Restore Rust cache
uses: actions/cache@v4
with:
path: ~/.cargo
key: ${{ runner.os }}-rust-${{ hashFiles('tools/ci/ci_dependencies.sh')}}
restore-keys: |
${{ runner.os }}-rust-
- name: Install OpenDream
uses: robinraju/release-downloader@v1.12
with:
repository: "OpenDreamProject/OpenDream"
tag: "latest"
fileName: "DMCompiler_linux-x64.tar.gz"
extract: true
- name: Install Tools
run: |
pip3 install setuptools
bash tools/ci/install_spaceman_dmm.sh dreamchecker
bash tools/ci/install_ripgrep.sh
tools/bootstrap/python -c ''
- name: Give Linters A Go
id: linter-setup
run: ":"
- name: Run Grep Checks
if: steps.linter-setup.conclusion == 'success' && !cancelled()
run: bash tools/ci/check_grep.sh
- name: Check unescaped brackets
if: steps.linter-setup.conclusion == 'success' && !cancelled()
run: tools/bootstrap/python tools/catch_unescaped_brackets.py
- name: Ticked File Enforcement
if: steps.linter-setup.conclusion == 'success' && !cancelled()
run: |
tools/bootstrap/python tools/ticked_file_enforcement/ticked_file_enforcement.py < tools/ticked_file_enforcement/schemas/vanderlin_dme.json
tools/bootstrap/python tools/ticked_file_enforcement/ticked_file_enforcement.py < tools/ticked_file_enforcement/schemas/unit_tests.json
- name: Check Define Sanity
if: steps.linter-setup.conclusion == 'success' && !cancelled()
run: tools/bootstrap/python -m define_sanity.check
- name: Lint With DreamChecker
if: steps.linter-setup.conclusion == 'success' && !cancelled()
shell: bash
run: ~/dreamchecker 2>&1 | bash tools/ci/annotate_dm.sh
- name: Lint With OpenDream
if: steps.linter-setup.conclusion == 'success' && !cancelled()
run: ./DMCompiler_linux-x64/DMCompiler vanderlin.dme --suppress-unimplemented --define=CIBUILDING | bash tools/ci/annotate_od.sh
- name: Run Map Checks
if: steps.linter-setup.conclusion == 'success' && !cancelled()
run: |
tools/bootstrap/python -m mapmerge2.dmm_test
tools/bootstrap/python -m tools.maplint.source
- name: Run DMI Tests
if: steps.linter-setup.conclusion == 'success' && !cancelled()
run: tools/bootstrap/python -m dmi.test
- name: Check File Directories
if: steps.linter-setup.conclusion == 'success' && !cancelled()
run: bash tools/ci/check_filedirs.sh vanderlin.dme
- name: Check Changelogs
if: steps.linter-setup.conclusion == 'success' && !cancelled()
run: bash tools/ci/check_changelogs.sh
# Fails because of player books and I CBA rn
# - name: Check Miscellaneous Files
# if: steps.linter-setup.conclusion == 'success' && !cancelled()
# run: bash tools/ci/check_misc.sh
compile_all_maps:
name: Compile Maps
needs: collect_data
uses: ./.github/workflows/compile_all_maps.yml
with:
max_required_byond_client: ${{ needs.collect_data.outputs.max_required_byond_client }}
collect_data:
name: Collect data and setup caches for other tasks
needs: start_gate
runs-on: ubuntu-22.04
outputs:
maps: ${{ steps.map_finder.outputs.maps }}
max_required_byond_client: ${{ steps.max_required_byond_client.outputs.max_required_byond_client }}
steps:
- uses: actions/checkout@v4
- name: Find Maps
id: map_finder
run: |
> maps_output.txt
for file in _maps/*.json; do
if ! jq -e '.exclude_from_ci == true' "$file" >/dev/null 2>&1; then
echo "\"$(basename "$file" .json)\"" >> maps_output.txt
else
echo "Excluded: $file"
fi
done
map_list=$(paste -sd, maps_output.txt)
echo "Maps: $map_list"
echo "maps={\"paths\":[$map_list]}" >> "$GITHUB_OUTPUT"
- name: Collect byond client version configuration
id: max_required_byond_client
#the regex here does not filter out non-numbers because error messages about no input are less helpful then error messages about bad input (which includes the bad input)
run: |
echo "max_required_byond_client=$(grep -Ev '^[[:blank:]]{0,}#{1,}|^[[:blank:]]{0,}$' .github/max_required_byond_client.txt | tail -n1)" >> $GITHUB_OUTPUT
- name: Set up BYOND cache
uses: ./.github/actions/restore_or_install_byond
run_all_tests:
name: Integration Tests
runs-on: ubuntu-24.04
needs: collect_data
strategy:
fail-fast: false
matrix:
map: ${{ fromJSON(needs.collect_data.outputs.maps).paths }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup database
run: |
sudo systemctl start mysql
mysql -u root -proot -e 'CREATE DATABASE tg_ci;'
mysql -u root -proot tg_ci < SQL/tgstation_schema.sql
mysql -u root -proot -e 'CREATE DATABASE tg_ci_prefixed;'
mysql -u root -proot tg_ci_prefixed < SQL/tgstation_schema_prefixed.sql
- name: Install rust-g
run: |
bash tools/ci/install_rust_g.sh
- name: Restore BYOND from cache
uses: ./.github/actions/restore_or_install_byond
- name: Compile and run tests
run: |
source $HOME/BYOND/byond/bin/byondsetup
tools/build/build.sh --ci dm -DCIBUILDING -I"loop_checks"
bash tools/ci/run_server.sh ${{ matrix.map }}
- name: Check client Compatibility
uses: tgstation/byond-client-compatibility-check@v3
with:
dmb-location: vanderlin.dmb
max-required-client-version: ${{needs.collect_data.outputs.max_required_byond_client}}
completion_gate: # Serves as a non-moving target for branch rulesets
if: always() && !cancelled()
name: Completion Gate
needs: [compile_all_maps, run_all_tests, run_linters]
runs-on: ubuntu-24.04
steps:
- name: Decide whether the needed jobs succeeded or failed
uses: re-actors/alls-green@release/v1
with:
jobs: ${{ toJSON(needs) }}