Giter Club home page Giter Club logo

mu_devops's Introduction

Project Mu Developer Operations (DevOps) Repository

Latest Mu DevOps Release Version (latest SemVer) Commits Since Last Release Sync Mu DevOps Files to Mu Repos Containers Build

This repository is part of Project Mu. Please see Project Mu for details https://microsoft.github.io/mu

This repository is used to manage files related to build, continuous integration (CI), and continuous deployment (CD) for other Project Mu repositories.

Many of these files are generic YAML templates that can be combined together to compose a fully functional pipeline.

Python based code leverages edk2-pytools to support cross platform building and execution.

You can find a high-level summary of the latest changes since the last release by viewing the latest draft release.

Table of Contents

  1. Project Mu Developer Operations (DevOps) Repository
  2. Table of Contents
  3. Continuous Integration (CI)
  4. Conventions
  5. Containers
  6. GitHub Automation Workflow Overview
  7. GitHub Automation Workflow Summary
  8. GitHub Action Summary
  9. Links

Continuous Integration (CI)

There are two broad categories of CI - Core CI and Platform CI. You may see these terms used in the repo.
  • Core CI - Focused on building and testing all packages in Edk2 without an actual target platform.
  • Platform CI - Focused on building a single target platform and confirming functionality on that platform.

Code Coverage

mu_devops provides azure pipeline templates for uploading code coverage to the pipline currently executing, or directly to codecov.io for public github repositories that use azure pipelines. No matter the yaml file you are using, whether it be MuDevOpsWrapper.yml, Jobs/PrGate.yml, Steps/PrGate.yml or Steps/UploadCodeCoverage.yml itself, the only a action that needs to be taken is to set an environment variable coverage_upload_target to ado or codecov.

Conventions

  • Shared templates in Project Mu repos are encouraged to be maintained in this repository.
  • The .github directory contains GitHub collateral for this repository.
    • Some of the files are shared GitHub actions or workflows used (referenced) by other repositories as well.
  • Files that are synced to other repositories should be placed in the .sync folder.
    • Some files are synced back to this repository (mu_devops).
  • Azure Pipelines job and step templates should respectively be placed in the Jobs and Steps directories.
  • YAML files should have the extensions *.yml.
    • An exception is the markdown configuration file (.markdownlint.yaml) that uses .yaml for consistency with pre-existing conventions across Mu repos.

Containers

This repo maintains containers used throughout Project Mu projects. Containers provide well-defined, ready-to-go images and result in improved performance, portability, and consistency of build environments. Project Mu leverages containers for both server-side builds (e.g. pull requests and continuous integration) and for local developer builds.

At this time, containers are only offered for Linux. If you want to get started quickly and receive the smoothest build experience, it is recommended to use containers where available.

The Containers directory contains the actual dockerfiles for building the containers. The containers are actually built (in pull requests to dockerfiles and merges to the main branch) in the .github/workflows/Build-Containers.yml workflow. On any change to a dockerfile a new container is built and pushed to the Microsoft GitHub container registry as a container package associated with this repo. The latest Project Mu container builds are available in the Packages - Mu DevOps container feed and more information is available in the Container Readme file.

GitHub Automation Workflow Overview

This repository also drives automation of Project Mu GitHub repositories.

Leaf Workflows & Reusable Workflows

Workflows are split into two categories (1) leaf and (2) reusable.

The main reason for reusable workflows is to consolidate the main logic for the workflow to a single file and allow the leaf workflow to be present in repositories that opt into what the reusable workflow provides. Leaf workflows can provide any repo-specific input to a reusable workflow (if necessary). Leaf workflows can be considered minimal wrappers around reusable workflows.

Reusable Workflows

These workflow are only designed to be called from other workflows. The files are maintained in the .github/workflows directory of this repository. This is mandatory as GitHub only allows leaf workflows to call reusable workflows located in this directory.

Review reusable workflow files to understand what they do and what input parameters are available.

Leaf Workflows

