diff --git a/.github/workflows/ci-suite.yml b/.github/workflows/ci-suite.yml index 772f889f4b..b467636cf6 100644 --- a/.github/workflows/ci-suite.yml +++ b/.github/workflows/ci-suite.yml @@ -6,9 +6,812 @@ on: - dev - master pull_request: + branches: + - devname: 'CI' + +on: + push: branches: - dev - master + pull_request: + branches: + - dev + - master + +env: + TGS4_TEST_DISCORD_CHANNEL: ${{ secrets.DISCORD_CHANNEL_ID }} + TGS4_TEST_DISCORD_TOKEN: ${{ secrets.DISCORD_TOKEN }} + TGS4_TEST_IRC_CHANNEL: ${{ secrets.IRC_CHANNEL }} + TGS4_TEST_IRC_CONNECTION_STRING: ${{ secrets.IRC_CONNECTION_STRING }} + TGS4_TEST_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + TGS4_RELEASE_NOTES_TOKEN: ${{ secrets.GITHUB_TOKEN }} + +jobs: + dmapi-build: + name: Build DMAPI + env: + BYOND_MAJOR: 513 + BYOND_MINOR: 1527 + runs-on: ubuntu-latest + steps: + - name: Install x86 libc Dependencies + run: | + sudo dpkg --add-architecture i386 + sudo apt-get update + sudo apt-get install -y libc6-i386 libstdc++6:i386 + + - name: Install BYOND + if: steps.cache-byond.outputs.cache-hit != 'true' + run: | + echo "Setting up BYOND." + mkdir -p "$HOME/BYOND-${{ env.BYOND_MAJOR }}.${{ env.BYOND_MINOR }}" + cd "$HOME/BYOND-${{ env.BYOND_MAJOR }}.${{ env.BYOND_MINOR }}" + curl "http://www.byond.com/download/build/${{ env.BYOND_MAJOR }}/${{ env.BYOND_MAJOR }}.${{ env.BYOND_MINOR }}_byond_linux.zip" -o byond.zip + unzip byond.zip + cd byond + make here + exit 0 + + - name: Checkout + uses: actions/checkout@v1 + + - name: Build DMAPI Test Project + run: | + set -e + retval=1 + source $HOME/BYOND-${{ env.BYOND_MAJOR }}.${{ env.BYOND_MINOR }}/byond/bin/byondsetup + + if hash DreamMaker 2>/dev/null + then + DreamMaker tests/DMAPI/BasicOperation/basic_operation_test.dme 2>&1 | tee result.log + retval=$? + if ! grep '\- 0 errors, 0 warnings' result.log + then + retval=1 + fi + else + echo "Couldn't find the DreamMaker executable, aborting." + retval=2 + fi + exit $retval + + dox-build: + name: Build Doxygen Site + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v1 + + - name: Patch Doxyfile + run: | + VERSION=$(cat "build/Version.props" | grep -oPm1 "(?<=)[^<]+") + echo -e "\nPROJECT_NUMBER = $VERSION\nINPUT = .\nOUTPUT_DIRECTORY = ./doxout\nPROJECT_LOGO = ./build/tgs.ico\nHAVE_DOT=YES" >> "docs/Doxyfile" + + - name: Doxygen Build + uses: mattnotmitt/doxygen-action@v1 + with: + doxyfile-path: 'docs/Doxyfile' + + - name: gh-pages push + if: github.event_name == 'push' && github.event.ref == 'refs/heads/dev' + run: | + git clone -b gh-pages --single-branch "https://git@github.com/tgstation/tgstation-server" $HOME/tgsdox + pushd $HOME/tgsdox + rm -r * + popd + echo ./doxout/* | xargs sudo mv -t $HOME/tgsdox + cd $HOME/tgsdox + git config --global push.default simple + git config user.name "tgstation-server" + git config user.email "tgstation-server@tgstation13.org" + echo '# THIS BRANCH IS AUTO GENERATED BY GITHUB ACTIONS' > README.md + + # Need to create a .nojekyll file to allow filenames starting with an underscore + # to be seen on the gh-pages site. Therefore creating an empty .nojekyll file. + echo "" > .nojekyll + echo "Adding files..." + git add --all + echo "Committing..." + git diff-index --quiet HEAD || git commit -m "Deploy code docs to GitHub Pages for workflow run ${{ github.run_number }}" -m "Commit: ${{ github.event.head_commit.id }}" + echo "Pushing..." + git push -f "https://${{ secrets.DEV_PUSH_TOKEN }}@github.com/tgstation/tgstation-server" 2>&1 + + docker-build: + name: Build Docker Image + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v1 + + - name: Build Docker Image + run: docker build . -f build/Dockerfile + + linux-unit-tests: + name: Linux Unit Tests + strategy: + matrix: + configuration: [ 'Debug', 'Release' ] + runs-on: ubuntu-latest + steps: + - name: Install Node 12.X + uses: actions/setup-node@v1 + with: + node-version: 12.x + + - name: Setup dotnet 3.1.X + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 3.1.x + + - name: Checkout + uses: actions/checkout@v1 + + - name: Build + run: dotnet build -c ${{ matrix.configuration }}NoService + + - name: Run Unit Tests + run: sudo dotnet test tgstation-server.sln --no-build --filter FullyQualifiedName!~IntegrationTest -l "console;verbosity=detailed;noprogress=true" -c ${{ matrix.configuration }}NoService --collect:"XPlat Code Coverage" --settings build/coverlet.runsettings -r ./TestResults + + - name: Store Code Coverage + uses: actions/upload-artifact@v2 + with: + name: linux-unit-test-coverage-${{ matrix.configuration }} + path: ./TestResults/ + + windows-unit-tests: + name: Windows Unit Tests + strategy: + matrix: + configuration: [ 'Debug', 'Release' ] + runs-on: windows-latest + steps: + - name: Checkout + uses: actions/checkout@v1 + + - name: Build + run: dotnet build -c ${{ matrix.configuration }} + + - name: Run Unit Tests + run: dotnet test tgstation-server.sln --no-build --filter FullyQualifiedName!~IntegrationTest -l "console;verbosity=detailed;noprogress=true" -c ${{ matrix.configuration }} --collect:"XPlat Code Coverage" --settings build/coverlet.runsettings -r ./TestResults + + - name: Store Code Coverage + uses: actions/upload-artifact@v2 + with: + name: windows-unit-test-coverage-${{ matrix.configuration }} + path: ./TestResults/ + + windows-integration-test: + name: Windows Integration Test + needs: dmapi-build + env: + TGS4_TEST_DATABASE_TYPE: SqlServer + TGS4_TEST_DUMP_API_SPEC: yes + strategy: + matrix: + watchdog-type: [ 'Basic', 'System' ] + configuration: [ 'Debug', 'Release' ] + runs-on: windows-latest + steps: + - name: Set General__UseBasicWatchdog + if: ${{ matrix.watchdog-type == 'Basic' }} + run: echo "General__UseBasicWatchdog=true" >> $GITHUB_ENV + + - name: Set TGS4_TEST_CONNECTION_STRING + run: echo "TGS4_TEST_CONNECTION_STRING=Server=(localdb)\MSSQLLocalDB;Integrated Security=true;Initial Catalog=TGS_${{ matrix.watchdog-type }}_${{ matrix.configuration }};Application Name=tgstation-server" >> $GITHUB_ENV + + - name: Checkout + uses: actions/checkout@v1 + + - name: Set TGS4_TEST_PULL_REQUEST_NUMBER + if: ${{ github.event_name == 'pull_request' }} + run: echo "TGS4_TEST_PULL_REQUEST_NUMBER=${{ github.event.number }}" >> $GITHUB_ENV + + - name: Set TGS4_GITHUB_REF for PR + if: ${{ github.event_name == 'pull_request' }} + run: echo "TGS4_GITHUB_REF=${{ github.event.base_ref }}" >> $GITHUB_ENV + + - name: Set TGS4_GITHUB_REF for push + if: ${{ github.event_name == 'push' }} + run: echo "TGS4_GITHUB_REF=${{ github.event.ref }}" >> $GITHUB_ENV + + - name: Run Integration Test + run: | + cd tests/Tgstation.Server.Tests + Start-Sleep -Seconds 10 + dotnet test -c ${{ matrix.configuration }} -l "console;verbosity=detailed;noprogress=true" --collect:"XPlat Code Coverage" --settings ../../build/coverlet.runsettings -r ./TestResults + + - name: Store Code Coverage + uses: actions/upload-artifact@v2 + with: + name: windows-integration-test-coverage-${{ matrix.configuration }}-${{ matrix.watchdog-type }} + path: tests/Tgstation.Server.Tests/TestResults/ + + - name: Store OpenAPI Spec + if: ${{ matrix.configuration == 'Release' && matrix.watchdog-type == 'System' }} + uses: actions/upload-artifact@v2 + with: + name: openapi-spec + path: C:/swagger.json + + - name: Package Server Service + if: ${{ matrix.configuration == 'Release' && matrix.watchdog-type == 'Basic' }} + run: | + cd src/Tgstation.Server.Host.Service + dotnet publish -c ${{ matrix.configuration }} -o ../../Artifacts/Service + cd ../Tgstation.Server.Host + dotnet publish -c ${{ matrix.configuration }} --no-build -o ../../Artifacts/Service/lib/Default + + - name: Store Server Service + if: ${{ matrix.configuration == 'Release' && matrix.watchdog-type == 'Basic' }} + uses: actions/upload-artifact@v2 + with: + name: ServerService + path: Artifacts/Service/ + + linux-integration-tests: + name: Linux Integration Test + needs: dmapi-build + services: # We start all dbs here so we can just code the stuff once + postgres: + image: postgres + ports: + - 5432:5432 + env: + POSTGRES_PASSWORD: postgres + # Set health checks to wait until postgres has started + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + mariadb: + image: mariadb + ports: + - 3306:3306 + env: + MYSQL_ROOT_PASSWORD: mariadb + options: >- + --health-cmd="mysqladmin ping" + --health-interval=5s + --health-timeout=2s + --health-retries=3 + mysql: + image: mysql:5.7.31 + ports: + - 3307:3306 + env: + MYSQL_ROOT_PASSWORD: mysql + options: >- + --health-cmd="mysqladmin ping" + --health-interval=10s + --health-timeout=5s + --health-retries=3 + strategy: + matrix: + database-type: [ 'Sqlite', 'PostgresSql', 'MariaDB', 'MySql' ] + watchdog-type: [ 'Basic', 'System' ] + configuration: [ 'Debug', 'Release' ] + runs-on: ubuntu-latest + steps: + - name: Disable ptrace_scope + run: echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope + + - name: Install Native Dependencies + run: | + sudo dpkg --add-architecture i386 + sudo apt-get update + sudo apt-get install -y libc6-i386 libstdc++6:i386 gdb + + - name: Install Node 12.X + uses: actions/setup-node@v1 + with: + node-version: 12.x + + - name: Setup dotnet + uses: actions/setup-dotnet@v1 + with: + dotnet-version: ${{ matrix.dotnet }} + + - name: Set Sqlite Connection Info + if: ${{ matrix.database-type == 'Sqlite' }} + run: | + echo "TGS4_TEST_DATABASE_TYPE=Sqlite" >> $GITHUB_ENV + echo "TGS4_TEST_CONNECTION_STRING=Data Source=TGS_${{ matrix.watchdog-type }}_${{ matrix.configuration }}.sqlite3;Mode=ReadWriteCreate" >> $GITHUB_ENV + + - name: Set PostgresSql Connection Info + if: ${{ matrix.database-type == 'PostgresSql' }} + run: | + echo "TGS4_TEST_DATABASE_TYPE=PostgresSql" >> $GITHUB_ENV + echo "TGS4_TEST_CONNECTION_STRING=Application Name=tgstation-server;Host=127.0.0.1;Username=postgres;Password=postgres;Database=TGS__${{ matrix.watchdog-type }}_${{ matrix.configuration }}" >> $GITHUB_ENV + + - name: Set MariaDB Connection Info + if: ${{ matrix.database-type == 'MariaDB' }} + run: | + echo "TGS4_TEST_DATABASE_TYPE=MariaDB" >> $GITHUB_ENV + echo "TGS4_TEST_CONNECTION_STRING=Server=127.0.0.1;uid=root;pwd=mariadb;database=tgs__${{ matrix.watchdog-type }}_${{ matrix.configuration }}" >> $GITHUB_ENV + + - name: Set MySQL Connection Info + if: ${{ matrix.database-type == 'MySql' }} + run: | + echo "TGS4_TEST_DATABASE_TYPE=MySql" >> $GITHUB_ENV + echo "TGS4_TEST_CONNECTION_STRING=Server=127.0.0.1;Port=3307;uid=root;pwd=mysql;database=tgs__${{ matrix.watchdog-type }}_${{ matrix.configuration }}" >> $GITHUB_ENV + echo "Database__ServerVersion=5.7.31" >> $GITHUB_ENV + + - name: Set General__UseBasicWatchdog + if: ${{ matrix.watchdog-type == 'Basic' }} + run: echo "General__UseBasicWatchdog=true" >> $GITHUB_ENV + + - name: Checkout + uses: actions/checkout@v1 + + - name: Set TGS4_TEST_PULL_REQUEST_NUMBER + if: ${{ github.event_name == 'pull_request' }} + run: echo "TGS4_TEST_PULL_REQUEST_NUMBER=${{ github.event.number }}" >> $GITHUB_ENV + + - name: Set TGS4_GITHUB_REF for PR + if: ${{ github.event_name == 'pull_request' }} + run: echo "TGS4_GITHUB_REF=${{ github.event.base_ref }}" >> $GITHUB_ENV + + - name: Set TGS4_GITHUB_REF for push + if: ${{ github.event_name == 'push' }} + run: echo "TGS4_GITHUB_REF=${{ github.event.ref }}" >> $GITHUB_ENV + + - name: Run Integration Test + run: | + cd tests/Tgstation.Server.Tests + sleep 10 + dotnet test -c ${{ matrix.configuration }} -l "console;verbosity=detailed;noprogress=true" --collect:"XPlat Code Coverage" --settings ../../build/coverlet.runsettings -r ./TestResults + + - name: Store Code Coverage + uses: actions/upload-artifact@v2 + with: + name: linux-integration-test-coverage-${{ matrix.configuration }}-${{ matrix.watchdog-type }}-${{ matrix.database-type }} + path: tests/Tgstation.Server.Tests/TestResults/ + + - name: Package Server Console + if: ${{ matrix.configuration == 'Release' && matrix.watchdog-type == 'System' && matrix.database-type == 'MariaDB' }} + run: | + cd src/Tgstation.Server.Host.Console + dotnet publish -c ${{ matrix.configuration }} -o ../../Artifacts/Console + cd ../Tgstation.Server.Host + dotnet publish -c ${{ matrix.configuration }} --no-build -o ../../Artifacts/Console/lib/Default + + - name: Package Server Update Package + if: ${{ matrix.configuration == 'Release' && matrix.watchdog-type == 'System' && matrix.database-type == 'PostgresSql' }} + run: | + cd src/Tgstation.Server.Host + dotnet publish -c ${{ matrix.configuration }} --no-build -o ../../Artifacts/ServerUpdate + + - name: Store Server Console + if: ${{ matrix.configuration == 'Release' && matrix.watchdog-type == 'System' && matrix.database-type == 'MariaDB' }} + uses: actions/upload-artifact@v2 + with: + name: ServerConsole + path: Artifacts/Console/ + + - name: Store Server Update Package + if: ${{ matrix.configuration == 'Release' && matrix.watchdog-type == 'System' && matrix.database-type == 'PostgresSql' }} + uses: actions/upload-artifact@v2 + with: + name: ServerUpdatePackage + path: Artifacts/ServerUpdate/ + + validate-openapi-spec: + name: OpenAPI Spec Validation + needs: windows-integration-test + runs-on: ubuntu-latest + steps: + - name: Install Node 12.X + uses: actions/setup-node@v1 + with: + node-version: 12.x + + - name: Install IBM OpenAPI Validator + run: npm i -g ibm-openapi-validator + + - name: Checkout + uses: actions/checkout@v1 + + - name: Retrieve OpenAPI Spec + uses: actions/download-artifact@v2 + with: + name: openapi-spec + path: ./swagger + + - name: Lint OpenAPI Spec + run: npx lint-openapi -p -c build/OpenApiValidationSettings.json ./swagger/swagger.json + + upload-code-coverage: + name: Upload Code Coverage + needs: [linux-unit-tests, linux-integration-tests, windows-unit-tests, windows-integration-test] + runs-on: ubuntu-latest + steps: + - name: Checkout for .codecov.yml + uses: actions/checkout@v1 + + - name: Retrieve Linux Unit Test Coverage (Debug) + uses: actions/download-artifact@v2 + with: + name: linux-unit-test-coverage-Debug + path: ./code_coverage/unit_tests/linux_unit_tests_debug + + - name: Retrieve Linux Unit Test Coverage (Release) + uses: actions/download-artifact@v2 + with: + name: linux-unit-test-coverage-Release + path: ./code_coverage/unit_tests/linux_unit_tests_release + + - name: Retrieve Linux Integration Test Coverage (Debug, Basic, Sqlite) + uses: actions/download-artifact@v2 + with: + name: linux-integration-test-coverage-Debug-Basic-Sqlite + path: ./code_coverage/integration_tests/linux_integration_tests_debug_basic_sqlite + + - name: Retrieve Linux Integration Test Coverage (Release, Basic, Sqlite) + uses: actions/download-artifact@v2 + with: + name: linux-integration-test-coverage-Release-Basic-Sqlite + path: ./code_coverage/integration_tests/linux_integration_tests_release_basic_sqlite + + - name: Retrieve Linux Integration Test Coverage (Debug, System, Sqlite) + uses: actions/download-artifact@v2 + with: + name: linux-integration-test-coverage-Debug-System-Sqlite + path: ./code_coverage/integration_tests/linux_integration_tests_debug_system_sqlite + + - name: Retrieve Linux Integration Test Coverage (Release, System, Sqlite) + uses: actions/download-artifact@v2 + with: + name: linux-integration-test-coverage-Release-System-Sqlite + path: ./code_coverage/integration_tests/linux_integration_tests_release_system_sqlite + + - name: Retrieve Linux Integration Test Coverage (Debug, Basic, PostgresSql) + uses: actions/download-artifact@v2 + with: + name: linux-integration-test-coverage-Debug-Basic-PostgresSql + path: ./code_coverage/integration_tests/linux_integration_tests_debug_basic_postgressql + + - name: Retrieve Linux Integration Test Coverage (Release, Basic, PostgresSql) + uses: actions/download-artifact@v2 + with: + name: linux-integration-test-coverage-Release-Basic-PostgresSql + path: ./code_coverage/integration_tests/linux_integration_tests_release_basic_postgressql + + - name: Retrieve Linux Integration Test Coverage (Debug, System, PostgresSql) + uses: actions/download-artifact@v2 + with: + name: linux-integration-test-coverage-Debug-System-PostgresSql + path: ./code_coverage/integration_tests/linux_integration_tests_debug_system_postgressql + + - name: Retrieve Linux Integration Test Coverage (Release, System, PostgresSql) + uses: actions/download-artifact@v2 + with: + name: linux-integration-test-coverage-Release-System-PostgresSql + path: ./code_coverage/integration_tests/linux_integration_tests_release_system_mariadb + + - name: Retrieve Linux Integration Test Coverage (Debug, Basic, MariaDB) + uses: actions/download-artifact@v2 + with: + name: linux-integration-test-coverage-Debug-Basic-MariaDB + path: ./code_coverage/integration_tests/linux_integration_tests_debug_basic_mariadb + + - name: Retrieve Linux Integration Test Coverage (Release, Basic, MariaDB) + uses: actions/download-artifact@v2 + with: + name: linux-integration-test-coverage-Release-Basic-MariaDB + path: ./code_coverage/integration_tests/linux_integration_tests_release_basic_mariadb + + - name: Retrieve Linux Integration Test Coverage (Debug, System, MariaDB) + uses: actions/download-artifact@v2 + with: + name: linux-integration-test-coverage-Debug-System-MariaDB + path: ./code_coverage/integration_tests/linux_integration_tests_debug_system_mariadb + + - name: Retrieve Linux Integration Test Coverage (Release, System, MariaDB) + uses: actions/download-artifact@v2 + with: + name: linux-integration-test-coverage-Release-System-MariaDB + path: ./code_coverage/integration_tests/linux_integration_tests_release_system_mysql + + - name: Retrieve Linux Integration Test Coverage (Debug, Basic, MySql) + uses: actions/download-artifact@v2 + with: + name: linux-integration-test-coverage-Debug-Basic-MySql + path: ./code_coverage/integration_tests/linux_integration_tests_debug_basic_mysql + + - name: Retrieve Linux Integration Test Coverage (Release, Basic, MySql) + uses: actions/download-artifact@v2 + with: + name: linux-integration-test-coverage-Release-Basic-MySql + path: ./code_coverage/integration_tests/linux_integration_tests_release_basic_mysql + + - name: Retrieve Linux Integration Test Coverage (Debug, System, MySql) + uses: actions/download-artifact@v2 + with: + name: linux-integration-test-coverage-Debug-System-MySql + path: ./code_coverage/integration_tests/linux_integration_tests_debug_system_mysql + + - name: Retrieve Linux Integration Test Coverage (Release, System, MySql) + uses: actions/download-artifact@v2 + with: + name: linux-integration-test-coverage-Release-System-MySql + path: ./code_coverage/integration_tests/linux_integration_tests_release_system_mysql + + - name: Retrieve Windows Unit Test Coverage (Debug) + uses: actions/download-artifact@v2 + with: + name: windows-unit-test-coverage-Debug + path: ./code_coverage/unit_tests/windows_unit_tests_debug + + - name: Retrieve Windows Unit Test Coverage (Release) + uses: actions/download-artifact@v2 + with: + name: windows-unit-test-coverage-Release + path: ./code_coverage/unit_tests/windows_unit_tests_release + + - name: Retrieve Windows Integration Test Coverage (Debug, Basic) + uses: actions/download-artifact@v2 + with: + name: windows-integration-test-coverage-Debug-Basic + path: ./code_coverage/integration_tests/windows_integration_tests_debug_basic + + - name: Retrieve Windows Integration Test Coverage (Release, Basic) + uses: actions/download-artifact@v2 + with: + name: windows-integration-test-coverage-Release-Basic + path: ./code_coverage/integration_tests/windows_integration_tests_release_basic + + - name: Retrieve Windows Integration Test Coverage (Debug, System) + uses: actions/download-artifact@v2 + with: + name: windows-integration-test-coverage-Debug-System + path: ./code_coverage/integration_tests/windows_integration_tests_debug_system + + - name: Retrieve Windows Integration Test Coverage (Release, System) + uses: actions/download-artifact@v2 + with: + name: windows-integration-test-coverage-Release-System + path: ./code_coverage/integration_tests/windows_integration_tests_release_system + + - name: Upload Unit Test Coverage to CodeCov + uses: codecov/codecov-action@v1 + with: + directory: ./code_coverage/unit_tests + flags: unittests + fail_ci_if_error: true + + - name: Upload Integration Test Coverage to CodeCov + uses: codecov/codecov-action@v1 + with: + directory: ./code_coverage/integration_tests + flags: integration + fail_ci_if_error: true + + deploy-http: + name: Deploy HTTP API + needs: [upload-code-coverage, validate-openapi-spec] + runs-on: windows-latest + if: github.event_name == 'push' && github.event.ref == 'refs/heads/master' && contains(github.event.head_commit.message, '[APIDeploy]') + steps: + - name: Checkout + uses: actions/checkout@v1 + + - name: Parse API version + shell: powershell + run: | + [XML]$versionXML = Get-Content build/Version.props + $apiVersion = $versionXML.Project.PropertyGroup.TgsApiVersion + Write-Host "TGS_API_VERSION=$apiVersion" >> $env:GITHUB_ENV + + - name: Retrieve OpenAPI Spec + uses: actions/download-artifact@v2 + with: + name: openapi-spec + path: swagger + + - name: Create GitHub Release + uses: juitnow/github-action-create-release@v1 + id: create_release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: api-v${{ env.TGS_API_VERSION }} + release_name: tgstation-server 4 API v${{ env.TGS_API_VERSION }} + body: The TGS HTTP API + commitish: ${{ github.event.head_commit.id }} + + - name: Upload OpenApi Spec + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./swagger/swagger.json + asset_name: swagger.json + asset_content_type: application/json + + deploy-dm: + name: Deploy DreamMaker API + needs: [upload-code-coverage, validate-openapi-spec] + runs-on: windows-latest + if: github.event_name == 'push' && github.event.ref == 'refs/heads/master' && contains(github.event.head_commit.message, '[DMDeploy]') + steps: + + - name: Checkout + uses: actions/checkout@v1 + + - name: Parse DMAPI version + shell: powershell + run: | + [XML]$versionXML = Get-Content build/Version.props + $dmVersion = $versionXML.Project.PropertyGroup.TgsDmapiVersion + Write-Host "TGS_DM_VERSION=$dmVersion" >> $env:GITHUB_ENV + + - name: Zip DMAPI + shell: powershell + run: | + &"C:/Program Files/7-Zip/7z.exe" a DMAPI.zip ./src/DMAPI/* -tzip + + - name: Create GitHub Release + uses: juitnow/github-action-create-release@v1 + id: create_release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: dmapi-v${{ env.TGS_DM_VERSION }} + release_name: tgstation-server 4 DMAPI v${{ env.TGS_DM_VERSION }} + body: The TGS DMAPI + commitish: ${{ github.event.head_commit.id }} + + - name: Upload DMAPI Artifact + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./DMAPI.zip + asset_name: DMAPI.zip + asset_content_type: application/zip + + deploy-client: + name: Deploy Nuget Packages + needs: [upload-code-coverage, validate-openapi-spec] + runs-on: ubuntu-latest + if: github.event_name == 'push' && github.event.ref == 'refs/heads/master' && contains(github.event.head_commit.message, '[NugetDeploy]') + steps: + - name: Checkout + uses: actions/checkout@v1 + + - name: Publish API to NuGet + uses: rohith/publish-nuget@v2 + with: + PROJECT_FILE_PATH: src/Tgstation.Server.Api/Tgstation.Server.Api.csproj + TAG_COMMIT: false + INCLUDE_SYMBOLS: true + NUGET_KEY: ${{ secrets.NUGET_API_KEY }} + + - name: Publish Client to NuGet + uses: rohith/publish-nuget@v2 + with: + PROJECT_FILE_PATH: src/Tgstation.Server.Client/Tgstation.Server.Client.csproj + TAG_COMMIT: false + INCLUDE_SYMBOLS: true + NUGET_KEY: ${{ secrets.NUGET_API_KEY }} + + deploy-tgs: + name: Deploy TGS + needs: [upload-code-coverage, validate-openapi-spec] + runs-on: windows-latest + if: github.event_name == 'push' && github.event.ref == 'refs/heads/master' && contains(github.event.head_commit.message, '[TGSDeploy]') + steps: + - name: Checkout + uses: actions/checkout@v1 + + - name: Parse TGS version + shell: powershell + run: | + [XML]$versionXML = Get-Content build/Version.props + $tgsVersion = $versionXML.Project.PropertyGroup.TgsCoreVersion + Write-Host "TGS_VERSION=$tgsVersion" >> $env:GITHUB_ENV + + - name: Retrieve Server Service + uses: actions/download-artifact@v2 + with: + name: ServerService + path: ServerService + + - name: Retrieve Server Console + uses: actions/download-artifact@v2 + with: + name: ServerConsole + path: ServerConsole + + - name: Retrieve Server Update Package + uses: actions/download-artifact@v2 + with: + name: ServerUpdatePackage + path: ServerUpdatePackage + + - name: Retrieve OpenAPI Spec + uses: actions/download-artifact@v2 + with: + name: openapi-spec + path: swagger + + - name: Zip Artifacts + shell: powershell + run: | + &"C:/Program Files/7-Zip/7z.exe" a DMAPI.zip ./src/DMAPI/* -tzip + &"C:/Program Files/7-Zip/7z.exe" a ServerService.zip ./ServerService/* -tzip + &"C:/Program Files/7-Zip/7z.exe" a ServerConsole.zip ./ServerConsole/* -tzip + &"C:/Program Files/7-Zip/7z.exe" a ServerUpdatePackage.zip ./ServerUpdatePackage/* -tzip + + - name: Generate Release Notes + run: dotnet run -c Release -p tools/ReleaseNotes ${{ env.TGS_VERSION }} build/Version.props + + - name: Create GitHub Release + uses: actions/create-release@v1 + id: create_release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token + with: + tag_name: tgstation-server-v${{ env.TGS_VERSION }} + release_name: tgstation-server-v${{ env.TGS_VERSION }} + body_path: release_notes.md + commitish: ${{ github.event.head_commit.id }} + + - name: Upload Server Console Artifact + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./ServerConsole.zip + asset_name: ServerConsole.zip + asset_content_type: application/zip + + - name: Upload Server Service Artifact + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./ServerService.zip + asset_name: ServerService.zip + asset_content_type: application/zip + + - name: Upload DMAPI Artifact + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./DMAPI.zip + asset_name: DMAPI.zip + asset_content_type: application/zip + + - name: Upload OpenApi Spec Artifact + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./swagger/swagger.json + asset_name: swagger.json + asset_content_type: application/json + + - name: Upload Server Update Package Artifact + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./ServerUpdatePackage.zip + asset_name: ServerUpdatePackage.zip + asset_content_type: application/zip + + - master env: TGS4_TEST_DISCORD_CHANNEL: ${{ secrets.DISCORD_CHANNEL_ID }}