Skip to main content
AL-Go for GitHub behavior is controlled by settings defined in various locations. This guide covers all available settings and where to configure them.

Settings Location Hierarchy

Settings are applied in order, with later settings overriding earlier ones:
1

Organizational settings

ALGoOrgSettings GitHub variable (organization level) - applies to all AL-Go repositories in the organization
2

Template repository settings

.github/AL-Go-TemplateRepoSettings.doNotEdit.json - settings from custom template repository
3

Repository settings

.github/AL-Go-settings.json - repository-wide settings for all projects
4

Repository variables

ALGoRepoSettings GitHub variable (repository level) - repository-wide settings
5

Template project settings

.github/AL-Go-TemplateProjectSettings.doNotEdit.json - project settings from template
6

Project settings

.AL-Go/settings.json - project-specific settings
  • Single project: .AL-Go/settings.json in repository root
  • Multiple projects: <project>/.AL-Go/settings.json in each project folder
7

Workflow-specific settings

  • All projects: .github/<workflow>.settings.json
  • Specific project: .AL-Go/<workflow>.settings.json
8

User-specific settings

.AL-Go/<username>.settings.json - rarely used, for local scripts
The repository settings file (.github/AL-Go-settings.json) can also contain BcContainerHelper settings, applied when loading BcContainerHelper in workflows.

Basic Project Settings

Core Configuration

{
  "country": "us",
  "repoVersion": "1.0",
  "projectName": "My AL Project",
  "appFolders": ["App", "BaseApp"],
  "testFolders": ["App.Test"],
  "bcptTestFolders": ["Performance.Test"]
}
SettingDescriptionDefault
countryCountry/localization for the appus
repoVersionProject version number (major.minor)1.0
projectNameFriendly name for the project in UI''
appFoldersArray of folders containing appsAuto-detected
testFoldersArray of folders containing test appsAuto-detected
bcptTestFoldersArray of folders containing performance test appsAuto-detected

Testing Configuration

{
  "pageScriptingTests": [
    "recordings/*.yml",
    "recordings/my*.yml",
    "recordings/test.yml"
  ],
  "doNotRunpageScriptingTests": false
}
SettingDescriptionDefault
pageScriptingTestsArray of page scripting test file specifications[]
doNotRunpageScriptingTestsSkip page scripting testsfalse
restoreDatabasesEvents that trigger database restore[]
bcptThresholdsPerformance test threshold configurationSee above

Dependencies

{
  "appDependencyProbingPaths": [
    {
      "repo": "owner/repository",
      "version": "latest",
      "release_status": "release",
      "projects": "*",
      "branch": "main",
      "AuthTokenSecret": "GhTokenWorkflow"
    }
  ]
}
SettingDescriptionDefault
appDependencyProbingPathsArray of dependency sources to download from[]
installAppsThird-party apps to install before compilation[]
installTestAppsThird-party test apps to install (parentheses = don’t run tests)[]
installOnlyReferencedAppsOnly install referenced apps from dependenciestrue
In installApps and installTestApps, use ${{SECRETNAME}} to insert secret values into URLs.

Preprocessor and Build Modes

{
  "preprocessorSymbols": ["CLEAN", "DEBUG"]
}

AppSource-Specific Settings

{
  "type": "AppSource App",
  "appSourceCopMandatoryAffixes": ["MyPrefix", "MyCompany"],
  "obsoleteTagMinAllowedMajorMinor": "1.0"
}
SettingDescriptionDefault
appSourceCopMandatoryAffixesRequired affixes for AppSource Cop[]
obsoleteTagMinAllowedMajorMinorMinimum allowed obsolete tag version (enables AS0105)-
deliverToAppSourceAppSource delivery configuration-
AppSource delivery requires an AppSourceContext secret. See Secrets documentation.

Repository Settings

These settings are only read from .github/AL-Go-Settings.json:
{
  "type": "PTE",
  "templateUrl": "https://github.com/microsoft/AL-Go-PTE"
}
SettingDescriptionDefault
typeRepository type: PTE or AppSource AppPTE
projectsList of project folders (auto-detected if not specified)-
templateUrlURL of template repository for updates-
runs-onGitHub runner for non-build jobswindows-latest
githubRunnerGitHub runner for build/test jobswindows-latest
shellDefault shell for all jobspowershell
githubRunnerShellShell for build jobsSame as shell

Environments and Deployment

{
  "environments": ["QA", "PROD"],
  "excludeEnvironments": ["github-pages"]
}

Workflow Triggers

{
  "CICDPushBranches": ["main", "release/*", "feature/*"],
  "CICDPullRequestBranches": ["main"]
}
SettingDescriptionDefault
CICDPushBranchesBranches that trigger CI/CD on push["main", "release/*", "feature/*"]
CICDPullRequestBranchesBranches that trigger PR builds["main"]
pullRequestTriggerPR trigger type: pull_request or pull_request_targetpull_request
Using pull_request_target exposes secrets to fork PRs. Understand the security implications before using.

Supported Release Branch Formats