These workflow are only designed to call reusable workflows. They should not directly invoke GitHub Actions. The actual GitHub Actions used by Project Mu are centrally tracked/updated in the single-copy reusable workflow files in the Mu DevOps repo. This allows dependabot to update the actions here at once.

GitHub Automation Workflow Summary

Following is a brief summary of the actual workflows in the repository.

Auto Merge

As automated bots pick up mundane tasks like syncing PIP module updates, submodules, files, and so on, an increasing number of pull requests can accumulate that essentially update dependencies we expect to be updated over time. In most cases, we simply care that the new update passes CI checks.

Therefore, Project Mu repos auto merge certain pull requests to reduce human burden of approving these requests in all of the Project Mu repos. Individual repos can opt out of this functionality by removing the leaf workflow sync to their repo, however, it is recommended to keep this flow enabled for consistency across all repos.

To see more about this flow look in these files:

  • The main reusable workflow file:
    • .github/workflows/AutoMerger.yml
  • The leaf workflow
    • .sync/workflows/leaf/auto-merge.yml

A Project Mu repo simply needs to sync .sync/workflows/leaf/auto-merge.yml to their repo in Files.yml and the auto merge workflow will run in the repo.

Auto Approver

Auto approves pull requests from allowed bot accounts. As part of reducing dependency overhead, this workflow first approves pull requests that are then auto merged after CI status checks complete. If a CI status check (e.g. build) fails, the pull request will not be merged.

Note: This is currently disabled in most Project Mu repos.

To see more about this flow look in these files:

  • The main reusable workflow file:
    • .github/workflows/AutoApprover.yml
  • The leaf workflow
    • .sync/workflows/leaf/auto-approve.yml

A Project Mu repo simply needs to sync .sync/workflows/leaf/auto-approve.yml to their repo in Files.yml and the auto approve workflow will run in the repo.

File Synchronization

Because Project Mu is distributed over many repositories, a need arises to sync common files across all of the repos. This is done via the .github/workflows/FileSyncer.yml workflow in Mu DevOps. It determines how to map files from Mu DevOps to any repo with the configuration file .sync/Files.yml.

The configuration file can map any file in Mu DevOps to any file path in a destination repo. Flexibility is provided to map the same file to different file paths in different repos, not map the file to some repos, etc. Whole directories can also be synced as well.

The file sync operation automatically runs anytime a file in the .sync/ directory of Mu DevOps is updated.

The file modification flow should be as follows:

  1. Developer updates a synced file in Mu DevOps
  2. Once PR for (1) is merged all mapped repos get a PR with the change
  3. Reviewers in each repo review and approve the PR
  4. The file is now in sync across all repos

File synchronization PRs are created by the Project Mu UEFI Bot account.

The file synchronization process will use the original commit title and message when syncing the change if it is triggered on a single commit. Therefore, it is recommended to make changes to sync files one file per commit at a time. If more than one file is modified, the PR is simply a single commit with a generic message containing both changes.

Initial Issue Triage

This repo syncs GitHub issue form templates to many Project Mu repos. Part of initial triage for incoming issues involves parsing data in the issue form to apply the appropriate labels so the issue is ready for triage by a human.

Issues need to be triaged by a human when the state:needs-triage label is present. This workflow can parse details provided in issue forms to apply additional labels. For example, the state:needs-owner label is applied if the user indicates they are not fixing the issue, the urgency:<level> label is applied based on user selection in the urgency dropdown, etc.

A Project Mu repo simply needs to sync .sync/workflows/leaf/triage-issues.yml to their repo and the issue triage workflow will run in the repo.

This workflow works in concert with other issue workflows such as .sync/workflows/leaf/issue-assignment.yml to automate labels in issues based on the state of the issue.

Issue Assignment

A generic workflow that contains actions applied when GitHub issues are assigned. Currently, the workflow removes labels from the issue that are no longer relevant after it is assigned.

To see more about this flow look in these files:

  • The main reusable workflow file:
    • .github/workflows/IssueAssignment.yml
  • The leaf workflow
    • .sync/workflows/leaf/issue-assignment.yml

Label Automation

