Coder Social home page Coder Social logo

sig-build's Introduction

sig-build's People

Contributors

amzn-changml avatar brianherrera avatar evanchia-ly-sdets avatar fuzzycarter avatar mcphedar avatar obwando avatar robhaco avatar shirangj avatar sptramer avatar tjmichaels avatar vincent6767 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sig-build's Issues

RFC - AR Redesign Proposal

Overview

SIG-Build is investigating making changes to the AR (Automated Review) to prioritize lowering infrastructure costs while still working on improving the developer experience and reducing build times. 

The purpose of this document is to initiate a discussion with the TSC (Technical Steering Committee) and all SIGs regarding the current state of the AR and how it can be updated to lower our infrastructure costs. Most of the discussion around the proposed options will remain at a high level with the implementation details to be outlined later. 

What is the AR?

The AR (Automated Review) refers to a set of jobs that perform automated testing for pull requests submitted to O3DE. These tests are required to pass before PRs are merged. A SIG maintainer can run the AR on a pull request after they've performed their code review. 

Check as shown in PRs (under CI/jenkins/pr-merge):

ar_checks

Jenkins pipeline view (shown after clicking on the Details link):

jenkins-pipeline

AR Infrastructure

The AR jobs are orchestrated by Jenkins Pipeline and are defined using a Jenkinsfile stored in the O3DE repo: https://github.com/o3de/o3de/blob/development/scripts/build/Jenkins/Jenkinsfile.

The Jenkins server and its build nodes are hosted in AWS. The build nodes utilize EC2 instances for the hosts and EBS volumes for the build workspace. When a pull request is submitted a pipeline is generated, however build nodes are not created until an AR run is triggered. After an AR run starts, the required platform instances are spun up, builds/tests are executed, and the instances are terminated at the end of the run. Jenkins then reports the results back to the pull request. The EBS volume is retained to cache artifacts for the next run. A daily automated task deletes the EBS volumes for merged and inactive PRs. 

Using this setup allows us to prioritize faster build times. However to reduce our costs, onboard new platforms, and maintain our developer velocity we will be investigating the following options. 

Options

SIG-Build is currently investigating the following options to reduce our infrastructure costs while still improving the PR experience for developers. 

1 - Migrate Jobs to GitHub Actions

