name: 'CI' on: push: branches: - dev - master pull_request: branches: - dev - master env: TGS_DOTNET_VERSION: 3.1.x TGS_TEST_DISCORD_CHANNEL: ${{ secrets.DISCORD_CHANNEL_ID }} TGS_TEST_DISCORD_TOKEN: ${{ secrets.DISCORD_TOKEN }} TGS_TEST_IRC_CHANNEL: ${{ secrets.IRC_CHANNEL }} TGS_TEST_IRC_CONNECTION_STRING: ${{ secrets.IRC_CONNECTION_STRING }} TGS_TEST_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} TGS_RELEASE_NOTES_TOKEN: ${{ secrets.DEV_PUSH_TOKEN }} jobs: dmapi-build: name: Build DMAPI env: BYOND_MAJOR: 513 BYOND_MINOR: 1536 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 -o APT::Immediate-Configure=0 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 -n 10 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: Upgrade NPM run: npm install -g npm - 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: Upgrade NPM run: sudo npm install -g npm - name: Setup dotnet uses: actions/setup-dotnet@v1 with: dotnet-version: ${{ env.TGS_DOTNET_VERSION }} - 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: [ 'Release' ] runs-on: windows-latest steps: - name: Setup dotnet uses: actions/setup-dotnet@v1 with: dotnet-version: ${{ env.TGS_DOTNET_VERSION }} - name: Checkout uses: actions/checkout@v1 - name: Upgrade NPM run: npm install -g npm - name: Clean package cache as a temporary workaround for actions/setup-dotnet#155 run: dotnet clean && dotnet nuget locals all --clear - 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: TGS_TEST_DATABASE_TYPE: SqlServer TGS_TEST_DUMP_API_SPEC: yes strategy: matrix: watchdog-type: [ 'Basic', 'System' ] configuration: [ 'Debug', 'Release' ] runs-on: windows-latest steps: - name: Setup dotnet uses: actions/setup-dotnet@v1 with: dotnet-version: ${{ env.TGS_DOTNET_VERSION }} - name: Upgrade NPM run: npm install -g npm - name: Set General__UseBasicWatchdog if: ${{ matrix.watchdog-type == 'Basic' }} run: echo "General__UseBasicWatchdog=true" >> $Env:GITHUB_ENV - name: Set TGS_TEST_CONNECTION_STRING shell: bash run: | TGS_CONNSTRING_VALUE="Server=(localdb)\MSSQLLocalDB;Integrated Security=true;Initial Catalog=TGS_${{ matrix.watchdog-type }}_${{ matrix.configuration }};Application Name=tgstation-server" echo "TGS_TEST_CONNECTION_STRING=$(echo $TGS_CONNSTRING_VALUE)" >> $GITHUB_ENV - name: Checkout uses: actions/checkout@v1 - name: Set TGS_TEST_PULL_REQUEST_NUMBER if: ${{ github.event_name == 'pull_request' }} run: echo "TGS_TEST_PULL_REQUEST_NUMBER=${{ github.event.number }}" >> $Env:GITHUB_ENV - name: Set TGS_GITHUB_REF for PR if: ${{ github.event_name == 'pull_request' }} run: echo "TGS_GITHUB_REF=${{ github.base_ref }}" >> $Env:GITHUB_ENV - name: Set TGS_GITHUB_REF for push if: ${{ github.event_name == 'push' }} shell: bash run: | TEMP_GITHUB_REF="${{ github.event.ref }}" echo "TGS_GITHUB_REF=${TEMP_GITHUB_REF##*/}" >> $GITHUB_ENV - name: Clean package cache as a temporary workaround for actions/setup-dotnet#155 run: dotnet clean && dotnet nuget locals all --clear - 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 mv ../../Artifacts/Service/lib/Default/appsettings.yml ../../Artifacts/Service/appsettings.yml - 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: cyberboss/postgres-max-connections # Fork of _/postgres:latest with max_connections=500 becuase GitHub actions service containers have no way to set command lines. Rebuilds with updates. ports: - 5432:5432 env: POSTGRES_PASSWORD: postgres 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: [ 'System' ] configuration: [ '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 -o APT::Immediate-Configure=0 libc6-i386 libstdc++6:i386 gdb - name: Install Node 12.X uses: actions/setup-node@v1 with: node-version: 12.x - name: Upgrade NPM run: npm install -g npm - name: Setup dotnet uses: actions/setup-dotnet@v1 with: dotnet-version: ${{ env.TGS_DOTNET_VERSION }} - name: Set Sqlite Connection Info if: ${{ matrix.database-type == 'Sqlite' }} run: | echo "TGS_TEST_DATABASE_TYPE=Sqlite" >> $GITHUB_ENV echo "TGS_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 "TGS_TEST_DATABASE_TYPE=PostgresSql" >> $GITHUB_ENV echo "TGS_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 "TGS_TEST_DATABASE_TYPE=MariaDB" >> $GITHUB_ENV echo "TGS_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 "TGS_TEST_DATABASE_TYPE=MySql" >> $GITHUB_ENV echo "TGS_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 TGS_TEST_PULL_REQUEST_NUMBER if: ${{ github.event_name == 'pull_request' }} run: echo "TGS_TEST_PULL_REQUEST_NUMBER=${{ github.event.number }}" >> $GITHUB_ENV - name: Set TGS_GITHUB_REF for PR if: ${{ github.event_name == 'pull_request' }} run: echo "TGS_GITHUB_REF=${{ github.base_ref }}" >> $GITHUB_ENV - name: Set TGS_GITHUB_REF for push if: ${{ github.event_name == 'push' }} shell: bash run: | TEMP_GITHUB_REF="${{ github.event.ref }}" echo "TGS_GITHUB_REF=${TEMP_GITHUB_REF##*/}" >> $GITHUB_ENV - name: Run Integration Test run: | cd tests/Tgstation.Server.Tests sleep 10 dotnet test -c ${{ matrix.configuration }}NoService -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 }}NoService --no-build -o ../../Artifacts/Console/lib/Default mv ../../Artifacts/Console/lib/Default/appsettings.yml ../../Artifacts/Console/appsettings.yml - 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 }}NoService --no-build -o ../../Artifacts/ServerUpdate rm ../../Artifacts/ServerUpdate/appsettings.yml - 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 -v -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 (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 (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 (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 (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 (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' && 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 echo "TGS_API_VERSION=$apiVersion" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - 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' && 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 echo "TGS_DM_VERSION=$dmVersion" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - 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' && contains(github.event.head_commit.message, '[NugetDeploy]') steps: - name: Setup dotnet uses: actions/setup-dotnet@v1 with: dotnet-version: ${{ env.TGS_DOTNET_VERSION }} - 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 echo "TGS_VERSION=$tgsVersion" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - 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 }} - name: Create GitHub Release uses: actions/create-release@v1 id: create_release env: GITHUB_TOKEN: ${{ secrets.DEV_PUSH_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.DEV_PUSH_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.DEV_PUSH_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.DEV_PUSH_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.DEV_PUSH_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.DEV_PUSH_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ./ServerUpdatePackage.zip asset_name: ServerUpdatePackage.zip asset_content_type: application/zip deploy-docker: name: Deploy TGS (Docker) needs: [deploy-tgs] runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 - name: Parse TGS version run: | sudo apt-get update sudo apt-get install -y xmlstarlet echo "TGS_VERSION=$(xmlstarlet sel -N X="http://schemas.microsoft.com/developer/msbuild/2003" --template --value-of /X:Project/X:PropertyGroup/X:TgsCoreVersion build/Version.props)" >> $GITHUB_ENV - name: Docker Build and Push uses: elgohr/Publish-Docker-Github-Action@master with: name: tgstation/server username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} dockerfile: build/Dockerfile tags: "latest,v${{ env.TGS_VERSION }}"