Labels are automated from this repo in two main ways:

  1. Automatically synchronize labels across all Project Mu repos
  2. Automatically apply labels to issues and PRs

(1) is provided via the .github/workflows/LabelSyncer.yml reusable workflow with the labels defined in the file .github/Labels.yml.

(2) is provided via the .github/workflows/Labeler.yml reusable workflow with the labeling configuration defined in .sync/workflows/config/label-issues.

Labels are synced to all repos on a regular schedule that is the same for all repos.

Labels are automatically applied to issues and pull request on creation/modification and can be applied based on file paths modified a pull request or content in the body of the issue or pull request.

Pull Request Validator

Validates pull request formatting against requirements defined in the workflow. This workflow is not intended to strictly validate exact formatting details but provide hints when simple, broad changes are needed to enhance the quality of pull request verbiage.

  • The leaf workflow
    • .sync/workflows/leaf/pull-request-formatting-validator.yml

Release Drafting

In order to ensure semantic versioning is followed based on well-defined labels used in Project Mu pull requests, the release drafting process is automated. On every PR merge, a draft release is updated that contains the PR change entry categorized according to the labels with the semantic version of the draft release updated according to the semantic version specification.

This means, that the details for an upcoming release are always available, the release format is consistent across Project Mu repos, and semantic versioning is followed consistently.

The draft release should be converted to an actual release any time the minor or major version is updated by a change.

To see more about this flow look in these files:

  • The main reusable workflow file:
    • .github/workflows/ReleaseDrafter.yml
  • The configuration file for the reusable workflow:
    • .sync/workflows/config/release-draft/release-draft-config.yml
      • This will be synced to .github/release-draft-config.yml in repos using release drafter

A Project Mu repo simply needs to sync .sync/workflows/leaf/release-draft.yml and the config file .sync/workflows/config/release-draft/release-draft-config.yml to their repo and adjust any parameters needed in the sync process (like repo default branch name) and the release draft workflow will run in the repo.

Scheduled Maintenance

Performs regularly scheduled maintenance-related tasks such as closing pull requests and issues marked stale. Similar tasks can be added to the workflow over time.

The leaf workflow contains the primary implementation and is directly synced to subscribed repos:

  • .sync/workflows/leaf/scheduled-maintenance.yml

Stale Detection

Stale issues and pull requests are automatically labeled and closed after a configured amount of time.

This is provided by the .github/workflows/Stale.yml reusable workflow.

Individual repositories can control the label and time settings but it is strongly recommended to use the default values defined in the reusable workflow for consistency.

GitHub Action Summary

Following is a brief summary of the GitHub Actions maintained in the repository.

Submodule Release Updater

A GitHub Action and leaf workflow that automatically create a pull request for any submodule in a repo that has a new GitHub release available. The leaf workflow can easily be synced to repos and wraps around the GitHub action.

  • The GitHub action
    • .github/actions/submodule-release-updater
  • The leaf workflow
    • .sync/workflows/leaf/submodule-release-update.yml

Links

mu_devops's People

Contributors

antklein avatar apop5 avatar cfernald avatar dependabot[bot] avatar erich-mcmillan avatar javagedes avatar kenlautner avatar kuqin12 avatar makubacki avatar marcchen46 avatar microsoft-github-operations[bot] avatar pharlikar avatar spbrogan avatar uefibot avatar vineelko avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

mu_devops's Issues

Port inline pipeline scripts to Python

As some self-hosted agents are adopting mu_devops we want to reduce the number of dependencies on those agents. For example, eliminate bash support on Windows and Powershell on Linux. This simplifies agent software requirements and reduces the size of software installed and maintained on the agents.

The common language we'd prefer to use is Python. By moving all pipelines to use Python for inline scripting, the templates will be more portable to these agents.

issue-labeler 2.6+ update needs a logic change

The issue-labeler 2.6 updates enforces HTTP errors. An error is being returned when the action attempts to remove a label that does not exist.

Ideally, a check would be in place to see if a label exists before attempting to remove it to prevent the error.

This task tracks following up on a plan to move off v2.5.