The main reason to migrate to GitHub Actions is to take advantage of the lower cost infrastructure and allow contributors to easily run tests in their own fork. 

  • Lower cost: GitHub provides free usage of their standard hosted runners for public repos. These runners do have limited specs, so the main trade-off will be slower build times. 
  • Easier testing: When GitHub actions are added to a repo, those workflows are also included when a user forks the repo making it easier for them to run those same actions prior to submitting a PR. While we have automated our Jenkins Pipeline setup (https://github.com/o3de/o3de-jenkins-pipeline), providing GitHub Actions minimizes any infrastructure setup for contributors looking to test their changes. 

We have already migrated quicker running tests (Validation) to GitHub Actions. The next section will review the challenges of migration our builds and tests as well. 

GitHub Standard Hosted Runners

GitHub actions provides free usage for public repos using their standard hosted runners. The main trade-off with the lower cost is the slower build times using GitHub's runners compared to our self-hosted ones using 16-core machines. Changes to the core engine code will result in 4-5 hour build times.

Details on the hardware specs for GitHub's standard hosted runners. 

Operating System CPU Memory Storage
Windows/Linux 2-core CPU (x86_64) 7GB 14GB SSD
MacOS 3-core CPU (x86_64) 14GB 14GB SSD

More details info on the hosted runners can be found here: GitHub-hosted Runners 

Hard Drive Space Limitations

GitHub-hosted runners only provide 14GB of storage (mounted on /mnt) for all supported platforms. There is also a root volume that has about 29GB of space remaining out of the 84GB total which is used for the pre-installed environment.

Proposed workaround:

In the default configuration, the provided storage is not enough to support the build workspace for O3DE. In order to increase the available space beyond 14GB, we need to uninstall un-required software and utilize the space in the root volume. 

Note: This is not an officially supported workflow, but is a currently available workaround. 

This GitHub action is currently being tested: https://github.com/marketplace/actions/maximize-build-disk-space 

In addition to removing the pre-installed software, this GitHub action frees up space by performing the following steps (Note: This is only required for Linux nodes. For other platforms we can simply move the workspace to the root volume.): 

  1. Combines the free space of the root volume and /mnt to an LVM volume group
  2. Creates a swap partition and a build volume on that volume group
  3. Mounts the volume back to ${GITHUB_WORKSPACE}

This results in a workspace with about 50GB of hard drive space. 

Recommended Use-Cases

Below are some of the use-cases that will be compatible with GitHub's standard hosted runners. 

Code Checks

These are checks that run on the code base that don't require high CPU usage or require large build artifacts. This includes code style checks, static code analysis, etc. A simple clone of the O3DE repo doesn't run into any of the space limitations. 

Example use cases:

  • Pre-AR checks: Some examples are the DCO check and Validation tests. These run when the PR is created and report its status before the AR is triggered by a maintainer.
  • Static code analysis: Current investigations by SIG-Security involve using CodeQL. This can also be integrated with Dependabot for automated dependency updates. See: o3de/o3de#10032

Periodic Builds

Daily/Weekly builds that are not as time sensitive as AR builds would be a good use case for the standard runners.

GitHub Larger Runners

GitHub also provides larger spec runners (up to 64 cores) that can be added to GitHub action workflows. The specs and billing rates can be found here:

Comparison between GitHub Larger Runners and AWS EC2 Instances (using 16-core machines):

Platform AWS EC2 (Hourly) GitHub Hosted Runner (Hourly)
Windows (16 core) $1.35 $7.68
Linux (16 core) $0.62 $3.84
  • EC2 pricing is based on On-Demand instances running in US-West-2. 

Linux Foundation Hosted Runners

This option would be similar to the GitHub runners listed above, but would take advantage of any available build infrastructure hosted by the Linux Foundation. SIG-Build will need to investigate if there are resources that are available for O3DE. 

2 - Reduce the Frequency of AR Runs

Another method to lower our costs is to reduce the number of AR runs required per PR. This option can be implemented to lower costs with our current Jenkins infrastructure and can also be used to optimize the GitHub actions workflow discussed earlier. The focus here would be to batch PRs using merge queues, separate tests into smaller jobs, and make certain tests optional.

  • Merge queues: Batching PRs so they are tested together in a single AR run will help reduce the total number of AR runs required over time. 
  • Job separation: Currently if an AR job fails, the entire pipeline needs to be re-run. Additionally, all tests currently run within a single job and cannot be run selectively. There are on-going investigations to limit testing scope based on the changes submitted. 
  • Optional tests: We can also limit the scope of required tests at the PR stage and can defer some testing to the development branch after the changes have been merged. This option depends on the SIGs willingness to accept risks in build/test failures in dev in favor for lower cost/developer velocity. 

Merge Queues

Using a merge queue reduces the total number of AR runs by batching approved PRs and testing those changes with a single AR. If the AR passes, those PRs are then merged in together. GitHub recently released their merge queue feature in limited public beta and there are other third-party solutions as well that are free for open source projects. The merge queue would reduce costs by reducing the total number of AR runs over time. However with this strategy we need to implement mechanisms to address AR failures.

Build Failures

One item SIG-Build is currently investigating is a mechanism to identify the owners of each build failure: https://github.com/o3de/sig-build/blob/main/rfcs/rfc-bld-20220623-1-build-failure-rca.md

This can also be used to identify the PR associated with the build failure, remove it from the queue, and restart the AR run. There are other strategies like bisecting the queue and rerunning the AR separately to identify the problematic PR, but this does come at an increased cost.

Another item we will need to address are un-reliable tests that typically require re-running the AR in order to pass. Failures like these in a merge queue setup will cause unnecessary merge queue runs and will frustrate developers. 

Limit AR Runs (Opt-in)

This option is more of a workflow change and relies on maintainer to run jobs based on type of changes (e.g. small bug fix, core engine changes, etc.). Contributors can also confirm they've run the provided tests in their fork. 

Split-up Testing Tasks

At the moment our test suites are executed in a single Jenkins job that typically tasks 40-50min to run for an incremental build and up to 2 hours for a clean build on a 16-core machine. Splitting up the tests will allow us to selectively run tests in a manual or automated way. This will also make it more feasible to run tests within the GitHub Actions workflow detailed above.  

O3DE Jenkins Pipeline Deployment

Summary:

This RFC provides additional details on the deployment stage for the Jenkins pipeline outlined here: https://github.com/o3de/sig-build/blob/main/rfcs/rfc-19-jenkins-pipeline-repo.md

Deployment stage details:

The purpose of this RFC is to have the deployment stage setup with two pipelines (we initially assumed a single pipeline). In this workflow, changes are tested in the staging branch/environment separately. To deploy the change to prod, a PR is created to merge the changes from the staging branch to the prod branch.

The main goal of the separate pipelines setup is to reduce the amount of PRs created for each deployment. By having a separate pipeline for staging, these changes can be tested before creating a single a PR for the deployment.

deployment

Jenkins Deployment Issues

There are some caveats to setting up and deploying Jenkins that may complicate a single pipeline setup. Those issues are detailed below.

Jenkins Plugin Dependencies

Updating plugins requires an additional level of testing in the staging environment. This is due to the complexity of the dependencies in Jenkins plugins. Here are some examples:

  • Plugin is updated to latest. However, it drops another plugin as a dependency. Removing this plugin breaks the functionality of some of our jobs. A new PR is created to update plugins.txt to re-add the plugin.
  • Plugin is updated to latest. After upgrading Jenkins, a newer supported version of the plugin is now available. A new PR is created to update plugins.txt with the newer version.
  • Plugin is updated to latest. After testing in sandbox, an issue is identified with the latest version. A new PR is created to rollback to a previous version.

What are the advantages of the separate pipelines?

  • All changes can be tested together in the staging environment before a it is deployed to prod.
  • This will reduce the number of PRs and changes that need to be submitted through the prod pipeline to update Jenkins and its plugins.

What are the disadvantages of the separate pipelines?

  • There several changes that can accumulate in the staging branch. To avoid this we'll need to setup a process to minimize the changes made to staging at one time and break apart large changes.
  • Untested changes are submitted to the prod branch. We'll need to setup branch protection on the prod branch and implement a policy that changes are only merged from the staging branch.

FAQs?

  • How can devs test their changes prior to submitting to staging?
    The docker container for Jenkins can be tested locally. Also the CDK package included in the repo can be used to setup a development environment. We'll need to investigate setting up an O3DE hosted environment.
  • Will Jenkins config and infrastructure changes flow through the same pipeline?
    For now yes, since the Jenkins configs are now defined with the JCasC (Jenkins Config as Code) plugin, changes to these configs will trigger a new CodeBuild action to create a new docker image. It's possible that we can later decide to make a separate pipeline for config only changes.
  • Is it a permanent decision if we change to a separate pipeline setup?
    No, we can easily switch back to a single pipeline setup if we decide to rollback this change. In fact, the current CDK setup will deploy a staging environment in the same pipeline if a staging certificate parameter is provided.

Proposed RFC Feature Upgrade Minimum Visual Studio Version to 16.11 and support 17

Summary:

Upgrade the minumum supported Visual Studio Version to 16.11 as 16.7 and add support to Visual Studio 17.

Feature design description:

Microsoft is going to remove support for Visual Studio 16.9 in October 2022 and recently has released a new version (2022) that is able to compile and run most of O3DE without any issue but it is left out as the Project Manager is requesting specifically fot 16.x.

Technical design description:

  • There is already an issue in the main o3de repo (o3de/o3de#7665) and a merge request (o3de/o3de#7714) that implements this feature but I think that the build machines and the docs may need an upgrade.

What are the advantages of the feature?

  • Adding VS2022 support may help with developer productivity as it has been upgraded to 64bits and therefore improving the overall performance of the IDE.

How will this be implemented or integrated into the O3DE environment?

  • As seen in the merge request there is no need to change much of the code as only the parameters of the vswhere invocation are different
  • VS2022 compiler is binary compatible with 2019 so there won't also be many changes in the produced binary.

DCO plugin improvements investigation

  • Investigate current issues with the DCO plugin for Github that block integration workflows, such as users changing their username after signing off

  • Create tasks to improve the current DCO plugin or replace it with a better alternative

Enable Mac/iOS support in AR

I brought forward to the TSC, on the Discord meeting of 4/19/2022, the proposal
to enable MacOS & iOS builds in AR. The TSC suggested to bring the proposal to SIG-Build.

Why?

A very important corporation is committing 1.5 engineers to help the development of the Metal RHI.
We fear that if Mac/iOS is not validated in AR, then it will be constantly broken
and it will be a frustrating experience for those willing to contribute
to MacOS/iOS in O3DE.

What's the idea?

Procure enough "dedicated host" instances on EC2 to support AR runs for Mac/iOS.
Ideally the M1 chip based mac instances (now in 'Preview'):
https://aws.amazon.com/ec2/instance-types/mac/

steps to enable in AR:

  • mac profile
  • mac asset_profile
  • mac test_profile
  • ios profile
  • ios asset_profile

Cost per instance

Monthly cost for 1 instace of mac2.metal (The ones with M1 chip)
M1 chip with 8 CPU cores, 8 GPU cores, 16 GiB of memory, 16 core Apple Neural Engine. 1TB of storage.
$892.99 USD / month
EC2 Dedicated Host cost (monthly) $790.59 USD / month
Elastic Block Storage (EBS) pricing (monthly) 1TB $102.40 USD / month
From AWS:
"They deliver up to 60% better price performance over x86-based EC2 Mac instances for iOS and macOS application build workloads".
"you can save up to 44% off On Demand pricing with a three-year commitment."

Challenges (Cost)

During peak hours the AR system may spawn 120 Windows-based EC2 instances in parallel.
Unfortunately, We can not request Mac EC2 instances on demand, instead the only option is to have "dedicated hosts".
For example reserving 30 Mac hosts would cost around $26,790 USD /month, before discounts.
After the 44% discunt mentioned above it would be ~$15,000 USD / month.

Proposed SIG-Build meeting agenda for Mar-08-23

Meeting Details

  • Date/Time: Mar 08, 2023 @ 05:00pm UTC / 01:00pm ET
  • Location: Discord SIG-Build Voice Room
  • Moderator: Deepak Sharma/Mike Chang
  • Note Taker Brian Herrera

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

What happened since the last meeting?

  • RFC for AR Redesign created and shared with TSC
  • Roadmap Presented to TSC
  • o3de/o3de#12009 has discussion targeting Win 10 20H2 (for now)
  • Create a "epic" for the AR cost reduction task - @amzn-changml
  • Add comments to this agenda for additional roadmap items - @brianherrera
  • Respond to o3de/o3de#12009 and bring this up in the next TSC meeting for action items - @amzn-changml

Meeting Agenda

Discuss agenda from proposed topics

Outcomes from Discussion topics

Discuss outcomes from agenda

  • Will be working to update Windows nodes to 20H2 (if possible)

Action Items

Create actionable items from proposed topics

Open Discussion Items

List any additional items below!
JT - Discussed interfacing with ASWF https://github.com/AcademySoftwareFoundation/wg-ci
JT - Better docs on build and customization of the engine
JT - Discuss on any Blender entry points in Python (can bring up in next SIG-Build meeting for triage)

Proposed RFC Feature: O3DE Jenkins Pipeline Repo

Summary:

The purpose of this feature is to provide the O3DE Jenkins Pipeline setup to developers. This includes maintainers/contributors that will submit improvements to the O3DE Jenkins pipeline and game developers that want to use the AR pipeline for their own project.

The goal is to move the pipeline configuration from an internal process to a public one managed by the Build SIG with all the required files stored in a repo under the O3DE org. The current setup has a combination of CloudFormation stacks and manually deployed resources managed by an internal Amazon team.

The release of this feature will not change the behavior of the AR pipeline, but it will allow the O3DE community to maintain and contribute changes to the Jenkins setup.

What is the relevance of this feature?

This is important because it allows developers to contribute changes to the pipeline setup and enables the following:

  1. Ownership of the pipeline can be fully transferred to the Build SIG.
  2. Other developers can also fork this repo and easily setup the AR pipeline to run on their own game project.

Feature design description:

All the scripts and configs required to setup our Jenkins infrastructure will be packaged in a repo. A pipeline will automatically deploy the required resources when updates are merged in.

A CDK package will also be included to easily deploy the service to AWS. This includes a CodePipeline instance that will be used to build, test, and deploy the service.

Use cases:

  • Update the Jenkins server setup: a user will clone the repo and make changes (e.g. install a new plugin, update the jenkins version, etc.). Then they can test these changes locally by building the docker image and running the container on their local machine. After testing, the user can then submit a PR with their changes. After the changes are reviewed and merged, the pipeline will take the change, deploy it to staging, then finally to production.

  • Use the AR for game projects: a user will fork the repo and make any customizations they need to the Jenkins server setup. Using this configuration they can easily setup the AR pipeline to run on their project. They can host Jenkins on their own server or a cloud provider using the templates provided.

Technical design description:

Jenkins config components:

  • Dockerfile: Generates the Jenkins server docker image.
  • Jenkins Configuration as Code (JCasC) configs: YAML files stored in the repo used by the JCasC plugin that manages the configuration of the Jenkins server.
  • plugins.txt: Defines the plugins/versions to install. A script included in the docker image installs the plugins.
  • Job DSL configs: Defines the jobs that run the pipelines and also used as templates for new jobs. This is separate from the actual pipeline config defined in scripts/build/Jenkins/Jenkinsfile in the O3DE repo.

AWS Hosting components:

  • ECS/Fargate: Hosts the Jenkins server container.
  • CodePipeline: Coordinates the stages to run the server by detecting config changes, building the container image, and deploying the container to production.
  • Cloud Development Kit (CDK) Stacks: Automates the deployment of the resources required to host the service in AWS.

diagram

Deployment workflow:

  1. User submits a pull request to change one of the config files or scripts (e.g. dockerfile). After the PR is approved the change is merged into the repo.
  2. The update triggers CodeBuild to build a new image. After the image is created it is pushed to a private ECR repo.
    a. CodeBuild uses the dockerfile, plugins.txt, and buildspec.yaml file stored in the repo to build the jenkins image
  3. The pipeline triggers the deployment of the updated CDK stack.
  4. Fargate deploys a new task using the new image stored in ECR.
  5. The task definition config defines the image tag, memory and CPU spec, and other container options.

The core part of this setup is the docker container used to run the Jenkins server. To build the image, we pull down the latest LTS version of the Jenkins docker image and run our Dockerfile with our customizations.

FROM jenkins/jenkins:2.319.2-lts-jdk11

Testing Deployments

Here are the options to test changes before they are deployed to production:

  1. Locally: Users can build the docker image and run the container to host the Jenkins instance on their local machine. Users can also run cdk synth to validate changes to the CDK packages prior to deployment and use cdk deploy to test the changes in their own AWS account.
  2. Staging: The pipeline will take the changes merged in and deploy them to the staging instance for automated and manual testing
  3. PR checks: When submitting a PR to the repo, we can also add automated checks for the jenkins configs and CDK stacks prior to merging it to the repo.

Rollback

In the event that issues are identified in the prod stack, a rollback mechanism will be required to redeploy the last known good version.

These issues should be identified with automated mechanisms to rollback quickly and effortlessly. We should also provide a manual rollback mechanism if issue are identified outside of automated testing.

CDK Pipelines doesn't provide a built-in mechanism to rollback yet, however the CodeDeploy resource within the Jenkins ECS stack can be utilized to perform a rollback if necessary.

Deployment Permissions

For simplicity, a manual approval step will be added to promote changes from staging to prod. We will need to investigate additional mechanisms to promote these changes. This includes maintenance windows, merge queues, etc. We will need to work with the build SIG to identify the users that will have access to promote changes.

Additionally, a subset of build SIG maintainers will need direct access to the AWS account hosting the pipeline. This will be required in the event an investigation requires access to the AWS account to resolve an issue.

What are the advantages of the feature?

  • Makes it easier to maintain our jenkins infrastructure and keep it up-to-date with security patches for jenkins and its plugins.
  • Makes it easier for developers to run the same AR pipeline on their own O3DE project. This combined with the Jenkinsfile in the o3de repo, developers can use this setup to run the same pipe on their project and customize as needed.
  • All config changes to the Jenkins server will be version controlled and will be reviewed through PRs.

What are the disadvantages of the feature?

  • Each config change to the Jenkins server setup will require a redeployment. Interruptions will be minimized by setting up deployment windows during off hours.
  • This will be an opinionated setup of the jenkins pipeline and optimized for O3DE. It may not work for all developers, however they will be able fork the repo and customize as needed.

Are there any alternatives to this feature?

An alternative is to migrate our pipeline workflows to GitHub actions. While we have plans to utilize this mechanism for smaller automated workflows, there are some limitations that prevent us from migrating the entire pipeline to GH actions. This is mainly due to storage and compute restrains for O3DE builds. It's possible to utilize self-hosted runners, so we would still maintain some of our current build infrastructure with this solution. That said, there are planned investigations into how we can integrate GH actions into our pipeline.

How will users learn this feature?

  • Our current Jenkins Pipeline guide will be updated to include info on how changes can be tested and deployed through this setup. We will also update our docs to include a guide for users that want to use the AR pipeline on their own project.
  • Our contribution docs will also be updated to reference this setup.

Are there any open questions?

  • Will this repo also be used to deploy config updates to production and how will it be protected?
    • Yes, a separate branch from main will be created for our production deployments and branch protection will be enabled to require approvals and successful checks. The pipeline used for deployment will also have additional protections when moving changes from staging to prod.
  • Is this setup only compatible with AWS?
    • No, the generated docker container to run Jenkins can be hosted on any number of platforms. A CDK template will be included in the initial rollout, since our current infrastructure is hosted in AWS. It's possible for the community to provide templates for other cloud providers as needed.

Proposed SIG-Build meeting agenda for Feb-22-23

Meeting Details

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

What happened since the last meeting?

  • RFC for AR Redesign created and shared with TSC
  • Roadmap Presented to TSC

Meeting Agenda

Discuss agenda from proposed topics

Outcomes from Discussion topics

Discuss outcomes from agenda

  • In regards to supporting Windows 21H2, this presumes support for AR to only support Windows 11 (though the PR suggests we could update Win 10 to 20H2). We do need to test for regression and compatibility with Windows 10, but it will be cross-cutting with @o3de/sig-platform to support this. Will be discussing this at the joint TSC meeting on Feb 28th

Action Items

Create actionable items from proposed topics

  1. Create a "epic" for the AR cost reduction task - @amzn-changml
  2. Add comments to this agenda for additional roadmap items - @brianherrera
  3. Respond to o3de/o3de#12009 and bring this up in the next TSC meeting for action items - @amzn-changml

Open Discussion Items

List any additional items below!

Proposed SIG-Build meeting agenda for Nov-30-22

Meeting Details

  • Date/Time: Nov 30, 2022 @ 05:00pm UTC / 01:00pm ET
  • Location: Discord SIG-Build Voice Room
  • Moderator: Deepak Sharma
  • Note Taker Brian Herrera

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

What happened since the last meeting?

  • Reviewed the RFC for Build Times improvement

Meeting Agenda

Discuss agenda from proposed topics

Outcomes from Discussion topics

Discuss outcomes from agenda

Action Items

Create actionable items from proposed topics
1.
2.

Open Discussion Items

List any additional items below!

Proposed SIG-Build meeting agenda for Nov-16-22

Meeting Details

  • Date/Time: Nov 16, 2022 @ 05:00pm UTC / 01:00pm ET
  • Location: Discord SIG-Build Voice Room
  • Moderator: Deepak Sharma
  • Note Taker Brian Herrera

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

What happened since the last meeting?

  • Reviewed the RFC for Build Times improvement

Meeting Agenda

Discuss agenda from proposed topics

Outcomes from Discussion topics

Discuss outcomes from agenda

Action Items

Create actionable items from proposed topics
1.
2.

Open Discussion Items

List any additional items below!

Reuse Build Workspace in PR based Pipeline

Reuse Build Workspace in PR based Pipeline

Summary:

Each pull request has to pass PR based build pipeline in order to be merged. This proposal is to reduce PR based build time by reusing more relevant build workspace from previous builds, and thus increase O3DE contributors' work efficiency.

Problem try to resolve

O3DE Jenkins build workspace is located on EBS volume created from daily EBS snapshot. Currently, more than half of O3DE PR based builds take over 3 hours to finish, this is mainly because:

  1. The PR is based on a too old or too new commit. There is a very high chance that the PR is based on a commit that has major difference with the commit on EBS snapshot. The build artifacts from the EBS snapshot cannot be reused in this case.
  2. There is no EBS snapshot for the PR's target branch. For example, when a PR is created based off stabilization branch and there is no EBS snapshot for stabilization branch, the build pipeline will have no artifacts to reuse and will rebuild everything.
  3. It's not feasible to create EBS snapshots for each commit id due to high cost and long EBS snapshot creation time.

What is the relevance of this feature?

This is important because it reduces O3DE contributors' waiting time to merge pull requests and enables the following:

  1. Store build workspace on S3 for each commit id. Developers can download build workspace to local machine for debugging purposes.
  2. Share build workspace between different build pipelines and reduce build time.

Feature design description:

S3SIS (S3 Single Instance Storage) will be used to share build workspace between different build pipelines. It reduces the file transfer time and cost by only transferring the delta files. In addition, files with same content hash are deduplicated using S3SIS, this significantly saves S3 storage cost.

After each non-PR based AR build is done, the build workspace will be uploaded to S3 using S3SIS. PR based build will download and reuse the build workspace.

Use cases:

  1. Upload build workspace from non-PR based AR build: After a successful build, use S3SIS to upload build workspace to S3, and tag all files with commit id.
  2. Download build workspace to PR based AR build: The first build creates EBS volume from the latest EBS snapshot, find parent commit id and then download the build workspace tagged with the commit id, all files' timestamps and attributes will be preserved during the download process.
  3. Download build workspace to local machine: O3DE contributors can install S3SIS CLI and download build workspace to their local machines for debugging purpose.

Technical design description:

Install S3SIS CLI on Build Image

Due to the issue that CLI tool installed using O3DE Python cannot be executed, S3SIS CLI needs to be installed with system installed Python on build nodes.

Steps to install S3SIS CLI:

  1. Run git clone https://github.com/aws-lumberyard/s3sis.git or download the source code.
  2. Run python setup.py install" to install S3SIS CLI.
  3. Run s3siscli configure" to configure S3SIS CLI.

S3SIS CLI should be part of the build image, so it doesn't need to be installed and configured in every build.

Build Workspace Label

S3SIS requires a label to upload and download, the label is used to group a set of file objects on S3.

In order to make Jenkins build be able to find the correct workspace to sync, the label needs to include information about pipeline name, platform, build configuration and commit id.

Label format used to upload/download workspace using S3SIS:
{pipeline_name}{platform}{build_configuration}_{commit_id}

S3SIS Manifest

S3SIS manifest file stores necessary file information, and it's the main file to lookup when doing upload or download.

{
    "label":"O3DE_Windows_profile_e0e455742f0109e7dfdf6ea44d9ec875cd0848a9",
    "filelist":{
        "engine.json":{
            "isfile":true,
            "md5":"cb87aae4199e0f920fd4f275a38fbfba",
            "size":"2920",
            "atimestamp":"1667166054970941766",
            "mtimestamp":"1667166040290092687",
            "attribute":"33206"
        },
        "Code/Framework":{
            "isfile":false
        },
        "Code/Framework/CMakeLists.txt":{
            "isfile":true,
            "md5":"25af1ce1496b0b0fa9a0fcbec3c383bf",
            "size":"576",
            "atimestamp":"1667166810450666423",
            "mtimestamp":"1667166810438665729",
            "attribute":"33206"
        }
    }
}

Upload Workspace

To reduce the number of workspace uploaded, workspace is uploaded by non-PR based AR builds on success, like https://jenkins.build.o3de.org/job/O3DE/job/development/. The upload won't increase any PR build time.

If the build has multiple commits, s3siscli upload should run for each commit id. After first upload, all files are already on S3, the following upload command will upload nothing but a manifest file.

Upload workflow:

  1. Use currentBuild.changeSets to find commit ids built in current build.
  2. Run s3siscli upload --label {pipeline_name}_{platform}_{build_configuration}_{commit_id} for each commit id.

Download Workspace

Most build systems use timestamp to decide when to rebuild. In order to reuse the build workspace, all files' timestamps and attributes should be preserved during the download process.

Ninja is used for Linux build, it tracks file timestamp at nanoseconds level. Ninja will rebuild a file whenever the file timestamp changed at nanoseconds level. In this case, all files' timestamps should be preserved at nanoseconds level.

Only first PR based build will sync workspace from the closest commit id, all following builds will reuse workspace from previous builds.

Download workflow:

  1. Find first parent commit id that can be found as a S3SIS label on S3.
  2. Build the label name {pipeline_name}_{platform}_{build_configuration}_{parent_commit_id}.
  3. Run s3siscli download --label {label} --preserve-timestamp --preserve-attributes --preserve-empty-folders --cleanup to syn workspace.

File Cleanup

Stale files should be cleanup regularly to avoid high S3 storage cost.

Each file on S3 is linked to one or multiple S3SIS manifest file, and each manifest file is linked to a commit id. A manifest is considered to be stale if the commit is over 1 month old.

Use a DynamoDB table to keep track of the number of manifest that each file is linked to. Set object hash as primary key to reduce lookup time. For example:

object_md5_hash (Primary Key) ref_count
cb87aae4199e0f920fd4f275a38fbfba 3
25af1ce1496b0b0fa9a0fcbec3c383bf 3

Run a daily lambda function to lookup manifest files, update the table and delete objects with 0 ref_count. Run a weekly lambda function to make sure S3 object, manifest files and DynamoDB table are synced.

Daily Cleanup Lambda Workflow:

  1. Read manifest files uploaded in the past 24 hours, count each object's occurrence in these manifest files and increase ref_count in DynamoDB table.
  2. Read stale manifest, count each object's occurrence in these manifest files, delete stale manifest and decrease ref_count in DynamoDB table.
  3. Delete S3 objects that have 0 ref_count.

Cost

The cost increased is mainly from S3 storage and S3 transfer. However, it reduces EC2 cost when build takes less time.

To reduce cost in the first place, only enable this feature for bottleneck build (Linux) since it directly impact the overall pipeline time. This feature can be rolled out gradually if it produces a good result.

S3 Cost Increased:

  • Storage: $0.023/GB * TRANSFERRED_FILE_SIZE * AR_BUILD_COUNT
  • Transfer to S3: 0
  • Transfer out S3: $0.02/GB * TRANSFERRED_FILE_SIZE * PR_COUNT

Linux build workspace is 180GB. Assume there are 150 AR builds and 200 pull request created per month.

In worst case scenario, all 180GB files are transferred for every build, the S3 cost would be $1341 per month.

Because S3SIS only transfers delta files, the files transferred will be significantly reduced, assume there are 30GB files transferred per build on average (in fact, the size could be less, it transfers 0 files for a zero build). The cost would be $223 per month.

EC2 Cost Reduced:

Linux node type is c4.4xlarge whose price is $0.796 per hour.

Assume 1 hour is saved on average for 1 PR based Linux build, 200 PR based builds would save $159.2.

What are the advantages of the feature?

  • Each commit has a build workspace linked to it.
  • It provides a solution to reuse more relevant build workspace to reduce PR based build time.
  • S3SIS eliminates duplicate files on S3 and saves S3 storage cost.
  • S3SIS reduces file transfer time and cost when syncing workspaces.

What are the disadvantages of the feature?

  • This solution is specifically to reduce PR based build time, it may slightly increase non-PR based AR build time since workspace upload is done by non-PR based AR build.
  • Reusing workspace for a core change build won't provide much benefit, and the build time may be increased due to the extra workspace sync time.

How will this be implemented or integrated into the O3DE environment?

First integrate this with O3DE bottleneck build, like Linux profile_nounity build, because it directly impacts the overall PR based build time. If it produces good result, then gradually roll this out to other builds.

Are there any alternatives to this feature?

Yes, using distributed build or build cache can also reduce overall build time.

How will users learn this feature?

  • Users can see the upload/download stage from Jenkins BlueOcean build page.

Are there any open questions?

  • Will this reduce the local build time?
    • No, this is only intended to reduce PR based build time on O3DE Jenkins.
  • Will this reduce the build time if I make a core change?
    • No, a core change build won't benefit from reusing previous workspace, since everything need to be rebuilt anyway.
  • Can I download the build workspace to my local machine for debugging purpose?
    • Yes, you can download the workspace to local machine if you install the S3SIS CLI on the machine.

SIG-Build 11/30 release notes

Please fill any info related to the below for the 11/30 release notes: Note this has a due date of Friday Nov 12th, 2021

  • Features
  • Bug fixes (GHI list if possible)
  • Deprecations
  • Known issues

Proposed RFC - GitHub PR Workflow v2

Summary

The purpose of this RFC is to document a proposed improvement to our pull request workflow using GitHub actions. This update will allow maintainers to manage PR workflows easily and minimize the time required to review and merge PRs. For example, an initial planned improvement is to allow maintainers to trigger the Automated Review (AR) for a PR by adding a comment and avoid having to navigate to another site to locate the job for that PR.

There are other workflow improvements that can be added through labels, comments, etc. Those specific workflow improvements will be out of scope of this RFC. This page will focus on the Github actions mechanism that will be used to implement these improvements.

Feature design description

This feature will utilize GitHub actions to execute the automation requests. Scripts will be added to the .github directory that are required for the workflows. There will be minimal infrastructure that the sig-build will need to maintain. Github's hosted runners will run the workflows and submit the requests to our existing infrastructure if required (e.g. Jenkins server).

Workflow Example (Running the AR)

  1. Contributor submits a PR to O3DE.
  2. Maintainers review PR, make comments, then submit their approval after the required changes have been made.
  3. Maintainer/Reviewer adds a comment directly on the PR to trigger the AR

image

  1. AR runs starts, updates PR that check has started and updates the PR again with the result.

image

Other workflow examples include adding a label once the review is completed so that the PR is merged once the AR is successful.

The main goal is to minimize the time required by maintainers to review and merge in PRs.

Technical design description

image

Workflow details

  1. Maintainer/reviewer updates PR. This can be a label, comment, etc.
  2. GitHub action trigger will be configured to capture PR updates.
  3. This triggers a GitHub action that runs the configured script in the repo (e.g. /.github/script.py)
  4. Any credentials required by the GitHub action will be pulled from GitHub secrets
  5. Rate limiter checks request submitted by user is not over the set threshold
  6. The scripts executes, verifies that the commenter has the required permissions, and sends a request to start the AR run to the Jenkins server.
  7. Jenkins triggers the AR run for the specified PR
  8. AR job updates the PR that the run has started and updates it again with the result.

Setup Details

Setting a GitHub action trigger allows us to select the events that we will use to run our GitHub action. These events are typically specified in the "on:" block in the workflow yaml file.

on:
  issue_comment:
    types: [created]

issue comment will trigger all events for each comment (add, edit, delete) so we will filter to only created comments under types.

Also the "issue_comment" event occurs for comments on both GitHub issues and pull requests. So we'll need to filter for PR comments with the following.

if: ${{ github.event.issue.pull_request }}

The end result would look similar to this:

name: GitHub PR Workflow

on:
  issue_comment:
    types: [created]

jobs:
  PR-Comment:
    if: ${{ github.event.issue.pull_request }}
    runs-on: ubuntu-latest
    steps:
	  - uses: actions/checkout@v3
	  - uses: actions/setup-python@v3
		with:
          python-version: '3.9'
      - run: python run-ar.py

GitHub Action Script

Within the Github workflow we can add custom actions (e.g. actions/setup-python@v3) to perform certain jobs. To actually trigger the AR run we'll utilize a script we'll have in the repo (e.g. run-ar.py) and run this script to perform all the required actions.

GitHub Secrets

This service allows us to store sensitive information that our GitHub action requires as part of the execution. For example, we'll need to credentials to submit the AR run request to Jenkins.

Jenkins Server

The Jenkins server referenced in this RFC will be the O3DE server (https://jenkins.build.o3de.org/) and will be the target of the AR run requests.

Permissions

The same permissions used to grant access to run the AR and merge PRs will be used in this automated workflow. For example, only users that have permissions to run the AR will be able to add a comment that actually triggers the AR. This also applies to members that are part of child teams of the larger maintainer/reviewer teams.

These permissions checks can be performed in the GitHub action workflow itself or as part of the script execution.

Rate Limiting

Custom rate limits will be placed on the GitHub action workflow runs in order to prevent unnecessary runs triggered by unintentional or malicious means. Prior to executing each run we will add a step to check the number of workflow runs requested by the user. If it is over our set threshold, we will limit the requests and add a comment to the PR.

For workflows like triggering the AR, we can also check if there is a run already in-progress and if there are already additional runs in the queue. If there are AR runs queued above our threshold, we'll prevent adding more to the queue.

When the GitHub action workflow is rate limited due to too many requests a single comment will be added to the PR for visibility.

Comment Syntax

Comments added to PRs that are used to trigger the GitHub actions will be prefixed with "/" (e.g. /run-ar) The purpose is to make it easy to separate feedback comments from automation triggers.

Are there any alternatives to this feature?

Yes, we can utilize webhooks to trigger automations running on our own hosted machines or on AWS managed services. The option of using GitHub actions here allows the sig-build to easily maintain these workflows by updating the scripts in the .github directory without having to maintain configs for other services.

How will users learn this feature?

The O3DE contribution website pages and README docs will be updated to instruct maintainers and reviewers to utilize new automated workflows as they are added.

Open Questions

Q: Is there a way to de-dupe the command comments? There could be many submitted for some PRs.
A: This is up for debate as it may be useful to keep the command history in the PR. However, we will need to investigate ways to reduce the noise on the PRs for the command comments.

Proposed SIG-Build meeting agenda for 2022-09-02

Meeting Details

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

What happened since the last meeting?

Meeting Agenda

Discuss agenda from proposed topics

Outcomes from Discussion topics

Discuss outcomes from agenda

Action Items

Create actionable items from proposed topics

Open Discussion Items

List any additional items below!

Proposed SIG-Build meeting agenda for 07-13-22

Meeting Details

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

What happened since the last meeting?

Meeting Agenda

Discuss agenda from proposed topics:

  • Updates on adding support in the build system for VS2022: o3de/o3de#6707
  • Updates from Validation step in front of the parallel build pipeline
  • Updates for Build Failure Analysis improvements
  • New o3de-extras and canonical.o3de.org repo and workflow
  • DCO check PoC

Agenda notes

Add installers as a responsibility of SIG-build - o3de/community#136

  • No response yet on which SIG will own the installer experience.

Other topics for discussion

Outcomes from Agenda

SIG reviewers and maintainers groups

Action Items

  • Chairs: No action
  • Maintainers/Reviewers: As noted in the agenda outcome

Open Discussion Items

Triage backlog grooming: https://github.com/o3de/o3de/issues?q=is%3Aissue+is%3Aopen+label%3Asig%2Fbuild+label%3Aneeds-triage+no%3Aassignee

List any additional items below!

Proposed SIG-Build meeting agenda for Nov-03-21

Meeting Details

  • Date/Time: Nov 03, 21 @ 05:00 PM UTC / 10:00 AM PDT
  • Location: Discord SIG-Build Voice Room
  • Moderator: Deepak Sharma
  • Note Taker Brian Herrera

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

What happened since the last meeting?

Meeting Agenda

Triage GitHub Issues assigned to Build SIG
Discuss agenda from proposed topics
Discuss the scope and any other discussion points from Build SIG members

Outcomes from Discussion topics

Discuss outcomes from agenda

Action Items

Create actionable items from proposed topics

Open Discussion Items

List any additional items below!

Proposed SIG-Build meeting agenda for Dec-14-22

Meeting Details

  • Date/Time: Dec 14, 2022 @ 05:00pm UTC / 01:00pm ET
  • Location: Discord SIG-Build Voice Room
  • Moderator: Deepak Sharma
  • Note Taker Brian Herrera

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

What happened since the last meeting?

  • RFC for Build Times improvement Review and implementing Review comments

Meeting Agenda

Discuss agenda from proposed topics

Outcomes from Discussion topics

Discuss outcomes from agenda

Action Items

Create actionable items from proposed topics
1.
2.

Open Discussion Items

List any additional items below!

Proposed SIG-Build meeting agenda for Mar-23-22

Meeting Details

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

What happened since the last meeting?

Meeting Agenda

Discuss agenda from proposed topics

Outcomes from Discussion topics

Discuss outcomes from agenda

Action Items

Create actionable items from proposed topics

Open Discussion Items

List any additional items below!

Proposed SIG-Build meeting agenda for Oct-05-22

Meeting Details

  • Date/Time: Oct 05, 2022 @ 05:00pm UTC / 01:00pm ET
  • Location: Discord SIG-Build Voice Room
  • Moderator: Deepak Sharma
  • Note Taker Brian Herrera

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

What happened since the last meeting?

  • Created stabilization/2210 branch for next O3DE release
  • Completed Build Failure Analysis Improvements.

Meeting Agenda

Discuss agenda from proposed topics

Outcomes from Discussion topics

Discuss outcomes from agenda

Action Items

Create actionable items from proposed topics
1.
2.

Open Discussion Items

List any additional items below!

Proposed SIG-Build meeting agenda for June-15-22

Meeting Details

  • Date/Time: June 15, 2022 @ 05:00 pm UTC / 10:00 am PDT
  • Location: Discord SIG-Build Voice Room
  • Moderator: Deepak Sharma
  • Note Taker Mike Chang

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

What happened since the last meeting?

  • Migrated nightly pipeline to O3DE.

Meeting Agenda

Outcomes from Discussion topics

SIG reviewers and maintainers groups

Ownership paths for SIG-Build

/scripts/build @o3de/sig-build-reviewers @o3de/sig-build-maintainers
/scripts/commit_validation @o3de/sig-build-maintainers
/scripts/license_scanner @o3de/sig-build-maintainers
/scripts/signer @o3de/sig-build-maintainers

Discuss outcomes from agenda

Action Items

Create actionable items from proposed topics

Open Discussion Items

List any additional items below!

SIG-Build Chair/Co-Chair Nominations 12/1 - 12/8 -- Elections 12/8 - 12/15

SIG chair / co-chair elections for 2022

Since the inception of O3DE, each SIG chair has been staffed as an interim position. It's time to hold some official elections, following some of the proposed guidance but with our own process due to the holiday season and in order to expedite the elections into next year.

The chair / co-chair roles

The chair and co-chair serve equivalent roles in the governance of the SIG and are only differentiated by title in that the highest vote-getter is the chair and the second-highest is the co-chair. The chair and co-chair are expected to govern together in an effective way and split their responsibilities to make sure that the SIG operates smoothly and has the availability of a chairperson at any time.

Unless distinctly required, the term "chairperson" refers to either/both of the chair and co-chair. If a chair or co-chair is required to perform a specific responsibility for the SIG they will always be addressed by their official role title.

In particular, if both chairpersons would be unavailable during a period of time, the chair is considered to be an on-call position during this period. As the higher vote-getter they theoretically represent more of the community and should perform in that capacity under extenuating circumstances. This means that if there is an emergency requiring immediate action from the SIG, the chair will be called to perform a responsibility.

Responsibilities

  • Schedule and proctor regular SIG meetings on a cadence to be determined by the SIG.
  • Serve as a source of authority (and ideally wisdom) with regards to O3DE SIG area of discipline. Chairpersons are the ultimate arbiters of many standards, processes, and practices.
  • Participate in the SIG Discord channel and on the GitHub Discussion forums.
  • Serve as a representative of the broader O3DE community to all other SIGs, partners, the governing board, and the Linux Foundation.
  • Represent the SIG to O3DE partners, the governing board, and the Linux Foundation.
  • Coordinate with partners and the Linux Foundation regarding official community events.
  • Represent (or select/elect representatives) to maintain relationships with all other SIGs as well as the marketing committee.
  • Serve as an arbiter in SIG-related disputes.
  • Coordinate releases with SIG Release.
  • Assist contributors in finding resources and setting up official project or task infrastructure monitored/conducted by the SIG.
  • Long-term planning and strategy for the course of the SIG area of discipline for O3DE.
  • Maintain a release roadmap for the O3DE SIG area of discipline.

Additionally, at this stage of the project, the SIG chairpersons are expected to act in the Maintainer role for review and merge purposes only, due to the lack of infrastructure and available reviewer/maintainer pool.

... And potentially more. Again, this is an early stage of the project and chair responsibilities have been determined more or less ad-hoc as new requirements and situations arise. In particular the community half of this SIG has been very lacking due to no infrastructural support, and a chairperson will ideally bring some of these skills.

Nomination

Nomination may either be by a community member or self-nomination. A nominee may withdraw from the election at any time for any reason until the election starts on 12/3.

Nomination requirements

For this election, nominees are required to have at minimum two merged submissions to http://github.com/o3de/o3de (must be accepted by 2022-01-31). This is to justify any temporary promotion to Maintainer as required by this term as chairperson. Submissions may be in-flight as of the nomination deadline (2021-12-08 12PM PT), but the nominee must meet the 2-merge requirement by the end of the election or they will be removed from the results.

Any elected chairperson who does not currently meet the Maintainer status will be required to work with contributors from the SIG to produce an appropriate number of accepted submissions by January 31, 2022 or they will be removed and another election will be held.

The only other nomination requirement is that the nominee agrees to be able to perform their required duties and has the availability to do so, taking into account the fact that another chairperson will always be available as a point of contact.

How to nominate

Nominations will be accepted for 1 week from 2021-12-01 12:00PM PT to 2021-12-08 12:00PM PT.
Nominate somebody (including yourself) by responding to this issue with:

  • A statement that the nominee should be nominated for a chair position in the specific SIG holding its election. Nominees are required to provide a statement that they understand the responsibilities and requirements of the role, and promise to faithfully fulfill them and follow all contributor requirements for O3DE.
  • The name under which the nominee should be addressed. Nominees are allowed to contact the election proctor to have this name changed.
  • The GitHub username of the nominee (self-nominations need not include this; it's on your post.)
  • Nominee's Discord username (sorry, but you must be an active Discord user if you are a chairperson.)

Election process

The election will be conducted for one week from 2021-12-08 12:00PM PT and 2021-12-15 12:00PM PT and held through an online poll. Votes will be anonymous and anyone invested in the direction of O3DE and the SIG holding the election may vote. If you choose to vote, we ask that you be familiar with the nominees.

If there is a current interim chair, they will announce the results in the Discord sig channel as well as the SIG O3DE mailing list no later than 2021-12-17 1:00PM PT. If there is no interim chair, the executive director will announce the results utilizing the same communication channels. At that time if there is a dispute over the result or concern over vote tampering, voting information will be made public to the extent that it can be exported from the polling system and the SIG will conduct an independent audit under the guidance of a higher governing body in the foundation.

The elected chairpersons will begin serving their term on 2022-01-01 at 12AM PT. Tentatively SIG chairs will be elected on a yearly basis. If you have concerns about wanting to replace chairs earlier, please discuss in the request for feedback on Governance.

Proposed SIG-Build meeting agenda for Feb-08-23

Meeting Details

  • Date/Time: Feb 08, 2023 @ 05:00pm UTC / 01:00pm ET
  • Location: Discord SIG-Build Voice Room
  • Moderator: Deepak Sharma
  • Note Taker Brian Herrera

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

What happened since the last meeting?

  • RFC for AR Redesign created and shared with TSC
  • Roadmap Presented to TSC

Meeting Agenda

Discuss agenda from proposed topics

Outcomes from Discussion topics

Discuss outcomes from agenda

Action Items

Create actionable items from proposed topics
1.
2.

Open Discussion Items

List any additional items below!

Proposed SIG-Build meeting agenda for Sep-07-22

Meeting Details

  • Date/Time: Sep 07, 2022 @ 05:00pm UTC / 01:00pm ET
  • Location: Discord SIG-Build Voice Room
  • Moderator: Deepak Sharma
  • Note Taker Brian Herrera

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

What happened since the last meeting?

  • Created stabilization/2210 branch for next O3DE release
  • Completed Build Failure Analysis Improvements.

Meeting Agenda

Discuss agenda from proposed topics

  • Next steps/Build Tasks for O3DE release after stabilization/2210 branch cut.
  • Increased Build Times - RCA completed. - Investigate if we can utilize any cache system to improve build times.
  • Build Failure Analysis improvements - Improvements are done, any new updates. - Done - RCA pattern analysis is in progress
  • RFC on automatically assigning GHIs to owners for build failures. - In Progress
  • RFC on build node support policies: #61
  • DCO check PoC - In Progress.
  • Issues for triage - https://github.com/o3de/o3de/issues?q=is%3Aissue+is%3Aopen+label%3Asig%2Fbuild+label%3Aneeds-triage+no%3Aassignee

Outcomes from Discussion topics

Discuss outcomes from agenda

Action Items

Create actionable items from proposed topics
1.
2.

Open Discussion Items

List any additional items below!

Proposed SIG-Build meeting agenda for Apr-20-22

Meeting Details

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

What happened since the last meeting?

  • Proposal accepted for overide changes for AP crashes. Implemented and in place since April 14th
  • AP crashes persist in Linux profile. @spham-amzn has implemented a change to reduce memory and increase retries to the AP builder process. More investigations needed to provide a root cause of the memory "leak" and implementing a permanent fix.
  • Log parsing change reverted, was previously causing truncation of the build logs. Investigations needed to find root cause and implement fix or alternative method to expose http links in Blue Ocean

Meeting Agenda

  • Discuss agenda from proposed topics

  • Updates incoming for the Jenkins server instance. Plugins are being updated to latest. Will be deployed at EoD today (April 20th)

  • Codeowners additions for SIG-Build

-Triage the new issues in the queue - https://github.com/o3de/o3de/issues?q=is%3Aissue+is%3Aopen+label%3Asig%2Fbuild+label%3Aneeds-triage+no%3Aassignee.

Outcomes from Discussion topics

SIg reviewers and maintainers groups

  • @brianherrera - What's the distinction?
  • @amzn-changml - Mostly to add participants to the SIG repos, including external contributors

Ownership paths for SIG-Build

/scripts/build @o3de/sig-build-reviewers @o3de/sig-build-maintainers
/scripts/commit_validation @o3de/sig-build-maintainers
/scripts/license_scanner @o3de/sig-build-maintainers
/scripts/signer @o3de/sig-build-maintainers
  • @shirangj - Who owns installer paths?
  • @amzn-changml - We have oversight and maintenance of the automation (within the CMake folder), but actual ownership of the installer UI and exe belongs to multiple groups (SIG-UIUX and release)
  • @brianherrera - Possibly needs a new SIG to handle installer exe?
  • @DMWeiss-divesIn - Who owns the "tools" category of scripts?
  • @amzn-changml - Mostly cross cutting, but these ownership groups does not imply maintenance, but oversight. These do need discussion with SIG-Core on actual maintenance responsibilities
  • @brianherrera - Cross cutting paths may need a second pass, including the python folder
  • @amzn-changml - Also needs sig-security involved in shared dependencies like python

Discuss outcomes from agenda

  • Agreed on 1st pass for codeowners paths, @amzn-changml will get PR out for this
  • Future discussion:
    • Codeowners mechanisms for PR and other automations (long outstanding tickets/PRs, build failure owners)
    • Discussion on unused scripts from legacy imports
    • Charter updates/maintenance

Action Items

Create actionable items from proposed topics

Open Discussion Items

List any additional items below!

Proposed SIG-Build meeting agenda for Nov-02-22

Meeting Details

  • Date/Time: Nov 02, 2022 @ 05:00pm UTC / 01:00pm ET
  • Location: Discord SIG-Build Voice Room
  • Moderator: Deepak Sharma
  • Note Taker Brian Herrera

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

What happened since the last meeting?

  • Created an RFC for Build Times improvement

Meeting Agenda

Discuss agenda from proposed topics

Outcomes from Discussion topics

Discuss outcomes from agenda

Action Items

Create actionable items from proposed topics
1.
2.

Open Discussion Items

List any additional items below!

Proposed SIG-Build meeting agenda for Aug-10-22

Meeting Details

  • Date/Time: Aug 10, 2022 @ 05:00 pm UTC / 10:00 am PDT
  • Location: Discord SIG-Build Voice Room
  • Moderator: Deepak Sharma
  • Note Taker Mike Chang

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

What happened since the last meeting?

Meeting Agenda

Discuss agenda from proposed topics:

  • Adding support in the build system for VS2022: o3de/o3de#6707
  • Increasing CMake version: o3de/o3de#10939
  • Increased Build Times RCA
  • Build Failure Analysis improvements - Build logs are available from failed state, improvements are done, new RFC is required for the reporting. - Done.
  • DCO check PoC - In Progress.

Agenda notes

Add installers as a responsibility of SIG-build - o3de/community#136

  • No response yet on which SIG will own the installer experience.

Other topics for discussion

Outcomes from Agenda

SIG reviewers and maintainers groups

Action Items

  • Chairs: No action
  • Maintainers/Reviewers: As noted in the agenda outcome

Open Discussion Items

Triage backlog grooming: https://github.com/o3de/o3de/issues?q=is%3Aissue+is%3Aopen+label%3Asig%2Fbuild+label%3Aneeds-triage+no%3Aassignee

List any additional items below!

Migrate Nightly Pipeline to O3DE

Summary:

The purpose of this RFC is to document the build SIGs intent to migrate the nightly AR (Automated Review) pipeline over to O3DE's build infrastructure and to highlight the blockers for certain platforms.

This effort will require an investigation into which platforms we want to migrate and support in the nightly pipeline prior to starting this work.

Goals

Here are the main goals of migrating the pipeline over to O3DE:

  • Public visibility: We want the O3DE community to be able to view the status of the nightly jobs and contribute fixes to the build failures. Currently the nightly pipelines run on internal infrastructure that is only accessible by Amazon teams.
  • Transfer Ownership/Costs: The ownership of these pipelines and their platforms should be owned by the O3DE SIGs. This also includes the costs of running the pipeline.
  • Stay within budget: The Linux Foundation has specified a budget to spend on the AR infrastructure. We need to consider costs when migrating platforms to O3DE.
  • Useful State: The nightly pipeline should provide useful information to developers regarding build failures related to code changes. The requires the pipeline be in a stable state before it's migrated to O3DE.

Pipelines

  • Development Nightly Clean
  • Development Nightly Incremental

Note: There are also nightly pipelines created for stabilization branches prior to a release.

Blockers

This section contains details on the platforms that we cannot migrate in their current state.

Platforms

Platform Blockers
Mac/iOS Costs will exceed budget. Autoscaling currently not supported. Dedicated hosts are required to deploy Mac EC2 instances which are billed while the hosted instance is shutdown. Minimum 24hr allocation.
Windows GPU Costs will exceed budget. Dedicated hosts not required, so it's possible to autoscale. A solution is required to auto-connect instances when they startup.

Migration Plan

The main strategy of the migration plan is to transfer the nightly jobs to O3DE in phases. This will allow us to meet the goals identified above while we address the blockers.

Task Description GitHub Issue/PR
Identify platforms to migrate in the first pass First we need to identify the platforms that we want to support in the nightly pipelines, so that we can make the plan to migrate in phases. Check with the required SIGs for approval. Completed
Split up nightly pipeline into separate tags Update the build_config.json file for each platform to separate the nightly pipeline using the platforms identified in the previous task. This will allow us to run the excluded platforms in an internal pipeline while we address the blockers. o3de/o3de#9406
Create Jenkins pipelines Create nightly pipelines on O3DE Jenkins instances to run the separate nightly pipelines created in the previous task. o3de/o3de#9427
Create plan to address Mac/iOS blockers Investigate solutions to address the blockers to migrate Mac/iOS platforms to O3DE. This includes evaluating other mac hosting services. o3de/o3de#9428
Create plan to address Windows GPU blockers Investigate solutions to address the blockers to migrate the Windows GPU platform to O3DE. o3de/o3de#9429

Proposed RFC Feature CMake Presets Support

Summary:

The proposal here is to update the build_config.json files across the supported platforms to use the cmake-presets to configure configuring and building a project.
The cmake-presets option can also be used to configure the options for running CTest as well.

With CMake 3.23 adding support for an include option to specify other presets files to include inside the main CMakePresets.json, we can take advantage of it to provide separate per platform preset files to configure, build and run CTest for each of the platforms we support.

What is the relevance of this feature?

Using the cmake-presets options allows O3DE to reconcile the options that users follows to configure using cmake with how the Jenkins build server.
When a user wants to configure and build using cmake, they this specifying the options directly to the cmake command.
An example of a user configuring cmake is as follows

# Configure and generate a build solution
cmake -B <build-dir> -S <source-dir> -G <generator> -DLY_3RDPARTY_PATH=<3rdPartyPath> ...`
cmake --build <build-dir> --config <config>

Now when the Jenkins server performs a build, it runs the ci_build.py script to configure and kick offs a build as part of its pipeline steps

python\python.cmd -u scripts\build\ci_build.py --platform Windows --type profile

image

Feature design description:

The cmake-presets option provides a standardize CMake way to specify options to the CMake configure, build and test steps.
We have previously discussed crated a CMakePresets.json file in a discussion in July 2021.

Users and the CI pipeline would use this feature via the cmake --preset option.
Here is a psuedo example of how to configure for O3DE for Windows.

cmake --preset Windows <[additional options if needed>]

The cmake --build command supports the preset option as well.

cmake --build  --preset Windows <[additional options if needed>]

Finally the CTest also supports the --preset option as well

ctest --preset SUITE_main
ctest --preset SUITE_smoke
  • New Terminology
  • -preset - A specification of project wide build detail

Technical design description:

This works would involve adding a CMakePresets.json file to the o3de repo as a well as in the project templates root as well.
The CMakePresets file would be setup to use the new CMake 3.23 preset include feature other platform specific presets files from the <repo-root>/cmake/Platform/<Platform> directory.
This allows each platform that can be built on the host platform to be additive with the list of presets available for use.

Here is a sample of a how the CMakePresets.json inside the O3DE repo root could look

{
    "version": 4,
    "cmakeMinimumRequired": {
        "major": 3,
        "minor": 23,
        "patch": 0
    },
    "include": [
        "cmake/Platform/Android/CMakePresets.json",
        "cmake/Platform/iOS/CMakePresets.json",
        "cmake/Platform/Linux/CMakePresets.json",
        "cmake/Platform/Mac/CMakePresets.json",
        "cmake/Platform/Windows/CMakePresets.json"
    ],
    "configurePresets": [
        {
            "name": "default",
            "displayName": "Default Config",
            "description": "Default configuration which builds with Unity. Inherits Generator and Binary directory",
            "cacheVariables": {
                "LY_UNITY_BUILD": {
                    "type": "BOOL",
                    "value": "ON"
                }
            },
            "inherits": "${hostSystemName}-default"
        }
    ],
    "buildPresets": [
        {
            "name": "default",
            "configurePreset": "default"
        }
    ],
    "testPresets": [
        {
            "name": "default",
            "configurePreset": "default",
            "output": {
                "outputOnFailure": true
            },
            "execution": {
                "noTestsAction": "error"
            },
            "filter": {
                "include": {
                    "label": "(SUITE_smoke|SUITE_main)"
                },
                "exclude": {
                    "label": "(REQUIRES_gpu)"
                }
            }
        }
    ]
}

The per platform CMake Preset json files would add in configure and build presets that provides the defaulkt generators and build directories a customer can use.

What are the advantages of the feature?

  • Simplifies how new users interact with the build system. Instead of supplying options like LY_UNITY_BUILD, LY_3RDPARTY_PATH, they can just use a single preset instead.
  • Normalizes how CMake arguments supplied in the build_config.json that the Jenkins build automation uses, with the arguments that regular users supplies.
  • Presets are discoverable. They can be listed via the cmake --list-presets command.
  • Has built in integration with IDEs such as Visual Studio Code and CLion which is useful for Linux users
  • Users specific overides: Users can provide their own presets via the CMakeUserPresets.json and customize any configure, build or test options they desire.

What are the disadvantages of the feature?

  • Requires an update to CMake 3.23 to use this feature.
    This shouldn't be a problem for individual users, but for CI like Jenkins it would require a Node Update.

How will this be implemented or integrated into the O3DE environment?

Authoring presets to use to the CMake 3.23 include features will NOT break current workflows. This is purely an opt-in feature.
Developers would interact with the system using the --preset option when

Are there any alternatives to this feature?

Well not implementing CMake presets for O3DE is an option.
O3DE currently has it's own psuedo preset system in the form of using the ci_build.py script to invoke a build configuration listed in a build_config.json.
The issue with that is that is not standard, not documented within o3de and not integrated with CMake.
Due to that it is not easy for a user to discover that they can us the ci_build.py script to normalize their builds and they wouldn't have any known commands to run to list which build steps are available

How will users learn this feature?

An Impactful change notice will be posted to users announcing that O3DE supports CMakePresets and that the list of available presets can be listed using the cmake --list-presets command.
A documentation page on o3de.org will also be added to list examples of using a CMakePreset for configuring, building and running a test.
Users would be able to use the official CMake documentation to learn how to create their own CMake Presets: https://cmake.org/cmake/help/latest/manual/cmake-presets.7.html

Are there any open questions?

  • How many presets should O3DE expose out of the box? Every preset that is added to the CMakePresets.json is that has to receive a level of support by the O3D engineers and caution would needs to be exercised to prevent adding too many presets.
    The more presets there are the higher the likelihood that one would need to be removed which can strain user expectations when they are using such a preset. On top of that the more presets there out, the higher the cognitive burden a user would have to go through to discover which ones to use.

  • When should the Jenkins build nodes be updated to CMake 3.23 and the build scripts updated to invoke these presets.

Proposed SIG-Build meeting agenda for July-27-22

Meeting Details

  • Date/Time: July 27, 2022 @ 05:00 pm UTC / 10:00 am PDT
  • Location: Discord SIG-Build Voice Room
  • Moderator: Deepak Sharma
  • Note Taker Mike Chang

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

What happened since the last meeting?

Meeting Agenda

Discuss agenda from proposed topics:

  • Updates on adding support in the build system for VS2022: o3de/o3de#6707
  • Updates from Validation step in front of the parallel build pipeline - Done.
  • Updates for Build Failure Analysis improvements - Build logs are available from failed state, improvements are done, new RFC is required for the reporting.
  • New o3de-extras and canonical.o3de.org repo and workflow - Done.
  • DCO check PoC - In Progress.

Agenda notes

Add installers as a responsibility of SIG-build - o3de/community#136

  • No response yet on which SIG will own the installer experience.

Other topics for discussion

Outcomes from Agenda

SIG reviewers and maintainers groups

Action Items

  • Chairs: No action
  • Maintainers/Reviewers: As noted in the agenda outcome

Open Discussion Items

Triage backlog grooming: https://github.com/o3de/o3de/issues?q=is%3Aissue+is%3Aopen+label%3Asig%2Fbuild+label%3Aneeds-triage+no%3Aassignee

List any additional items below!

O3DE Jenkins Pipeline - Security Scanning

O3DE Jenkins Pipeline - Security Scanning

Summary:

This RFC the details the solutions to provide security scanning for the O3DE Jenkins Pipeline repo.

The main objective is to provide a mechanism to improve the security and best practices of the contributions to the cloud infrastructure and docker configurations in this repo.

The components we want to scan in the repo are the CDK packages and Docker images. All contributions will be required to pass the configured checks.

The scope of the security scanning is limited to the Jenkins server infrastructure and the components used to deploy it. This does not include the build node configs. Those configs are stored in the o3de repo: Build Node Configs

Feature design description:

The two main components that make up the O3DE Jenkins Pipeline repo are the CDK packages and the Docker image setup.

Component Usage Environment
CDK Packages Defines and deploys the AWS Infrastructure to host the Jenkins pipeline server. Python
Docker Creates the image for the container that runs the Jenkins pipeline server. Linux shell commands

The CDK scanning solutions typically provide coverage using one of these two options:

  1. Scan the CDK constructs
  2. Scan the generated CloudFormation templates

The tools that scan the CDK constructs will evaluate the code within each of the CDK packages for any potential security vulnerabilities that will created in the final CloudFormation stack. The benefit of scanning CDK constructs is that the static analysis and synthesis steps can be performed at the same time during the cdk synth step. Developers can generate the CF templates and run the static analysis with a single command. However, this does require adding an additional construct within the CDK app to support this.

The other options scan the generated CloudFormation templates after the packages are created using cdk synth. Scanning the generated templates does not require any changes to the codebase and these scanners are typically stand-alone applications.

CDK Package Solution: cdk-nag

Cdk-nag is an open source tool developed by AWS that provides the ability to scan CDK packages for security and best practice violations. To enable the checks, a cdk-nag construct needs to be added either to the top-level app or the individual stacks.

Example adding cdk-nag to the top-level app. This will enable the checks when running cdk synth or cdk deploy.

[...]
import cdk_nag

app = cdk.App()

Aspects.of(app).add(cdk_nag.AwsSolutionsChecks())

Example output:

cdk synth
[Error at /S3BucketWithCfnNagConstructStack/S3Bucket/Resource] AwsSolutions-S1: The S3 Bucket has server access logs disabled.
[Error at /S3BucketWithCfnNagConstructStack/S3Bucket/Resource] AwsSolutions-S2: The S3 Bucket does not have public access restricted and blocked.
[Error at /S3BucketWithCfnNagConstructStack/S3Bucket/Resource] AwsSolutions-S3: The S3 Bucket does not have default encryption enabled.

Docker Image Solution: Docker Scan

This tool is provided by Docker and provides the ability to scan the generated docker image for security vulnerabilities. This can run locally and in our pipeline, but does require that we first build the image prior to each scan.

Example setup and scan commands:

# Setup 
apt-get install docker-scan-plugin

# Build image
docker build -t jenkins .

# Run scan 
docker scan jenkins

General Scanning

In addition to the options detailed above, this section will provide scanning options for other components in the O3DE Jenkins Pipeline repo.

Dependabot

Dependabot can be used to keep the dependencies defined in the repo up-to-date. Dependencies are defined in the following locations:

  • Dockerfile: Our docker file uses the docker image published by Jenkins as its parent (e.g. FROM jenkins/jenkins:2.332.3-lts-jdk11)
  • cdk/requirements.txt: This file is used define the dependencies required to deploy the CDK stacks

Dependabot supports updating both docker and python dependencies. Enabling this tool in our repo can be found in its GitHub settings: Repo > Settings > Code security and analysis

To complete the setup, a config file also needs to be added to the repo at the following location: .github/dependabot.yml

Documentation on the .yml file can be found here: Configuring dependabot version updates

How will this be implemented

Github Actions/Pull Request checks

  • The scanning solutions listed above will be setup as GitHub actions on the O3DE Jenkins Pipeline repo. This will allow the checks to run on pull requests and to commits submitted to branches.

Are there any alternatives to this feature?

Yes. Static analysis for CDK packages is still limited, so most of the other solutions scanned the generated CloudFormation templates instead of scanning the cdk code directly.

For Docker images, options to scan dockerfiles/shell commands directly used paid or restrictive licenses.

Are there any open questions?

  • Will we be able to run these checks locally?
    • Yes, the solutions covered in thie RFC can be executed locally during development.
  • Will these solutions scan code going into O3DE?
    • No, this security scanning setup will only cover code going into the Jenkins Pipeline for O3DE. Investigation for the O3DE repo is tracked here: o3de/o3de#10032
  • Can the scanner tools be swapped out later?
    • Yes, once we setup the GitHub Actions to run on commits and pull request, we can swap out the actual scanning tools later provided they support the environment we're running in.

Proposed SIG-Build meeting agenda for June-29-2022

Meeting Details

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

Notes from last meeting on June 15th: https://github.com/o3de/sig-build/blob/main/meetings/notes/sig-meeting-20220615.md

Brian - Followup on the GHI on mac and ios builds for nightly with shirang

Shirang - Comment on the RFC for intermittent tests on any existing work from sig-build and reach out to sean on periodic build failure concerns

Brian - Update Github PR RFC following feedback

Meeting Agenda

Outcomes from Discussion topics

Discuss outcomes from agenda

Action Items

Create actionable items from proposed topics

Open Discussion Items

List any additional items below!

Proposed SIG-Build meeting agenda for Oct-19-22

Meeting Details

  • Date/Time: Oct 19, 2022 @ 05:00pm UTC / 01:00pm ET
  • Location: Discord SIG-Build Voice Room
  • Moderator: Deepak Sharma
  • Note Taker Brian Herrera

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

What happened since the last meeting?

  • O3DE 10.22 release

Meeting Agenda

Discuss agenda from proposed topics

Outcomes from Discussion topics

Discuss outcomes from agenda

Action Items

Create actionable items from proposed topics
1.
2.

Open Discussion Items

List any additional items below!

Proposed SIG-Build meeting agenda for May-18-22

Meeting Details

  • Date/Time: May 18, 2022 @ 05:00 pm UTC / 10:00 am PDT
  • Location: Discord SIG-Build Voice Room
  • Moderator: Deepak Sharma
  • Note Taker Mike Chang

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

What happened since the last meeting?

  • No Change.

Meeting Agenda

Outcomes from Discussion topics

SIG reviewers and maintainers groups

Ownership paths for SIG-Build

/scripts/build @o3de/sig-build-reviewers @o3de/sig-build-maintainers
/scripts/commit_validation @o3de/sig-build-maintainers
/scripts/license_scanner @o3de/sig-build-maintainers
/scripts/signer @o3de/sig-build-maintainers

Discuss outcomes from agenda

Action Items

Create actionable items from proposed topics

Open Discussion Items

List any additional items below!

Proposed SIG-Build meeting agenda for Aug-24-22

Meeting Details

  • Date/Time: Aug 24, 2022 @ 05:00pm UTC / 01:00pm ET
  • Location: Discord SIG-Build Voice Room
  • Moderator: Deepak Sharma
  • Note Taker Brian Herrera

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

What happened since the last meeting?

Meeting Agenda

Discuss agenda from proposed topics

Outcomes from Discussion topics

Discuss outcomes from agenda

Action Items

Create actionable items from proposed topics

  1. Investigate if we can utilize any cache system to improve build times.
  2. RFC on automatically assigning GHIs to owners for build failures.

Open Discussion Items

List any additional items below!

Proposed SIG-Build meeting agenda for Sep-21-22

Meeting Details

  • Date/Time: Sep 21, 2022 @ 05:00pm UTC / 01:00pm ET
  • Location: Discord SIG-Build Voice Room
  • Moderator: Deepak Sharma
  • Note Taker Brian Herrera

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

What happened since the last meeting?

  • Created stabilization/2210 branch for next O3DE release
  • Completed Build Failure Analysis Improvements.

Meeting Agenda

Discuss agenda from proposed topics

Outcomes from Discussion topics

Discuss outcomes from agenda

Action Items

Create actionable items from proposed topics
1.
2.

Open Discussion Items

List any additional items below!

Proposed SIG-Build meeting agenda for May-04-22

Meeting Details

  • Date/Time: May 04, 2022 @ 05:00 pm UTC / 10:00 am PDT
  • Location: Discord SIG-Build Voice Room
  • Moderator: Deepak Sharma
  • Note Taker Mike Chang

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

What happened since the last meeting?

  • Override changes for AP crashes proposal was implemented and is in place since April 14th

Meeting Agenda

Outcomes from Discussion topics

SIg reviewers and maintainers groups

Ownership paths for SIG-Build

/scripts/build @o3de/sig-build-reviewers @o3de/sig-build-maintainers
/scripts/commit_validation @o3de/sig-build-maintainers
/scripts/license_scanner @o3de/sig-build-maintainers
/scripts/signer @o3de/sig-build-maintainers

Discuss outcomes from agenda

Action Items

Create actionable items from proposed topics

Open Discussion Items

List any additional items below!

Proposed SIG-Build meeting agenda for June-21-21

Meeting Details

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

What happened since the last meeting?

Meeting Agenda

Introductions
Facilitator Deepak Sharma, Amazon, SDM
Participants Alphabetically - <Name, Company, Team Role>
Discuss agenda from proposed topics

Outcomes from Discussion topics

Discuss outcomes from agenda

Action Items

Create actionable items from proposed topics

Open Discussion Items

List any additional items below!

Proposed SIG-Build meeting agenda for Jan-25-23

Meeting Details

  • Date/Time: Jan 25, 2023 @ 05:00pm UTC / 01:00pm ET
  • Location: Discord SIG-Build Voice Room
  • Moderator: Deepak Sharma
  • Note Taker Brian Herrera

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

What happened since the last meeting?

  • RFC for AR Redesign

Meeting Agenda

Discuss agenda from proposed topics

Outcomes from Discussion topics

Discuss outcomes from agenda

Action Items

Create actionable items from proposed topics
1.
2.

Open Discussion Items

List any additional items below!

Proposed SIG-Build meeting agenda for Feb-09-22

Meeting Details

  • Date/Time: Feb 09 , 2022 @ 05:00 pm UTC / 10:00 am PDT
  • Location: Discord SIG-Build Voice Room
  • Moderator: Deepak Sharma
  • Note Taker Mike Chang

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

What happened since the last meeting?

Meeting Agenda

Discuss agenda from proposed topics

Outcomes from Discussion topics

Discuss outcomes from agenda

Action Items

Create actionable items from proposed topics

Open Discussion Items

List any additional items below!

RFC for Build charter

Build SIG Charter

This charter adheres to the Roles and Organization Management specified in "<sig-governance.md>".
Team information may be found in the "<readme.md>"

Overview of SIG

This SIG is the coordinating group that works with all sigs for O3DE Build and Infrastructure related activities in a cadence with a standard process. This SIG owns the systems that are used to build O3DE. Build SIG will also work on the build failure analysis and remediation, in addition to monitoring build times. In addition to that this SIG will also own the Infrastructure for O3DE including the systems and services related to Git, GitHub, Jenkins, GitHub Issues etc. This SIG is created with dedicated SIG contributors, reviewers and maintainers.

Responsibilities

  • Build failure analysis and remediation for O3DE
  • Build time monitoring and metrics for O3DE
  • O3DE Infrastructure
  • Git Maintenance for O3DE
  • GitHub Maintenance for O3DE
  • Jenkins Maintenance for O3DE

Goals

  • Major goals that SIG seeks to generally achieve

Scope

  • In charge of tech for project building systems (not CMake exclusive).
  • Determine version of build tools to be used.
  • Maintain guidelines on how CMake scripts are built.

In scope

  • Maintain previously accepted build scripts
  • PR build scripts to be accepted from pull requests
  • Define and maintain contribution guide for build and automation scripts
  • Communicate to Technical Steering Committee and Governing Board for cost related services related to build operation
  • Determine and maintain build script dependencies (local or infrastructure)
  • Determine and maintain infrastructure software systems (jenkins instaces, Github)
  • Determine and maintain build farms (cloud or physical server) instances that execute build system automation code
  • Determine and maintain LFS services for large asset stores
  • Determine and maintain source control systems
  • Build 3rd party gems and assemble libraries for distribution
  • Build required 3rd party library dependencies (Qt/etc)
  • Enable / disable malfunctioning build scripts and automation

Cross-cutting Processes

  • Maintain automation software tools for code review acceptance (make sure GitHub is doing what it needs to or add to it, prevalidation checks)
  • Maintain automation review for pull requests
  • Maintain infrastructure of get/send for 3rd party gems and assets
  • Triage and communicate with SIGs for malfunctioning build and automation scripts
  • Support, collaborate and work with all other SIGs in relation to any changes related to Build SIG.
  • Publish and maintain an intake process for the incoming requests from other SIGs related to the systems owned by the Build SIG.
  • Provide consultation, analysis, and guidance for new feature support brought to Build SIG by other SIGs.
  • Publish and maintain best practices, run books, and feature documentation related to build and infrastructure.

Out of Scope

  • Making decisions on acceptance of pull requests (handled by each SIG)
  • Maintaining code for gems and ensure compatibility and operability with project
  • Maintaining any externally connected systems to O3DE project (Jira/etc).
  • Not responsible for malfunctioning build or automation scripts
  • Not responsible for maintaining review automation tests.
  • CMake scripts responsibility of SIG creating feature

SIG Links and lists:

Roles and Organization Management

Build SIG adheres to the standards for roles and organization management as specified by . This SIG opts in to updates and modifications to

Individual Contributors

Additional information not found in the sig-governance related to contributors.

Maintainers

Additional information not found in the sig-governance related to contributors

Additional responsibilities of Chairs

Additional information not found in the sig-governance related to SIG Chairs

Subproject Creation

Additional information not found in the sig-governance related to subproject creation

Deviations from sig-governance

Explicit Deviations from the sig-governance

RFC - Automated Review build environment support policy

Intro

This policy proposal documents O3DF's support levels for major dependencies that are maintained in the Automated Review (AR) system.

Policy

Ownership

SIG-Build will maintain dependencies for the AR build nodes. Feature requests and bug fixes can be sent via Github and assigned to the SIG through labels or directly in the SIG-Build repo.

Scope

These are currently AWS EC2 AMI (Amazon Machine Image) that contain dependencies which include, but not limited to the following:

  • OS and its build level - Windows, Ubuntu, MacOS
  • OS level packages - libxcb*, mesa, Java, libssl, zlib
  • Compilers/Backends - MSVC, LLVM, GCC
  • Build systems/Frontends - Visual Studio (MSBuild), Ninja, Clang, XCode
  • Pre-build tools - System Python (including PyPi packages), CMake
  • Platform specific SDK - Android SDK
  • Build/Test specific tools - Git/Git LFS

Support priority

In conjunction with SIG-Platform, the general policy will be:

OS

  • One OS will be supported in AR at any given time. This will generally be one version behind the latest version (ex. Windows 2019 while latest is Windows 2022, or Ubuntu 20.04 LTS while latest is Ubuntu 22.04 LTS). The timing of the version supported will be agreed upon between SIG-Build and SIG-Platform
  • For nightly builds, latest OSes will be supported. Generally, only LTS versions are deployed. The version supported will be set by SIG-Platform and implemented by SIG-Build
  • For simplicity, the same build dependencies will be installed on all OS versions where possible. Multiple permutations will require agreement with TSC, SIG-Build, and SIG-Platforms

Build System

  • One Build system/Frontend will be supported in AR at any given time. The timing of the version supported will be agreed upon between SIG-Build and SIG-Platform
  • For nightly builds, the latest or preview version of the build system will be supported. The version supported will be set by SIG-Platform and implemented by SIG-Build

Pre-Build Tools and SDK

  • One set version will be supported in AR at any given time. The timing of the version supported will be agreed upon between SIG-Build and SIG-Platform
  • For nightly builds, the latest or preview version of the build system will be supported. The version supported will be set by SIG-Platform and implemented by SIG-Build

Current support levels

OS

OS Version Environment Notes
Windows 2019 1809 (eqv Windows 10 20H2) AR
Windows 2022 21H2 (eqv Windows 11 21H2) Nightly Planned
Ubuntu 20.04 LTS AR
Ubuntu 22.04 LTS Nightly Planned
MacOS Big Sur AR
MacOS Monterey Nightly Planned

Build Systems/Compiler

Build System Version Compiler Version OS Environment
Visual Studio 2022 17.3.0 MSVC v143 Windows 2019 AR
Visual Studio 2019 16.9.2 MSVC v142 Windows 2019 Nightly
Ninja 1.10.0 Clang/LLVM 12 Ubuntu 20.04 AR
Ninja 1.10.1 Clang/LLVM 14 Ubuntu 22.04 Nightly
Ninja 1.10.0 GCC 9.3.0 Ubuntu 20.04 Nightly
Ninja 1.10.1 GCC 11.2.0 Ubuntu 22.04 Nightly
XCode 13.2 Clang/LLVM 12 MacOS Big Sur AR
XCode 13.4 Clang/LLVM 13 MacOS Monterey Nightly

SDK

SDK Type Package Versions OS Environment
Android SDK "platforms;android-28" "platforms;android-29" "platforms;android-30" Windows 2019 AR and Nightly
Android NDK '"ndk;21.4.7075529"' Windows 2019 AR and Nightly
Android Google Play Packages '"extras;google;market_apk_expansion" "extras;google;market_licensing"' Windows 2019 AR and Nightly
Android Build Tools '"build-tools;30.0.2" Windows 2019 AR and Nightly

Tools

Tool Type Package Versions OS Environment
CMake 3.24.0 Windows 2019 AR and Nightly
CMake 3.24.0 Ubuntu 20.04 AR and Nightly
CMake 3.24.0 Ubuntu 22.04 AR and Nightly
CMake 3.24.0 MacOS Big Sur AR and Nightly

Proposed RFC Suggestion: Build Failure RCA Improvement

Build Failure RCA Improvement

Summary:

Build failure RCA system currently in use is to identify and categorize root causes of Jenkins builds failures. It depends on Jenkins Build Failure Analyzer plugin and search for certain log patterns from the build log.

However, current build failure RCA system has some bottlenecks due to the use of Build Failure Analyzer plugin:

  1. Build failure root causes identified are not grouped by build platforms/configuration because O3DE AR/Periodic build log is aggregated by log messages from multiple build platforms/configurations.
  2. It stops searching for the same root cause when the first occurrence of that root cause is found.
  3. Multi-line regex searching is not supported.
  4. Build failure RCA is done on Jenkins server, and it increases Jenkins server load when multiple builds are running.

The purpose of this RFC is to propose a solution to deprecate the use of Build Failure Analyzer plugin and solve the above bottlenecks.

What is the relevance of this feature?

This is important because O3DE contributors will have more control over how build failure root causes are identified, and this can be used in below scenarios:

  1. Do separate build failure RCA for each platform/configuration.
  2. Identify all failed tests, failed assets, compilation/linking errors and build environment failures.
  3. Identify owners of all failures.
  4. Create tickets for identified failures and assign the tickets to failure owners.

Feature design description:

Instead of using Build Failure Analyzer plugin to do build failure RCA on Jenkins server, use lambda functions to retrieve build log of each build platform/configuration and do build failure RCA.

A CDK package is used to deploy build failure RCA lambda functions, and build failure RCA patterns will be stored in the same CDK package. A CI/CD pipeline (Jenkins pipeline or CodePipeline) will be setup to verify and deploy the CDK package on every CDK change.

Use cases:

  1. Update build failure RCA pattern: O3DE contributor clones the CDK repo and creates pull requests to update build failure RCA pattern, a sig-build maintainer will run a CI/CD pipeline to verify the PR and then merge the PR. Once the PR is merged, the CI/CD pipeline will run automatically and deploy the CDK package.
  2. Identify build failure root cause of O3DE AR/Periodic build: When O3DE AR/periodic build fails, the build failure RCA system will retrieve build log of each platform/configuration and scan the logs separately, once all build failures root causes are identified, the metrics will be published to CloudWatch.
  3. Send build failure notification: Identified build failure root causes are grouped by failure type and platform/configurations, they will be included in notifications via email, Discord and Slack.

Technical design description:

Build Failure RCA CDK Stack

Build failure RCA system is deployed by CDK, it can be easily deployed to different environments.

Build failure RCA CDK Stack consists of following AWS resources:

  1. Post Build SNS Topic: SNS topic is used to receive post build message from AR/Periodic builds, and it feeds the data to SQS queue.

  2. SQS Queue: In case SNS topic reaches rate limiting and discard unprocessed data, SQS queue is used to receive post build message from Post Build SNS Topic, and it triggers Lambda function to do build failure RCA.

  3. RCA Dispatcher Lambda Function: RCA dispatcher lambda function is triggered by post build SNS topic, it retrieves AR/Periodic build data and dispatch the actual RCA work for each build platform/configuration to separate lambda functions. Once it received the RCA result from RCA worker lambda function, it uploads the RCA result to CloudWatch. If notification is enabled, it will send build failure notifications via email, Discord or Slack.

  4. RCA Worker Lambda Function: RCA worker lambda function retrieves build log of a certain build platform/configuration, it scans the build log and search for log messages that match build failure RCA patterns, once the RCA work is done, it uploads the build log to S3 and return RCA result to RCA dispatcher lambda function.

  5. Build Log S3 Bucket: Build log S3 bucket is used to store build logs grouped by build platform/configuration.

  6. CloudWatch Metrics: CloudWatch metrics is used to store build failure RCA result.

CDK Deployment pipeline

The CDK deployment pipeline is a Jenkins pipeline that deploys build failure RCA CDK stack on build failure RCA repo change events.

Verifying Build Failure RCA Repo Pull Request

Every build failure RCA repo change must go through pull requests. Pull requests will be tested by CDK deployment pipeline that is hooked with the PR status check rule. The CDK deployment pipeline will deploy a temporary CDK stack for the pull request and run some tests, once the tests are done, the CDK stack will be destroyed.

Retrieving Build Logs

AR/Periodic build log is aggregated by log messages from multiple build platforms/configurations, the only way to re-group the log by platform/configuration is to use BlueOcean API.

First the RCA dispatcher lambda function send a GET request

https://{JENKINS_URL}/blue/rest/organizations/jenkins/pipelines/{JOB_NAME}/runs/{BUILD_NUMBER}/nodes?tree=id,displayName,result,type,edges[*]

"tree" parameter is used to reduce Jenkins server load and reduce response size.

Response of the GET request contains the pipeline stage data.

  1. Parallel Stage: A parallel stage is the text label at the beginning of each parallel build, for example, Android [release] is a parallel stage.
  {
    "_class" : "io.jenkins.blueocean.rest.impl.pipeline.PipelineNodeImpl",
    "displayName" : "Android [release]",
    "id" : "116",
    "result" : "SUCCESS",
    "type" : "PARALLEL",
    "edges" : [
      {
        "_class" : "io.jenkins.blueocean.rest.impl.pipeline.PipelineNodeImpl$EdgeImpl",
        "id" : "778",
        "type" : "STAGE"
      }
    ]
  },
  1. Setup Stage: After the parallel stage is the setup stage, setup stage is to setup build node, pull source codes from Github and install build dependencies.
  {
    "_class" : "io.jenkins.blueocean.rest.impl.pipeline.PipelineNodeImpl",
    "displayName" : "Setup",
    "id" : "778",
    "result" : "SUCCESS",
    "type" : "STAGE",
    "edges" : [
      {
        "_class" : "io.jenkins.blueocean.rest.impl.pipeline.PipelineNodeImpl$EdgeImpl",
        "id" : "1112",
        "type" : "STAGE"
      }
    ]
  },
  1. Build Stage: Build stage is the stage runs the actual build task.
{
    "_class" : "io.jenkins.blueocean.rest.impl.pipeline.PipelineNodeImpl",
    "displayName" : "release",
    "id" : "1112",
    "result" : "SUCCESS",
    "type" : "STAGE",
    "edges" : [
      {
        "_class" : "io.jenkins.blueocean.rest.impl.pipeline.PipelineNodeImpl$EdgeImpl",
        "id" : "1718",
        "type" : "STAGE"
      }
    ]
  },

The RCA dispatcher lambda function uses these pipeline stage data to build a relationship graph of build platform/configuration, and then it triggers the RCA worker lambda function to do build failure RCA for failed build platform/configuration.

RCA worker lambda function sends a GET request

https://{JENKINS_URL}/blue/rest/organizations/jenkins/pipelines/{JOB_NAME}/runs/{BUILD_NUMBER}/nodes/{ID}/log

to get the build log of a certain build platform/configuration.

Build Failure RCA Patterns

RCA worker lambda function scans the build log and search for log messages that match build failure RCA patterns.

Build failure RCA pattern is in below JSON format:

  • name: Name of the build failure pattern.
  • description: Description of the pattern, it's used to describe the build failure.
  • comment: Comment to the build failure pattern.
  • category: Build failure category.
  • single_line: Log pattern regex tries to match single line if this is true, otherwise, Log pattern regex tries to match multi-lines.
  • find_all: Find all occurrences that match log patterns if this is ture, otherwise, it stops searching on first occurrence.
  • log_patterns: A list of regex string to match with the build logs.
  • log_testcases: Test cases that are used to validate the pattern regex.
  • owners: A list of failure owners. If a value starts with @, a customized function will be executed and return the owner. For example, if a value is @asset_processing, a customized function asset_processing will read the parsed error message and return the owner of failed asset file.

Example of a RCA pattern that matches single line, and it will find all occurrences.

{
  "indications": [
    {
      "name": "Asset Processing",
      "description": "Asset Processing error",
      "comment": "Asset Processing error, see log for more details",
      "single_line": true,
      "find_all": true,
      "log_patterns": [
        "^.*AssetProcessor: JOB LOG:.*ERROR.*$"
      ],
      "log_testcases": [
        "AssetProcessor: JOB LOG: 5/26/2021 10:11 PM | ERROR"
      ],
      "owners": [
        "@asset_processing"
      ]
    }
  ]
}

Example of a RCA pattern that matches multi line, and it will stop searching after first occurrence is found.

{
  "indications": [
    {
      "name": "CTest failure(s)/error(s)",
      "description": "Errors while running CTest",
      "comment": "Errors while running CTest",
      "single_line": false,
      "find_all": false,
      "log_patterns": [
        "The following tests FAILED:.*Errors while running CTest"
      ],
      "log_testcases": [
        "The following tests FAILED:"
      ],
      "owners": [
        "@ctest"
      ]
    }
  ]
}

Workflow

workflow

  1. A change in build failure RCA repo triggers the build failure RCA CDK deployment pipeline.
  2. The build failure RCA CDK deployment pipeline deploys build failure RCA CDK stack to AWS accounts that are using build failure RCA system.
  3. Change in O3DE repo or O3DE fork repo triggers the AR or Periodic builds.
  4. After each AR or Periodic build completes, it publishes build data to post build SNS topic.
  5. Post build SNS topic send post build data to SQS queue.
  6. SQS queue triggers the RCA dispatcher lambda function.
  7. RCA dispatcher lambda function retrieves AR/Periodic build data and dispatch the actual RCA work for each build platform/configuration to separate RCA worker lambda functions.
  8. RCA worker lambda function retrieves build log of a certain build platform/configuration, it scans the build log and search for log messages that match build failure RCA patterns, once the RCA work is done, it uploads the build log to S3 and return RCA result to RCA dispatcher lambda function.
  9. Once RCA dispatcher received the RCA result from RCA worker, it uploads the RCA result to CloudWatch metrics.
  10. Once RCA dispatcher received the RCA result from RCA worker, it sends build failure notifications via email, Discord or Slack.

What are the advantages of the feature?

  • It offloads build failure RCA work from Jenkins server to lambda functions, and thus reduce loads on Jenkins server.
  • Build failure RCA system can be deployed by CDK, it can be easily deployed to different AWS accounts that are willing to use build failure RCA system.
  • Build failure RCA is done per build platform/configuration instead of whole AR/Perodic pipeline.
  • Build logs can be kept longer on S3.
  • More detailed build failure RCA result can be included in build failure notification.

What are the disadvantages of the feature?

  • This is not directly integrated with Jenkins, and thus the build failure RCA result cannot be shown on Jenkins UI.
  • Each Jenkins environment that uses build failure RCA system need to setup the CDK deployment pipeline and hook up with build failure RCA repo.

How will this be implemented or integrated into the O3DE environment?

The build failure RCA CDK deployment pipeline will be created on O3DE Jenkins and the CDK stack will be deployed to O3DE AWS account.

Are there any alternatives to this feature?

Yes, an alternative is to write a Jenkins plugin that can offload build failure RCA work from Jenkins server, and do separate build failure RCA for each pipeline stage.

How will users learn this feature?

  • The internal guide of build failure RCA pattern will be made public.
  • A detailed build failure RCA CDK pipeline setup document will be created.

Are there any open questions?

  • Can this build failure RCA system be used for any Jenkins pipeline build other than O3DE builds?
    • Yes, this biuld failure RCA system is not tied to O3DE builds, it can be used in any Jenkins pipeline build.

Create Roadmap View

Hi! SIG release is working to help the O3DE community to get visibility of the O3DE roadmap. Full context can be read here: o3de/sig-release#79.

In order to achieve that goal, we need your help to create the roadmap for your SIG by February 6th, 2023, and start giving brief updates about the roadmap items at the Joint TSC meeting on February 28th, 2023. Instruction to create the roadmap view can be read in the RFC section "Roadmap Review in TSC monthly meeting".

Let me know if you have any concerns with the dates or any questions about the ask!

Proposed SIG-Build meeting agenda for Apr-06-22

Meeting Details

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

What happened since the last meeting?

Meeting Agenda

Discuss agenda from proposed topics

Outcomes from Discussion topics

Discuss outcomes from agenda

Action Items

Create actionable items from proposed topics

Open Discussion Items

List any additional items below!

Jenkins instance experiencing increased rates of 503s

There's reports that links to development and PR branch jobs pages in Jenkins result in 503s (service unavailable) between March 25 and March 28. Job execution in progress is not blocked, but seems to be preventing contributors from executing or monitoring the status of their builds

Proposed SIG-Build meeting agenda for June-01-22

Meeting Details

  • Date/Time: June 01, 2022 @ 05:00 pm UTC / 10:00 am PDT
  • Location: Discord SIG-Build Voice Room
  • Moderator: Deepak Sharma
  • Note Taker Mike Chang

The SIG-Build Meetings repo contains the history past calls, including a link to the agenda, recording, notes, and resources.

SIG Updates

What happened since the last meeting?

  • No Change.

Meeting Agenda

Outcomes from Discussion topics

SIG reviewers and maintainers groups

Ownership paths for SIG-Build

/scripts/build @o3de/sig-build-reviewers @o3de/sig-build-maintainers
/scripts/commit_validation @o3de/sig-build-maintainers
/scripts/license_scanner @o3de/sig-build-maintainers
/scripts/signer @o3de/sig-build-maintainers

Discuss outcomes from agenda

Action Items

Create actionable items from proposed topics

Open Discussion Items

List any additional items below!

Proposed RFC Feature O3DE Installer Test

Summary:

When a new O3DE installer is generated it should be tested to verify it installs a working version of O3DE, and uninstalls O3DE correctly.

An estimated cost of $62/mo based on

  1. 1hr test per 2-3 branches, 5-7 days per week depending on the current state of the release process and changes to release branches.
  2. Tests do not need a GPU instances for editor functions and should run on c5a.2xlarge + 300GB EBS. If we do not need or benefit from using EBS, we might be able to save additional cost.
  3. The installer is not built on the machine, but is downloaded as a result of the existing build job.

What is the relevance of this feature?

  1. All official installer testing is done on-demand by humans currently resulting in untested and potentially broken installers being made available to users.
  2. A significant amount of human time (20-40 minutes) is needed to test basic install/uninstall functionality.

Feature design description:

A new nightly Jenkins job runs and performs smoke tests on any new installer builds created in the development and release branches.

The results of these jobs are emailed to maintainers and available via the Jenkins website for O3DE installer builds.

Technical design description:

Jenkins modifications

A new Jenkins Job is created to run after the nightly installer jobs for development and release branches.
NOTE: "release branches" refers to the stabilization branches we generate (e.g. stabilization/2110rte). We do not need a job for the main branch because it will be identical to the stabilization branch.

Test implementation

  1. Jenkins job runs script on a clean instance which will
    1. download the latest installer using wget/curl
    2. git sparse clone the installer tests from GitHub
    3. runs installer tests
    4. clean up workspace using existing "delete workspace volume" feature
  2. Installer tests
    1. Install smoke tests
      1. Run the installer silently with the install path of a drive that has at least the minimum amount of required space and verify exit code, file and registry state when complete
      2. Run the Project Manager, verify it launches, the engine gets registered, then close Project Manager
      3. Create a project using scripts/o3de.bat using default template and verify the specified path is created and non-empty
      4. Build the project game launcher via CLI and verify the build process exit status
      5. Run the editor (and asset processor) with "-rhi=null" and the path to the new project and verify the editor process launches
      6. Run the game launcher with "-rhi=null" and verify the process launches
    2. Uninstall smoke tests
      1. Run uninstall and verify exit code, file and registry state when complete.

What are the advantages of the feature?

  1. We are less likely to provide a broken installer to users
  2. We waste less human time

What are the disadvantages of the feature?

  1. Infrastructure cost and maintenance
  2. Test development time and maintenance

How will this be implemented or integrated into the O3DE environment?

The installer tests will be Jenkins jobs that are triggered after the existing nightly installer jobs.

How will users learn this feature?

Regular users should not need to be aware of this feature, maintainers would remove install builds that are failing, or not upload them at all.

Are there any open questions?

  1. What about other platforms?
    Initial testing will be for the Windows platform only, future tasks will address testing other platform installers.

  2. Will automation be designed to prevent failing installer builds from being uploaded and will be users be warned?
    Currently only maintainers will be notified of the installer test status and it will be up to them to determine the correct next steps depending on the severity of the failed test(s).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.