The process of building isolated application begins with the allow-list. The allow-list is a collection of apps that are eligible to take advantage of the faster workflow.

Functionality

The allow-list lives in a JSON config file, and is separated into two parts:

singleApps

A list of Webpack entry names from application manifests

groupedApps

Root folders of grouped applications that live in src/applications

Entry names that are added to the allow-list should come from the entryName property in an application’s manifest. These are single applications that aren’t grouped in a subdirectory in src/applications.
Applications sharing a directory in src/applications should be added to the groupedApps property. This is because grouped applications often share code in their root folder, so they are built altogether to ensure the quality of the changes.

Once an application or grouped applications are added to the allow-list, branches with changes exclusive to those applications will see a faster workflow. Branches that include changes from non-application code, or applications that aren’t on the allow-list, will perform a full build and all unit tests as usual.

As of now, this behavior does not run on the main branch. Full builds are executed as usual.

Example Scenarios

Application(s) on allow-list

Changed files in branch

Build Outcome

"allow": {
  "singleApps": [
    {
      "entryName": "vaos"
    }
  ],
  "groupedApps": []
}
JSON
  • src/applications/vaos/vaos-entry.jsx

  • src/applications/vaos/sass/vaos.scss

Only the vaos app is built, since all changed files are part of the app.

"allow": {
  "singleApps": [
    {
      "entryName": "vaos"
    }
  ],
  "groupedApps": []
}
JSON
  • src/applications/vaos/vaos-entry.jsx

  • src/applications/vaos/sass/vaos.scss

  • src/platform/utilities/feature-toggles/featureFlagNames.js

A full build is executed, because non-application code was changed.

"allow": {
  "singleApps": [],
  "groupedApps": [{"rootFolder": "edu-benefits"}]
}
JSON
  • src/applications/edu-benefits/0993/routes.jsx

All edu-benefits apps are built, since they are in a shared folder.

Testing

For single/grouped application builds, the Unit Tests job in the Continuous Integration workflow will only run unit tests belonging to the updated application(s). The Cypress E2E Tests jobs will only run Cypress tests for the changed application(s) as usual, in addition to the MegaMenu Cypress test, to ensure that the header is consistent across all applications.