Remove .pytool CodeQL fallback in the CodeQL workflow

PR #299 updated .sync/workflows/leaf/codeql.yml to first check the new location (as of Mu 2311) for the CodeQL plugin in Mu Basecore BaseTools. If not found, it falls back to the previous location in .pytools.

This is to allow immediate backward compatibility with the latest Mu DevOps release across existing Mu branches. It is recommended that 2302 (and other relevant branches) move to the BaseTools location. When all branches are confirmed to have moved, the fallback to .pytools can be removed in the file.

Increase Extensibility in TagGenerator.py

Background

Scripts/TagGenerator/TagGenerator.py contains code to automatically tag a commit with a release version tag for ADO use cases where GitHub Actions don't apply.

The script currently specifies a single semantic versioning format that works for Mu repos:

  • <Major>.<Minor>.<Patch>

Other consumers have expressed interest in the script but need to use a custom version format. In this particular case:

  • [ProductName].[VendorNumber].[FirmwareComponent].[MajorVersion][MinorVersion].[Sku].[Patch]

An original Project Mu versioning goal was to drive consistent versioning through a well-established standard like semantic versioning. Given a deviation is needed due to conflicting requirements for this consumer, the issue proposes changes to handle both formats.

It is still a goal in this proposal to make the versioning information completely visible in mu_devops without depending on ambiguous gaps filled in by code elsewhere. This keeps opinionated consistency in place, makes the code here more useful to a broader set of users, and makes overall maintenance of the code much easier in a single upstream location.

Details

I'd prefer to continue to capture the full context of the version in a mu_devops script. Ideally, different formats would be abstracted behind a class. The class would provide information needed to make common decisions irrespective of the underlying format details. Then we don't need half-baked information here connected with other scripts elsewhere, all of the version information can be maintained behind a single abstracted version API. This also gives the benefit that other Python code using the class wouldn't need to change significantly if the underlying version format changed in the future.

Module level functions like is_breaking_change(), is_security_change(), is_new_feature(), generate_notes(), etc. would become class methods and return consistent information regardless of how they return the format for the underlying version.

In the end, this would mean:

  • That the existing format ("semantic versioning format") and new format ("Product Component format") would have their underlying format details readily visible to developers that look at the scripts in mu_devops.
    • Other projects can easily choose the appropriate format without reinventing the wheel.
  • Other Python code can use the class API to get various version information regardless of the underlying format details.
  • The script can easily and obviously be extended in the future to support new formats without modifying various lines of code here and there in the procedural logic which is error prone and messy.
  • Mu Devops still provides ready-to-use versioning schemes that don't need details filled in elsewhere.

This issue is in reference to tracking a change discussed in #293.

Increase time for PR bot automation to check for PR updates needed

The auto merge workflow currently checks for PR updates for 1 minute. In some cases, a bot PR cannot be merged right away. For example, either another bot PR is merged before its CI checks complete or a manual PR is merged. In any case, the bot PR needs to be rebased and the status checks run again.

This task tracks increasing the time these updates can be detected.

Validate PR template has been update in PR validator

The Mu DevOps PR Formatting Validator workflow validates correct formatting of PR descriptions in Project Mu repos.


