diff --git a/.buildkite/nightly.steps.yaml b/.buildkite/nightly.steps.yaml index 5b543d74..6700940f 100644 --- a/.buildkite/nightly.steps.yaml +++ b/.buildkite/nightly.steps.yaml @@ -1,3 +1,15 @@ +script_runner: &script_runner + agents: + - "agent_count=8" + - "capable_of_building=platform" + - "environment=production" + - "machine_type=quarter" + - "permission_set=builder" + - "platform=linux" + - "queue=${CI_LINUX_BUILDER_QUEUE:-v3-1572524284-e64831bf1e88b227-------z}" + - "scaler_version=2" + - "working_hours_time_zone=london" + common: &common agents: - "agent_count=1" @@ -7,7 +19,7 @@ common: &common - "permission_set=builder" - "platform=windows" - "scaler_version=2" - - "queue=${CI_WINDOWS_BUILDER_QUEUE:-v3-1569490589-f9345a43b21a6cec-------z}" + - "queue=${CI_WINDOWS_BUILDER_QUEUE:-v4-2019-11-07-bk3700-fbffad576b9676d7}" # Has FASTbuild disabled timeout_in_minutes: 60 # TODO(ENG-548): reduce timeout once agent-cold-start is optimised. retry: automatic: @@ -17,9 +29,21 @@ common: &common plugins: - ca-johnson/taskkill#v4.1: ~ +# NOTE: step labels turn into commit-status names like {org}/{repo}/{pipeline}/{step-label}, lower-case and hyphenated. +# These are then relied on to have stable names by other things, so once named, please beware renaming has consequences. + steps: - - label: "build-and-deploy-:windows:" - command: powershell -NoProfile -NonInteractive -InputFormat Text -Command ./ci/setup-and-build.ps1 + - label: "generate-pipeline-steps" + commands: + - "chmod -R +rwx ci" + - "ci/generate-pipeline-steps.sh" + env: + ENGINE_VERSION: "${ENGINE_VERSION}" + <<: *script_runner + + - wait + + - label: "slack-notify" + if: build.env("SLACK_NOTIFY") == "true" || build.branch == "master" + command: "powershell -NoProfile -NonInteractive -InputFormat Text -Command ./ci/slack-notify.ps1" <<: *common # This folds the YAML named anchor into this step. Overrides, if any, should follow, not precede. - artifact_paths: - - "UnrealEngine/Engine/Programs/AutomationTool/Saved/Logs/*" diff --git a/Game/Content/Controllers/BP_GDK_PlayerController.uasset b/Game/Content/Controllers/BP_GDK_PlayerController.uasset index ef3e8ea4..e03472ab 100644 Binary files a/Game/Content/Controllers/BP_GDK_PlayerController.uasset and b/Game/Content/Controllers/BP_GDK_PlayerController.uasset differ diff --git a/Game/Content/GameMode/BP_DeathmatchGameState.uasset b/Game/Content/GameMode/BP_DeathmatchGameState.uasset index d934f38e..2b86cae3 100644 Binary files a/Game/Content/GameMode/BP_DeathmatchGameState.uasset and b/Game/Content/GameMode/BP_DeathmatchGameState.uasset differ diff --git a/Game/Source/GDKShooter/Private/Controllers/GDKPlayerController.cpp b/Game/Source/GDKShooter/Private/Controllers/GDKPlayerController.cpp index b94a390c..db1f5ad7 100644 --- a/Game/Source/GDKShooter/Private/Controllers/GDKPlayerController.cpp +++ b/Game/Source/GDKShooter/Private/Controllers/GDKPlayerController.cpp @@ -58,6 +58,8 @@ void AGDKPlayerController::BeginPlay() void AGDKPlayerController::Tick(float DeltaTime) { + Super::Tick(DeltaTime); + if (GetPawn()) { LatestPawnYaw = GetPawn()->GetActorRotation().Yaw; diff --git a/Game/Source/GDKShooter/Public/Game/Components/DeathmatchSpawnerComponent.h b/Game/Source/GDKShooter/Public/Game/Components/DeathmatchSpawnerComponent.h index cf203b60..3d808a41 100644 --- a/Game/Source/GDKShooter/Public/Game/Components/DeathmatchSpawnerComponent.h +++ b/Game/Source/GDKShooter/Public/Game/Components/DeathmatchSpawnerComponent.h @@ -26,6 +26,9 @@ class GDKSHOOTER_API UDeathmatchSpawnerComponent : public UActorComponent UFUNCTION(BlueprintCallable) void DisableSpawning() { bSpawningEnabled = false; } + UFUNCTION(BlueprintCallable) + bool IsSpawningEnabled() { return bSpawningEnabled; } + protected: AActor* GetSpawnPoint(APlayerController* Controller); diff --git a/Game/Source/GDKShooter/Public/Game/Components/TimerComponent.h b/Game/Source/GDKShooter/Public/Game/Components/TimerComponent.h index b5aabc75..3da295ba 100644 --- a/Game/Source/GDKShooter/Public/Game/Components/TimerComponent.h +++ b/Game/Source/GDKShooter/Public/Game/Components/TimerComponent.h @@ -43,7 +43,7 @@ class GDKSHOOTER_API UTimerComponent : public UActorComponent UPROPERTY(EditDefaultsOnly) bool bAutoStart = false; UPROPERTY(EditDefaultsOnly) - int32 DefaultTimerDuration = 300; + int32 DefaultTimerDuration = 7200; UPROPERTY(Replicated, BlueprintReadOnly) bool bIsTimerRunning = false; diff --git a/ci/deploy.ps1 b/ci/deploy.ps1 index 47e725bc..0572c075 100644 --- a/ci/deploy.ps1 +++ b/ci/deploy.ps1 @@ -8,7 +8,7 @@ param( Start-Event "deploy-game" "build-unreal-gdk-example-project-:windows:" # Use the shortened commit hash gathered during GDK plugin clone and the current date and time to distinguish the deployment $date_and_time = Get-Date -Format "MMdd_HHmm" - $deployment_name = "exampleproject_${date_and_time}_$($gdk_commit_hash)" + $deployment_name = "exampleproject$($env:STEP_NUMBER)_${date_and_time}_$($gdk_commit_hash)" $assembly_name = "$($deployment_name)_asm" pushd "spatial" @@ -66,7 +66,8 @@ pushd "spatial" "--snapshot=$deployment_snapshot_path", ` "--cluster_region=$deployment_cluster_region", ` "--log_level=debug", ` - "--tags=ttl_1_hours" + "--tags=ttl_1_hours", ` + "--deployment_description=`"Engine commit: $($env:ENGINE_COMMIT_HASH)`"" ` ) if ($launch_deployment_process.ExitCode -ne 0) { @@ -74,66 +75,12 @@ pushd "spatial" Throw "Deployment launch failed" } - # Send a Slack notification with a link to the new deployment and to the build. - # Read Slack webhook secret from the vault and extract the Slack webhook URL from it. - $slack_webhook_secret = "$(imp-ci secrets read --environment=production --buildkite-org=improbable --secret-type=slack-webhook --secret-name=unreal-gdk-slack-web-hook)" - $slack_webhook_url = $slack_webhook_secret | ConvertFrom-Json | %{$_.url} - - $deployment_url = "https://console.improbable.io/projects/${project_name}/deployments/${deployment_name}/overview" - $gdk_commit_url = "https://github.com/spatialos/UnrealGDK/tree/${gdk_commit_hash}" - $build_url = "$env:BUILDKITE_BUILD_URL" - - $json_message = [ordered]@{ - text = "Example Project build created by $env:BUILDKITE_BUILD_CREATOR succeeded and a deployment has been launched." - attachments= @( - @{ - fallback = "Find deployment here: $deployment_url and build here: $build_url" - color = "good" - fields= @( - @{ - title = "GDK branch" - value = "$gdk_branch_name" - short = "true" - } - @{ - title = "Example Project branch" - value = "$env:BUILDKITE_BRANCH" - short = "true" - } - ) - actions= @( - @{ - type = "button" - text = "Take me to the deployment" - url = "$deployment_url" - style = "primary" - } - @{ - type = "button" - text = "Take me to the GDK commit" - url = "$gdk_commit_url" - style = "primary" - } - @{ - type = "button" - text = "Take me to the build" - url = "$build_url" - style = "primary" - } - ) - } - ) - } - - $json_request = $json_message | ConvertTo-Json -Depth 10 - - Invoke-WebRequest -UseBasicParsing "$slack_webhook_url" -ContentType "application/json" -Method POST -Body "$json_request" - - } - else { + buildkite-agent meta-data set "deployment-name-$($env:STEP_NUMBER)" "$deployment_name" + buildkite-agent meta-data set "project-name" "$project_name" + buildkite-agent meta-data set "gdk-commit-hash" "$gdk_commit_hash)" + } else { Write-Log "Deployment will not be launched as you have passed in an argument specifying that it should not be (START_DEPLOYMENT=${launch_deployment}). Remove it to have your build launch a deployment." } - Finish-Event "launch-deployment" "deploy-unreal-gdk-example-project-:windows:" popd diff --git a/ci/generate-pipeline-steps.sh b/ci/generate-pipeline-steps.sh new file mode 100644 index 00000000..fd65e57f --- /dev/null +++ b/ci/generate-pipeline-steps.sh @@ -0,0 +1,39 @@ +#!/bin/bash +set -euo pipefail + +# Download the unreal-engine.version file from the GDK repo so we can run the example project builds on the same versions the GDK was run against +# This is not the pinnacle of engineering, as we rely on GitHub's web interface to download the file, but it seems like GitHub disallows git archive +# which would be our other option for downloading a single file +GDK_BRANCH_LOCAL="${GDK_BRANCH:-master}" +NUMBER_OF_TRIES=0 +while [ $NUMBER_OF_TRIES -lt 5 ]; do + CURL_TIMEOUT=$((10<