AL-Go supports various release branch naming conventions:
  • releases/26 - matches major version 26
  • releases/26.x or releases/26x - matches major version 26
  • releases/v26 or releases/v26.x - matches major version 26
  • releases/26.3 - matches major.minor version 26.3
  • release/* - same patterns with singular prefix

Advanced Settings

Artifacts and Versioning

{
  "artifact": "",
  "updateDependencies": false,
  "generateDependencyArtifact": true
}
SettingDescriptionDefault
artifactBC artifacts search specificationLatest sandbox for country
updateDependenciesUpdate dependencies during buildfalse
generateDependencyArtifactGenerate dependency artifactsfalse
versioningStrategyVersion calculation method (0, 2, 3, 15, or +16 variants)0
Using updateDependencies: true can cause AppSource validation failures, as not all BC artifact versions are shipped in SaaS.

Versioning Strategies

StrategyBuild NumberRevision Number
0run_number + runNumberOffsetrun_attempt - 1
2Current date (yyyyMMdd)Current time (hhmmss)
3From app.jsonrun_number
15Maximum valuerun_number
+16Uses repoVersion instead of app.json major.minor-

Code Analysis

{
  "enableCodeCop": true,
  "enableUICop": true,
  "customCodeCops": [
    "https://example.com/customcop.dll"
  ],
  "enableCodeAnalyzersOnTestApps": false,
  "rulesetFile": "custom.ruleset.json",
  "enableExternalRulesets": false
}
SettingDescriptionDefault
enableCodeCopEnable CodeCop analyzerfalse
enableUICopEnable UICop analyzerfalse
customCodeCopsURLs/paths to custom analyzers[]
enableCodeAnalyzersOnTestAppsRun analyzers on test appsfalse
failOnFail on: none, error, warning, newWarningerror
trackALAlertsInGitHubUpload alerts to GitHub Securityfalse

Code Signing

{
  "trustedSigning": {
    "Account": "my-signing-account",
    "Endpoint": "https://weu.codesigning.azure.net",
    "CertificateProfile": "my-cert-profile"
  }
}
See Code Signing documentation for detailed setup instructions.

NuGet Feeds

{
  "trustMicrosoftNuGetFeeds": true,
  "nuGetFeedSelectMode": "LatestMatching",
  "trustedNuGetFeeds": [
    {
      "url": "https://nuget.pkg.github.com/myorg/index.json",
      "authTokenSecret": "NUGET_TOKEN",
      "patterns": ["MyCompany.*"],
      "fingerprints": ["ABCD1234..."]
    }
  ]
}
SettingDescriptionDefault
trustMicrosoftNuGetFeedsTrust Microsoft NuGet feedstrue
nuGetFeedSelectModePackage selection: Earliest, EarliestMatching, Exact, Latest, LatestMatchingLatestMatching
trustedNuGetFeedsArray of custom NuGet feed configurations[]

Performance and Caching

{
  "cacheImageName": "my",
  "cacheKeepDays": 3
}
When using incrementalBuilds, set workflowConcurrency to cancel in-progress builds on the same branch.

AL Compiler

{
  "vsixFile": "default",
  "useCompilerFolder": false
}
SettingDescriptionDefault
vsixFileAL Language version: default, latest, preview, or URLdefault
useCompilerFolderUse containerless compilationfalse
When using useCompilerFolder, you must use the new signing mechanism described in the Code Signing documentation.

Conditional Settings

Apply settings based on conditions:
{
  "ConditionalSettings": [
    {
      "branches": ["feature/*"],
      "settings": {
        "doNotPublishApps": true,
        "doNotSignApps": true
      }
    }
  ]
}
Conditions available:
  • repositories - Repository name patterns
  • projects - Project name patterns
  • buildModes - Build mode names
  • branches - Branch name patterns
  • workflows - Workflow name patterns (see name sanitization)
  • users - Username patterns
Multiple conditional settings blocks can match. All matching settings are applied in order.

Workflow Name Sanitization

Workflow names are sanitized before matching:
  • Leading spaces removed
  • Invalid filename characters removed (quotes, colons, slashes, etc.)
  • Example: " CI/CD" becomes "CICD"

Workflow-Specific Settings

Some settings are only allowed in workflow-specific files or conditional settings:
{
  "workflowSchedule": {
    "cron": "0 2 * * 1",
    "includeBranches": ["main", "release/*"]
  }
}
SettingDescription
workflowScheduleCRON schedule for workflow runs
workflowConcurrencyConcurrency control for workflows
workflowDefaultInputsDefault values for workflow inputs
Build your CRON expressions at crontab.guru. Run Update AL-Go System Files after changing schedules.

Secret Name Indirection

Many settings allow you to specify custom secret names:
{
  "licenseFileUrlSecretName": "MY_LICENSE",
  "ghTokenWorkflowSecretName": "MY_GH_TOKEN",
  "adminCenterApiCredentialsSecretName": "MY_ADMIN_CREDS",
  "applicationInsightsConnectionStringSecretName": "MY_APPINSIGHTS",
  "storageContextSecretName": "MY_STORAGE"
}
This pattern works for all secrets: <secretName>SecretName points to the actual secret name.

Next Steps

Secrets Reference

Learn about authentication and secret management

Workflows

Explore available workflows and their configuration

Scenarios

View common setup scenarios and use cases

Troubleshooting

Get help with common issues

Build docs developers (and LLMs) love