The PR formatter should be updated to check that these instructions have been followed:

  1. Replace this text with an actual descrption:

    <_Include a description of the change and why this change was made._>
  2. Remove this line of instructions so the PR description shows cleanly in release notes:

    "For details on how to complete to complete these options and their meaning refer to [CONTRIBUTING.md](https://github.com/microsoft/mu/blob/HEAD/CONTRIBUTING.md)."

  3. For each checkbox in the PR description, place an "x" in between [ and ] if true. Example: [x].
    (you can also check items in the GitHub UI)

    • [] Impacts functionality?
      • Functionality - Does the change ultimately impact how firmware functions?
      • Examples: Add a new library, publish a new PPI, update an algorithm, ...
    • [] Impacts security?
      • Security - Does the change have a direct security impact on an application,
        flow, or firmware?
      • Examples: Crypto algorithm change, buffer overflow fix, parameter
        validation improvement, ...
    • [] Breaking change?
      • Breaking change - Will anyone consuming this change experience a break
        in build or boot behavior?
      • Examples: Add a new library class, move a module to a different repo, call
        a function in a new library class in a pre-existing module, ...
    • [] Includes tests?
      • Tests - Does the change include any explicit test code?
      • Examples: Unit tests, integration tests, robot tests, ...
    • [] Includes documentation?
      • Documentation - Does the change contain explicit documentation additions
        outside direct code modifications (and comments)?
      • Examples: Update readme file, add feature readme file, link to documentation
        on an a separate Web page, ...
  4. Replace this text as instructed:

    <_Describe the test(s) that were run to verify the changes._>
  5. Replace this text with as instructed:

    <_Describe how these changes should be integrated. Use N/A if nothing is required._>

Consider consolidation of "custom" azure pipeline files

Several repos have pipeline files considered different enough, that they have been broken out into their own directories (in the .sync/azure_pipelines/custom directory of this repo).

The files are maintained in mu_devops so they can be patched with the mu_devops version to use during the file sync process but, are otherwise copied directly to the relevant repo.

Note that files in .sync/azure_pipelines/matrix_dependent already are consolidated across all repos that use a Matrix-Build-Job<...>.yml file.

This task is to consider consolidation of the files in "custom" such that the total number of files could be reduced. This could involve content substitution or generation at sync time.


I did originally consider doing more to consolidate these files but I felt the tradeoff in complexity of dynamically forming the file versus content reduction made maintainability worse. Looking at the files 1:1 seemed to make it easier to maintain. I'll revisit this in this task though.

Add Rust coverage data to PRs

We can generate coverage data today with cargo tarpaulin. This task tracks adding that coverage data to codecov.io so we can get PR comments showing coverage delta.

This item is meant to track the overall task, though the changes may not be entirely in mu_devops.

`impact:non-functional` label logic is inversed

PRs present options that automatically apply labels to the PR.

Example:
image

The "Impacts functionality?" box currently applies the impact:non-functional label if checked. The logic needs to be inverted to be correct.

Assign submitter as assignee if they indicate issue ownership

In the issue templates synced from mu_devops to other repos, the submitter can elect to own the issue. Currently, if the submitter does not take ownership the state:needs-ownerlabel is added.

This request tracks additionally adding the submitter as the assignee if they choose to take ownership of the issue.

Fix codecov upload command parameters

In 61bd5b5, I originally passed the command and params in a sequence to Popen(). I switched params to be a single string instead of a sequence. I forgot to update the Popen() call to pass the value as a single string instead of the sequence.

The command will still work but parameters will not be passed correctly until only the single string is passed.

@Javagedes will include this in another change he's making.

Add Azure DevOps Support to submodule-release-updater

Currently the submodule release updater is implemented as a composite GitHub Action that wraps a single Python script. Because this currently only targets GitHub repos, it also directly uses the GitHub REST API.

It would be useful to expand support for Azure DevOps (ADO) repos as well. In that case, the Python script could be removed directly from the action.yml file and an endpoint abstraction put in place to redirect API calls either to GitHub or ADO.

Identify breaking changes in auto drafted release notes

The GitHub label impact:breaking-change currently updates the major version component of the repo if present in a change.

Since integration of breaking changes is important, the release notes should also highlight any breaking changes so consumers can quickly see what action is needed.

[Bug] Release Drafter needs config file synced

6e00a3d synced the release drafter leaf workflow to repos. However, a local config file is also needed. So, the config file currently in mu_devops/.github/ReleaseDraft.yml needs to be synced to the .github directories of Mu repos as well.

wheel and setuptools should be installed

Currently, pip installation as performed by the steps in the SetupPythonPreReqs.yml template in this repo result in a number of DEPRECATION warnings and notices installation may fail in an upcoming pip update.

This should be resolved to prevent unexpected failures in the future.

Example of current output from a release/202208 mu_basecore pipeline:

