name: CI on: push: branches: - master pull_request: branches: - master merge_group: jobs: run_linters: name: Run Linters runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v7.0.0 - name: Setup Cache uses: actions/cache@v6.1.0 with: path: ~/SpacemanDMM key: ${{ runner.os }}-spacemandmm - name: Install Tools run: | bash tools/ci/install_build_deps.sh bash tools/ci/install_dreamchecker.sh - uses: actions/setup-python@v7.0.0 with: python-version: '3.13' cache: 'pip' - uses: actions/setup-node@v7.0.0 with: node-version: 20 cache: 'yarn' cache-dependency-path: ./tgui/yarn.lock - run: pip install -r tools/requirements.txt - name: Run Linters run: | tools/ci/check_json.sh tgui/bin/tgui --ci python tools/ci/check_grep2.py python tools/ci/check_line_endings.py python tools/ci/check_file_names.py python tools/ci/unticked_files.py ${GITHUB_WORKSPACE} python tools/ci/illegal_dme_files.py ${GITHUB_WORKSPACE} python tools/ci/define_sanity.py python tools/ci/identical_variables.py python tools/ci/restrict_file_types.py python tools/ci/verify_sql_version.py python tools/ci/no_duplicate_definitions.py python tools/ci/check_icons.py python tools/ci/check_random_spawner_prefabs.py python -m tools.ci.check_map_sizes python -m tools.ci.check_legacy_attack_chain python -m tools.ci.check_simplemob_additions python -m tools.ci.check_user_verb_params python -m tools.maplint.source --github - name: Run DreamChecker shell: bash run: ~/dreamchecker 2>&1 | bash tools/ci/annotate_dm.sh odlint: name: Lint with OpenDream runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v7.0.0 - name: Setup OD run: | bash tools/ci/setup_od.sh - name: Setup .NET SDK uses: actions/setup-dotnet@v5.4.0 with: dotnet-version: 9.x - name: Run OD run: | bash tools/ci/run_od.sh compile_all_maps: name: Compile All Maps runs-on: ubuntu-22.04 strategy: fail-fast: false matrix: byondtype: ['STABLE'] steps: - uses: actions/checkout@v7.0.0 - name: Restore BYOND from Cache uses: ./.github/actions/restore_or_install_byond with: release: ${{ matrix.byondtype }} # We test PARADISE_PRODUCTION_HARDWARE here because we dont in station_mapload_tests - name: Compile All Maps run: | tools/ci/install_byond.sh source $HOME/BYOND/byond/bin/byondsetup tools/ci/generate_maplist.sh DreamMaker -DMULTIINSTANCE -DCIMAP -DPARADISE_PRODUCTION_HARDWARE paradise.dme docker_build: name: Build (Docker) runs-on: ubuntu-latest steps: - name: Checkout Project uses: actions/checkout@v7.0.0 - name: Load Build Dependencies id: deps shell: bash run: | set -euo pipefail source ./_build_dependencies.sh # export as step outputs { echo "NODE_VERSION=$NODE_VERSION" echo "RUST_VERSION=$RUST_VERSION" echo "STABLE_BYOND_MAJOR=$STABLE_BYOND_MAJOR" echo "STABLE_BYOND_MINOR=$STABLE_BYOND_MINOR" # metadata for provenance echo "VCS_REF=${GITHUB_SHA}" echo "BUILD_DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ)" } >> "$GITHUB_OUTPUT" - name: Generate Docker Metadata id: docker_meta uses: docker/metadata-action@v6.2.0 with: images: | ghcr.io/paradisess13/paradise tags: | # branch event type=ref,event=branch # pull request event type=ref,event=pr # full length sha type=sha,format=long - name: Login to GitHub Container Registry uses: docker/login-action@v4.4.0 if: ${{ github.event_name != 'pull_request' }} with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v4.2.0 - name: Push Docker Image uses: docker/build-push-action@v7.3.0 with: context: . tags: ${{ steps.docker_meta.outputs.tags }} labels: ${{ steps.docker_meta.outputs.labels }} push: ${{ github.event_name != 'pull_request' }} build-args: | NODE_VERSION=${{ steps.deps.outputs.NODE_VERSION }} RUST_VERSION=${{ steps.deps.outputs.RUST_VERSION }} STABLE_BYOND_MAJOR=${{ steps.deps.outputs.STABLE_BYOND_MAJOR }} STABLE_BYOND_MINOR=${{ steps.deps.outputs.STABLE_BYOND_MINOR }} VCS_REF=${{ steps.deps.outputs.VCS_REF }} BUILD_DATE=${{ steps.deps.outputs.BUILD_DATE }} cache-from: type=gha cache-to: type=gha,mode=max station_mapload_tests: name: Station Tests runs-on: ubuntu-22.04 strategy: fail-fast: false # Let all map tests run to completion matrix: station: ['boxstation', 'deltastation', 'metastation', 'cerestation', 'emeraldstation'] byondtype: ['STABLE'] steps: - uses: actions/checkout@v7.0.0 - name: Restore BYOND from Cache uses: ./.github/actions/restore_or_install_byond with: release: ${{ matrix.byondtype }} - name: Compile & Run Unit Tests run: | tools/ci/install_byond.sh '${{ matrix.byondtype }}' source $HOME/BYOND/byond/bin/byondsetup DreamMaker -DMAP_TESTS -DTEST_CONFIG_OVERRIDE=\"unit_tests\" -DMULTIINSTANCE -DCIBUILDING paradise.dme mkdir -p data echo '/datum/map/${{ matrix.station }}' > data/next_map.txt tools/ci/run_server.sh unit_tests_and_sql: name: Unit Tests + SQL Validation runs-on: ubuntu-22.04 strategy: fail-fast: false matrix: byondtype: ['STABLE'] steps: - uses: actions/checkout@v7.0.0 - name: Restore BYOND from Cache uses: ./.github/actions/restore_or_install_byond with: release: ${{ matrix.byondtype }} - name: Setup & Validate DB run: | sudo systemctl start mysql python3 tools/ci/generate_sql_scripts.py tools/ci/validate_sql.sh - name: Compile & Run Unit Tests run: | tools/ci/install_byond.sh '${{ matrix.byondtype }}' source $HOME/BYOND/byond/bin/byondsetup DreamMaker -DGAME_TESTS -DTEST_CONFIG_OVERRIDE=\"unit_tests\" -DMULTIINSTANCE -DCIBUILDING paradise.dme mkdir -p data echo '/datum/map/test_tiny' > data/next_map.txt tools/ci/run_server.sh