Collecting edk2-pytool-library~=0.12.1
  Downloading edk2_pytool_library-0.12.1-py3-none-any.whl (453 kB)
     ------------------------------------- 453.5/453.5 kB 14.3 MB/s eta 0:00:00
Collecting edk2-pytool-extensions~=0.20.0
  Downloading edk2_pytool_extensions-0.20.0-py3-none-any.whl (2.5 MB)
     ---------------------------------------- 2.5/2.5 MB 31.5 MB/s eta 0:00:00
Collecting edk2-basetools==0.1.24
  Downloading edk2_basetools-0.1.24-py3-none-any.whl (1.3 MB)
     ---------------------------------------- 1.3/1.3 MB 21.2 MB/s eta 0:00:00
Collecting antlr4-python3-runtime==4.7.1
  Downloading antlr4-python3-runtime-4.7.1.tar.gz (111 kB)
     -------------------------------------- 111.4/111.4 kB 6.7 MB/s eta 0:00:00
  Preparing metadata (setup.py): started
  Preparing metadata (setup.py): finished with status 'done'
Collecting regex
  Downloading regex-2022.10.31-cp311-cp311-win_amd64.whl (267 kB)
     ------------------------------------- 267.7/267.7 kB 17.2 MB/s eta 0:00:00
Collecting pyyaml>=5.3.1
  Downloading PyYAML-6.0-cp311-cp311-win_amd64.whl (143 kB)
     -------------------------------------- 143.2/143.2 kB 4.3 MB/s eta 0:00:00
Collecting pefile>=2019.4.18
  Downloading pefile-2022.5.30.tar.gz (72 kB)
     ---------------------------------------- 72.9/72.9 kB 2.0 MB/s eta 0:00:00
  Preparing metadata (setup.py): started
  Preparing metadata (setup.py): finished with status 'done'
Collecting semantic-version>=2.10.0
  Downloading semantic_version-2.10.0-py2.py3-none-any.whl (15 kB)
Collecting future
  Downloading future-0.18.2.tar.gz (829 kB)
     ------------------------------------- 829.2/829.2 kB 17.4 MB/s eta 0:00:00
  Preparing metadata (setup.py): started
  Preparing metadata (setup.py): finished with status 'done'
Installing collected packages: edk2-pytool-library, antlr4-python3-runtime, semantic-version, regex, pyyaml, future, edk2-basetools, pefile, edk2-pytool-extensions
  DEPRECATION: antlr4-python3-runtime is being installed using the legacy 'setup.py install' method, because it does not have a 'pyproject.toml' and the 'wheel' package is not installed. pip 23.1 will enforce this behaviour change. A possible replacement is to enable the '--use-pep517' option. Discussion can be found at https://github.com/pypa/pip/issues/8559
  Running setup.py install for antlr4-python3-runtime: started
  Running setup.py install for antlr4-python3-runtime: finished with status 'done'
  DEPRECATION: future is being installed using the legacy 'setup.py install' method, because it does not have a 'pyproject.toml' and the 'wheel' package is not installed. pip 23.1 will enforce this behaviour change. A possible replacement is to enable the '--use-pep517' option. Discussion can be found at https://github.com/pypa/pip/issues/8559
  Running setup.py install for future: started
  Running setup.py install for future: finished with status 'done'
  DEPRECATION: pefile is being installed using the legacy 'setup.py install' method, because it does not have a 'pyproject.toml' and the 'wheel' package is not installed. pip 23.1 will enforce this behaviour change. A possible replacement is to enable the '--use-pep517' option. Discussion can be found at https://github.com/pypa/pip/issues/8559
  Running setup.py install for pefile: started
  Running setup.py install for pefile: finished with status 'done'
Successfully installed antlr4-python3-runtime-4.7.1 edk2-basetools-0.1.24 edk2-pytool-extensions-0.20.0 edk2-pytool-library-0.12.1 future-0.18.2 pefile-2022.5.30 pyyaml-6.0 regex-2022.10.31 semantic-version-2.10.0

[notice] A new release of pip available: 22.3 -> 22.3.1
[notice] To update, run: python.exe -m pip install --upgrade pip

[Feature] Add named repo groups in .sync/Files.yml

As the file grows, groups of repos are emerging as commonly being bundled together. This request tracks adding named groups to make these collections of repos more descriptive and easier to maintain.

Test All Mu DevOps Consumer Builds in Pull Requests to Repo

We need to ensure that changes made in mu_devops pass all consumer pipelines.

Pull requests into mu_devops need to have status checks against all repos that use it as a repository resource to verify the build succeeds with the mu_devops change.

Add ability to close PRs and issues based on labels

We have several labels now that indicate an issue or PR is no longer valid. For example, state:wont-fix, state:invalid, and so on.

To help complete the automation flow of identifying and closing items we no longer plan to look at, the ability to auto close such issues and PRs should be added.

Add ability to apply labels based on issue form input

Issue forms currently have a number of places where input is standardized to allow automated decisions to be made based on the input values.

Free text input (not very reliable) should be able to be handled by the reg ex flow already in place. This feature is mainly about adding the ability to exactly match the values in dropdowns and auto assign labels since these are very reliable (and form validated) input values.

The change should allow values in each dropdown to map to a unique label that will be applied.

Add support for containers in build pipeline

containers provide a more consistent and controlled build environment. mu_devops should allow consumers to specify a container environment to use and/or provide a default image.

Need wheel and setuptools installed in local user experience

PR #25 installs the wheel and setuptools pip modules in a pipeline step.

This is to ensure all Project Mu repos have these installed as pre-requisites (for the reason mentioned in the PR) before installing other pip modules.

However, the same pre-requisites need to be accounted for when local users are installing pip modules.

Since this is not an immediate issue, all of the pip-requirements.txt files in all of the repos are not updated to have wheel and setuptools to prevent unnecessary dependency thrash across the repos. We're expected to enable a "git subtree like" process soon that could consolidate pip requirements such as these.

This issue is filed as a reminder to include these modules in the consolidated pip requirements when possible. If this becomes more urgent before that is done, the pip-requirements.txt files in repos can be updated.

Optimize code coverage publishing in pipelines

When a large number of pipeline runs at once (e.g. pytools pip update), the PublishCoverage job in Jobs/PrGate.yml significantly contributes to the overall time for the pipeline to finish.

This makes PRs take much longer to reach a status check finished state and for the overall job queue to drain. Essentially, the pipeline has to queue twice, once for all of the matrix jobs and again for the code coverage publishing job.

This issue tracks optimizing code coverage publishing to reduce the impact on overall pipeline execution time.

For example, a matrix will spawn N jobs. At the end of each matrix job checking if all other matrix jobs (N-1) are complete, perhaps using the ADO REST API, and then attempting to publish code coverage directly from the job, etc.

Reduce automated bot load on agents

The build queue can extend quite long when certain automated tasks occur such as dependabot updates. This is especially true if an update causes other automation to trigger. For example, a dependabot update in a repo picks up a pip update, other repos have a submodule dependency on that repo so they trigger when that build completes, and so on.

Right now, the plan is to simply move most automation tasks that can have a high impact on the build system to times when most development does not occur and then reevaluate if any further changes are needed.

[Bug] Code coverage results missing in pipeline UI

Some code coverage results are not reported in the Azure pipeline UI.

For example this build runs MacAddressEmulationDxe tests, but they do not appear in the coverage.xml 

There's also been changes to code coverage reporting and result file merge capabilities added to edk2 recently. See:

tianocore/edk2#3349

This task tracks reviewing and updating code coverage for Project Mu repos.

Add process to ensure semantic versioning and release consistency

We can use information already available (labels) to improve our ability to track semantic versioning compliance with more frequent and better documented releases.

This feature should include the ability have automated releases where semantic versioning is rolled according to PR impact data and the next release info is always available to see what's happened since the last release. This makes it easy to determine when to release (on minor and major version revs) and do so with minimal effort.

In addition, the release info should be categorized so it's easier to understand what kind of changes are in a release.

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.