Deployer 1.16.0
Welcome to Deployer - created and maintained by Sascha Wildgrube.
Features
The Deployer app enables fully a automated CICD pipeline based on source control. It installs applications and dependent applications, runs Instance Scan checks, installation scripts and ATF tests automatically.
The Deployer app protects the Target Instance from unwanted or unexpected data deletion. For each Target Instance a data deletion policy must be specified.
- Deny: Data deletion is not allowed as part of a deployment. If applications are selected for deployment which do not (or no longer) contain tables or columns which exist on the Target Instance the deployment cannot proceed.
- Confirm: Data deletion is allowed but must be explicitly confirmed during the deployment.
- Warn: Data deletion is allowed. Users are only warned of data deletion on the Target Instance.
If set up on the development instance, the Deployer can help to protect version braches when they are baselined using DevTools's baseline procedure.
How the (automated) deployment works
The Deployer app is installed on both the Controller Instance and the Target Instance. The Controller Instance is used to coordinate deployments. The Target Instance is the instance to which applications are installed. The Deployer on the Controller Instance uses REST APIs exposed by the Target Instance. These REST API endpoints allow the Deployer to retrieve information about the Target Instance, trigger source control operations, run Instance Scan checks and execute ATF test suites.
Automated Deployment Procedure
- Determining the applications to be installed by creating a Repository Application Status. The availability of all application version branches is checked based on the dependency tree.
- Install applications and perform CodeSanity checks (Instance Scan) in reverse dependency order. The reverse dependency order is based on the application to be installed and all of its dependencies (and the dependencies of the dependencies). The deepest nodes of the dependency tree are installed first. The application to be installed comes last.
- Running installation scripts in reverse dependency order.
- Running all ATF tests in reverse dependency order.
Controller Instance Features
The "Controller Instance" is an instance that is used to run and operate the CICD pipeline - it acts as a control tower.
Repository Credentials need be configured so that the Deployer can access a public or internal source control system based on the repository url alone. Repository Credentials allow to map credential records with specific repository urls or just fractions of urls to cover multiple repositories.
The Repository App Status feature can be used to analyse a given repository and check its readyness for deployment. To access the repositories, the Repository Credentials must be configured.
The current state in an application's "dev" branch can also be assessed using the Repository Application Status feature to get a preview of the result for the application before actually baselining it.
Target Instances need be configured to enable deployments of applications to these instances. The exact steps performed during a deployment can be configured for each Target Instance - e.g., whether to execute the default ATF Test Suite of each installed application and whether CodeSanity checks should be performed during deployment. Each Target Instance can have a type of either DEV, TEST or PROD.
Pipelines can be configured to provide an overview on which applications are installed on which instance.
Deployments represent the specific deployment of an application (and its dependencies) in a given version to a specified Target Instance.
Supported automatic deployment tasks:
- Installing new versions of imported applications on Target Instances ("Switch Branch")
- Refresh the current version of an imported applications on Target Instances ("Apply Remote Changes")
- Running installation scripts on Target Instances
- Running CodeSanity checks on Target Instances (based on Instance Scan)
- Running the default ATF Test Suite of applications on target instances
During Deployments the list of available application versons in source control and the actual installed applications on the target instance are updated in the CMDB.
Supported manual deployment tasks:
- Confirm Data Deletion
- Importing new applications on target instances ("Import from Source Control")
- Pre-Deployment Activities
- Smoke Testing
- Post-Deployment Activities
Target Instance Features
The "Target Instance" is an instance to which applications are to be deployed.
The Deployer app exposes a REST API to check the status of the Target Instance and to asynchronously execute the installation scripts of an application and all of its dependencies in the correct order.
Development Instance Features
The "Development Instance" is an instance on which developers make changes to applications and from where new application versions are baselined.
The Deployer app "hooks" into DevTools's application baseline procedure (via Extension Point) and protects the newly created version branch.
Disclaimer
Deployer is NOT an officially supported ServiceNow product.
Deployer does NOT come with any kind of warranty. If you use it, you own it!
System Requirements
Installation on the Target Instances
- Create an account on GitHub - if not done already.
- Create a personal access token for your GitHub account.
- Add credentials to access GitHub - use "Basic Auth".
- Fork the repository https://github.com/saschawildgrube/servicenow-devtools.
- Go to Studio and import the DevTools application from source control.
- Perform all installation steps for the DevTools application documented here: https://www.wildgrube.com/servicenow-devtools/
- Fork the repository https://github.com/saschawildgrube/servicenow-deployer.
- Go to Studio and import the Deployer application from source control.
- Execute installation scripts.
Run the following script as a background script in scope x_snc_deployer: x_snc_devtools.InstallApp("x_snc_deployer");
- Elevate role to "security_admin".
- Create a technical user and assign the x_snc_deployer.api role to allow the Controller Instance to invoke REST API endpoints on the Target Instance.
Installation on the Controller Instance
- Fork the repository https://github.com/saschawildgrube/servicenow-devtools.
- Go to Studio and import the DevTools application from source control.
- Perform all installation steps for the DevTools application documented here: https://www.wildgrube.com/servicenow-devtools/
- Fork the repository https://github.com/saschawildgrube/servicenow-deployer.
- Go to Studio and import the Deployer application from source control.
- Execute installation scripts.
Run the following script as a background script in scope x_snc_deployer: x_snc_devtools.InstallApp("x_snc_deployer");
- Configure Repository Credentials to map credential records to one or more source control systems, groups or even individual repositories within these source control systems.
- Configure Target Instances to enable deployments of applications to these instances.
Installation on the Development Instance
- Fork the repository https://github.com/saschawildgrube/servicenow-devtools.
- Go to Studio and import the DevTools application from source control.
- Perform all installation steps for the DevTools application documented here: https://www.wildgrube.com/servicenow-devtools/
- Fork the repository https://github.com/saschawildgrube/servicenow-deployer.
- Go to Studio and import the Deployer application from source control.
- Execute installation scripts.
Run the following script as a background script in scope x_snc_deployer: x_snc_devtools.InstallApp("x_snc_deployer");
- Configure Repository Credentials to map credential records to one or more source control systems, groups or even individual repositories within these source control systems to enable branch protection during baselining.
Reference
Configuration Options
Roles
- x_snc_deployer.admin
A Deployer admin user has access to all configuration and process assets of the Deployer application.
The role contains the deployer manager role.
- x_snc_deployer.api
The api user is entitled to execute REST API calls against the REST APIs exposed by the Deployer app.
The admin and security_admin roles are required since the execution of ATF tests depends on the roles of the user triggering their execution.
- x_snc_deployer.developer
A developer can view all deployer related data and can create new Repsitory Application Status records.
- x_snc_deployer.manager
A Deployer manager user can trigger deployments and has read access to all configuration assets and the source control based dependency tree.
- x_snc_deployer.viewer
A Deployer viewer user has read access to the Deployer configuration assets and has read access to the source control-derived dependency tree of a given application.
REST APIs
The API provides endpoints to be used while installing applications.
- Get Status
Retrieve status information on all applications installed on the instance.
Method: GET
URI: /api/x_snc_deployer/target/get_status
- Run Installation Scripts
Executes the AppInstall() functions of the given app and its dependencies.
Method: GET
URI: /api/x_snc_deployer/target/run_install_scripts
Tables
UI Actions
Script Includes
- AppGetDependencies
Retrieves information about the app's dependencies to other apps and required versions.
- AppGetProperty
Gets a system property of this application.
- AppInstall
This script installs Deployer.
- AppSetDefaults
Sets all system properties to default values.
- AppSetProperty
Sets a system property of this application.
- CleanUpDependencyObject
Removes all fields from a dependency record object that are not required for preparing and executing deployments.
- CleanUpPackageObject
Removes all fields from a package record object that are not required for preparing and executing deployments.
- CleanUpSysDBObjectObject
Removes all fields from a syS_db_object record object that are not required for preparing and executing deployments.
- CleanUpSysDictionaryObject
Removes all fields from a sys_dictionary record object that are not required for preparing and executing deployments.
- Debug
Produces a log output in the application log using the DevTools Debug function.
- DeployerClientAPI
Provides functions to be called from UI scripts.
- DevTools
Implements the extension point for DevTools.
|
Methods:
* initialize()
* GetParentRecord()
* GetLinkDirectory()
* GetFormatConfig()
* GetApplicationStatus()
* RenderDebugDump()
* GetInstancePipelineName()
* AppVersionBaselineOnFinish()
- DevToolsGetApplicationStatus
The function DevToolsGetApplicationStatus is called by the DevTools extension point instance class and returns the application status object with additional status information to be displayed on the "DevTools Application Overview" page.
- DevToolsGetFormatConfig
The DevToolsGetFormatConfig function is called by the DevTools extension point instance class and returns an object with field formatting information.
- DevToolsGetInstancePipelineName
The function DevToolsGetInstancePipelineName is called by the DevTools extension point instance class and returns the pipeline name of an instance based on the given actual name.
- DevToolsGetLinkDirectory
The DevToolsGetLinkDirectory function is called by the DevTools extension point instance class and returns an extended (or modified) link directory object that serves as the basis for the DevTools Link page.
- DevToolsGetParentRecord
The DevToolsGetParentRecord function is called by the DevTools extension point instance class and returns a parent record for the given record if it can be determined.
- DevToolsRenderDebugDump
The function DevToolsRenderDebugDump is called by the DevTools extension point instance class and returns additional debug information provided by the application.
- GetApplicationListFromInstance
Returns the array of applications from an instance.
This is a deprecated proxy of the function TargetInstanceGetApplicationList().
- GetApplicationStatus
Retrieves an array of objects representing the applications available on the target instance.
- GetCredentialForRepository
Retrieves a credential record for the given repository based on the configured Repository Credential records. If no match is found or no valid repository url is provided, the function returns false.
- GetDeploymentTasks
Returns the status object including the required deployment tasks based on the given status and instance objects.
- GetLatestRepoDependencyList
Returns the latest available dependency list for the given repository and version or false if no status is available.
- GetLatestRepoDependencyStatus
Returns an object containing the latest available dependency list and tree for the given repository and version or false if no status is available.
- GetLatestRepoDependencyTree
Returns the latest available dependency tree for the given repository and version or false if no status is available.
- GetLinkDirectoryCICD
Returns a link directory with useful links regarding CICD topics in ServiceNow.
- GetPipelineStatus
Retrieves the status information for a given pipeline.
- GetRepoDependencyList
Returns an array of objects representing the packages representing the dependency list based on the given repository url and the desired version.
- GetRepoDependencyTree
Returns the dependency tree based on the given repository url and the desired version.
- GetRepositoryCredentialRecord
Retrieves the repository credential record for the given repository based on the given path or Sys Id. If no match is found or no valid repository url is provided, the function returns false.
- GetRepositoryType
Returns the type identifier for a given repository url. The function returns false of the type could not be determined.
- IdentifyDataDeletion
Identifies the tables (sys_db_object) and columns (sys_dictionary) which are going to be deleted based on the current list of applications on an instance and the to-be-installed list of applications.
- IsActive
Returns true if the application is active, otherwise false.
- IsBranchDeployable
Returns if the given branch name indicates whether the branch is deployable. The branch must either be named "master" or contain a semantic version.
- Log
Produces a log output in the application log.
- LogError
Produces an error log output in the application log.
- LogWarning
Produces a warning log output in the application log.
- SourceControlAPI
The class acts as an interface to source control repositories in GitHub or GitLab.
|
Methods:
* initialize()
* GetRequestCount()
* Error()
* ParseRepoUrl()
* GetBranchesFromRepo()
* GetFilesFromRepo()
* GetFileContent()
* GetPackageRecordFromRepo()
* GetDependencyRecordsFromRepo()
* GetSysDBObjectRecordsFromRepo()
* GetSysDictionaryRecordsFromRepo()
* ProtectBranchReadOnly()
- TargetInstanceATFTestSuiteRun
Runs the ATF test suite on the given target instance. Returns the progress id of the running suite if successful, or false in case of error.
- TargetInstanceCICDCheckProgress
Checks the progress of a running ATF test suite on the given target instance.
- TargetInstanceGetApplicationList
Returns the array of applications from the given target instance.
- TargetInstanceGetStatus
Returns the array of applications from the given target instance.
- TargetInstanceInstanceScanRunSuiteOnApp
Runs the ATF test suite on the given target instance. Returns the progress id of the running suite if successful, or false in case of error.
- TargetInstanceRequest
Requests the given end point of the Deployer Target API on the given target instance.
The credentials used for the request are taken from the credentials associated with the target instance.
- TargetInstanceRunInstallScripts
Runs install scripts on the given target instance for the given application.
- TargetInstanceSourceControlApplyChanges
Triggers the action "Apply Remote Changes" for the given application for the current branch on the target instance.
- TargetInstanceSourceControlImport
Imports an application from source control on the target instance.
- TargetInstanceUpdateLocalCmdb
Updates the local CMDB based on data gathered from the target instance.
- TargetInstanceValidate
Returns true if the given instance is correctly configured and accessible.
- TriggerNewRepositoyApplicationStatus
Triggers the background process to create a new repository application status based on a given repository url and version.
- ValidateInstance
Deprecated proxy for the new TargetInstanceValidate() function for backward compatibility.
Dependencies
Technical Debts
License
Copyright 2023-2024 by Sascha Wildgrube
Licensed under the Apache License, Version 2.0 (the "License")
You may not use Deployer except in compliance with the License.
You may obtain a copy of the License at: https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Release Notes
1.16.0 - 2024-11-25
- The local CMDB is now updated immediately after an application has been installed during a deployment.
- When identifying the version to be deployed Deployer will now prefer the oldest compatible version available in a repsitory.
- Added function SortBranches().
- Reduced flakyness of test "Deployer - GetLatestRepoDependencyTree".
1.15.0 - 2024-10-22
- DevTools 1.103.0 is required for branch protection support.
- Deployer now protects new version branches during application version baselining.
1.14.0 - 2024-10-17
- Vancouver is no longer actively supported.
- Deployer is fully tested with Xanadu.
- A MID Server can now be used to connect to a target instance.
- Failing requests sent to a target instance are now logged as errors.
- Added menu item "Technical Users".
- When preparing a deployment GetDeploymentTask() erroneously created manual import tasks for non-Custom Application dependencies (e.g. Store Apps). This has been fixed.
- When a task is cancelled in-flight, the remote operation will still finish but the execution of the next pending task is now suppressed.
1.13.0 - 2024-08-26
- DevTools 1.99.0 is required due to MID Server support in GitHubAPI, GitLabAPI and HttpRequest().
- Deployer is now fully tested with Xanadu.
- A MID Server can now be specified for a Repository Credential.
- Added function GetRepositoryCredentialRecord().
- Repository Credentials now have a proper display value.
- Improved ATF test "Deployer - Deployer Target API - Run Install Scripts".
- Changed term "CICD Instance" to "Controller Instance".
1.12.1 - 2024-07-05
- Packages other than Custom Applications (sys_app) were erroneously treated as apps that can be installed from a source control repository when preparing a deployment. This has been fixed. Such packages are now ignored when creating the tasks.
- In the Repository Application Status view, an error message was shown if at least one package is contained that is out of scope. This has been fixed.
1.12.0 - 2024-07-05
- DevTools 1.94.0 is required due to the new functions to update the CMDB.
- Deployer 1.12.0 requires the same version or higher on the Target Instance due to the change in the x_snc_deployer.api role and the new capabilities of the "Get Status" REST API endpoint.
- The local CMDB is updated to reflect the installed applications on the Target Instance after a deployment.
- The local CMDB is updated to reflect the availability of installable applications after creating a Repository Application Status.
- Added the UI Action "Update Local CMDB" on the Target Instance form.
- The x_snc_deployer.api role now also contains the security_admin role - The admin and security_admin roles are required since the execution of ATF tests depends on the roles of the user triggering their execution.
- The "Get Status" REST API endpoint now also provides the list of dependencies and the current branch for each application.
- Under some circumstances in the Repository Application Status Dependency List view the error banner was not displayed. This has been fixed.
- If an instance url is specified without trailing slash, the Studio url in the manual task for importing a new application from source control was incorrect. This has been fixed.
- Repository App Status lists are now sorted by "Updated On" by default.
1.11.0 - 2024-06-06
- Utah is no longer actively supported.
- Deployer has been fully tested with Vancouver and Washington.
- DevTools 1.86.0 is now required because GitLabAPI and GitHubAPI can now handle repositories with more than 100 branches.
- A Repository Application Status can now be generated for all branches starting by "dev".
- Renamed UI Action "Refresh" to "Get New Status For Same Version".
- The UI Action "Get New Status For Same Version" is no longer visible when the Repository Application Status is not yet finished.
- Renamed UI Action "New Version" to "Get Status For New Version".
- The UI Action "Get Status For New Version" now proposes the next minor version based on the previous version.
- When generating a Repository Application Status dependencies to plugins and store apps are now correctly identified as out-of-scope and displayed as such.
- When generating a Repository Application Status a more precise error is reported if no corresponding repository credential could be identified.
- When generating a Repository Application Status a dependency without a repository url is now correctly identified as an error and the status is not ready for deployment.
- Added warning about cascade deletes in case a table is about to be deleted during deployment.
- Added detailed instructions and a url to start with for the manual task of importing an application from source control for the first time.
- When updating a repository credential record, GitLab repository credentials are deactivated if no API Url has been specified.
- Refactoring in ExecuteDeploymentTask() to use more DevTools functions.
1.10.0 - 2024-02-29
- DevTools 1.82.0 is now required.
- Deployer 1.10.0 requires the same version or higher on the target instance due to updated identification of data deletion.
- The detection of data deletion now considers "cloned" dictionary records on TPP tables (like tables derived from cmdb_ci).
- The Deployment form no longer reloads if the "Close Notes" have been edited.
- The Deployment Task form now reloads when the status changes to update the UI Action buttons.
- The Deployer - Repository Viewer page was not displayed properly when using Polaris dark theme. This has been fixed.
- The display value of a "Repository Application Status" now indicates that the date/time is in UTC.
- Modified ATF test for GetLatestRepoDependencyList() to avoid test flakyness.
1.9.1 - 2024-02-15
- Fixed a bug related to generating the result urls in deployment tasks to navigate to test and scan results on the target instance.
- In the Pipeline status view page, "null" was displayed if a platform app scope is configured for a target instance, but the app is not installed on the target instance. This has been fixed.
1.9.0 - 2024-02-14
- A data deletion policy can be specified for each target instance and is enforced upon deployment.
- Introducing the concept of Pipelines.
- Deployer 1.9.0 requires the same version or higher on the target instance due to the newly introduced identification of data deletion.
- DevTools 1.81.0 is now required because of GetAppDefaultTestSuite().
- A repository application status can now be established for the current state in a dev branch.
- Deployment Tasks to run CodeSanity checks and ATF test suites now contain a link to the results on the target instance.
- The checkbox "Enforce Downgrade" on the Deployment form was not read-only by default. This has been fixed.
- The "Prepare" button is now hidden if no instance has been selected yet for a deployment.
- The "Run Installation Scripts" REST API endpoint no longer requires the "async" parameter - to ensure full backward compatibility.
- The Deployment and the Repository Application Status forms now reload when there is a status change.
- The actual start and end date and time is recorded for every deployment.
- The "Show Task List" UI Action on the Deployment form is now only visible in draft state.
- Deployments can now be cancelled while in ready state.
1.8.0 - 2024-01-16
- Deployer is fully tested in Vancouver.
- Tokyo is no longer actively supported.
- DevTools 1.79.0 is now required because of StringStripTrailingSlash() and DevToolsWorkerAPI::InstallApp().
- Deployer 1.8.0 now requires the same version or higher on the target instance due to the asynchronous execution of installation scripts.
- Deployer can now properly handle a repository url path with a trailing slash.
- The "Prepare" UI Action is no longer available for new deployments. Some options are instance specific and can only be selected once the deployment has been saved with a selected target instance.
- Added table x_snc_deployer_deployment_task to the link directory.
- When deleting a Deployment, associated Deployment Tasks are now deleted, too.
- Improved feature description and installation instructions in the manual.
1.7.0 - 2023-11-17
- Added more supported automatic deployment tasks: Installing applications from source control via switch branch/apply remote changes.
- Now supporting instance specific manual pre and post deployment activities.
1.6.0 - 2023-11-10
- Deployer now requires Deployer 1.6.0 or higher on the target instance because the technical user requires additional roles and the "Get Status" endpoint delivers additional information about the applications - including the Sys ID of the default ATF Test Suite.
- Deployer now requires DevTools 1.75.1 because HttpRequest() now handles exceptions thrown by RESTMessageV2::execute(). This allows for proper error handling when communicating with the target instance.
- Introducing deployment tasks which represent the individual steps of a deployment - supporting both manual and automated activities.
- Supported automatic deployment tasks: Running installation scripts, running CodeSanity checks, and executing the default ATF Test Suite.
- A (manual) smoke test procedure can be specified per instance.
- Introduced the x_snc_deployer.developer role to allow developers to create a new Repository Application Status to check if their baselined applications are ready for deployment.
- The user can specify if the deployment should be automated (where possible) or be conducted manually.
- A deployment cannot start while another deployment on the same target instance is in progress.
- Added related list of deployments to "Repo App Status" and "Target Instance" forms.
- Added UI action "Create Deployment" both on the "Repository Application Status" and the "Target Instance" forms.
- The x_snc_deployer.api role now contains the sn_cicd.sys_ci_automation role which is required to operate the sn_cicd API endpoints.
- The x_snc_deployer.api role now contains the admin role which - due to a platform deficiency - is required to run ATF tests remotely.
1.5.0 - 2023-10-30
- DevTools 1.74.0 is now required due to a bugfix in GetDependencyListFromTree().
- Added state model to deployments to represents the status properly.
- Added UI action "New Version" to create a new Repo App Status for a new version.
- Users with the x_snc_deployer.viewer role now have read access to the basic_auth_credentials table.
- Users with the x_snc_deployer.manager role now also inherit the credential_admin role and hence have write access to the discovery_credentials table.
- Users with the x_snc_deployer.manager role can now edit all fields on the deployment record.
- The related link "Show task List" now only shows after the deployment has been created.
- If logging.verbosity is set to "debug" HtmlRenderRepoDependencies() displays the raw data of the repository status.
- Improved status display in HtmlRenderRepoDependencies().
- Added "Credentials" menu item.
- The system property "x_snc_deployer.required_target_version" now defines the minimum version of the Deployer app that must be installed on the target instance.
- Menu items "Log" and "Test Suite" are only visible for x_snc_deployer.admin users.
1.4.0 - 2023-09-22
- A deployment can now be configured to either enforce downgrades - to exactly match the versions contained in the repositories - or to leave more current versions on the target instance.
- A deployment can now be configured to refresh application versions that are already installed on the target instance (or not).
- A deployment can now be configured to skip the execution of CodeSanity checks on the target instance.
- A deployment can now be configured to skip the execution of the default ATF Test Suites of applications on the target instance.
- Deployer Target API / Get Status now also returns the application status.
- Added function GetApplicationListFromInstance() to retrieve an array of applications and customization applications from a target instance.
1.3.0 - 2023-09-18
- Introduced the "Deployment" table to keep track of deployments.
- Added the "Show Task List" UI action to show a wiki-formatted task list for the deployment.
- Introduced the "Instance" table to keep configuration and credential references for target instances.
- The "Validate" UI action can be used to verify if an instance is properly configured and if the credentials enable the execution of API calls on the instance.
- Added function GetDeploymentTasks() to determine the required deployment tasks based on a given application deployment status and a target instance.
- GetLatestRepoDependencyTree() now contains the field "repository_application_status" which contains the Sys ID of the status record from where the information was gathered.
1.2.0 - 2023-07-31
- Added function GetLatestRepoDependencyStatus().
- Added function CleanUpPackageObject() to avoid not necessary fields in the objects returned by functions determining the application repository status.
- Avoiding flakyness for ATF tests for GetLatestRepoDependencyList() and GetLatestRepoDependencyTree().
- Improved feature and installation documentation in manual.
1.1.0 - 2023-07-25
- Deployer is now fully tested in Utah.
- San Diego is no longer actively supported.
- DevTools 1.65.0 is now required because of the contained GitLabAPI and GitHubAPI classes and the new GetDependencyListFromTree() function.
- Deployer now supports the analysis of the deployment readyness of an application version stored in a source code repository.
- The exposed functions allow pipeline automation apps to use the repository application status information as input.
- Added x_snc_deployer.viewer, x_snc_deployer.manager and x_snc_deployer.admin roles.
- The Deployer menu is now accessible to users with the x_snc_deployer.viewer role.
- Removed the menu item "Repository Viewer (ad-hoc)".
- Added function GetCredentialForRepository().
- Added function GetRepositoryType().
- Added function SourceControlAPI::GetRequestCount().
- Added function IsBranchDeployable().
- Added function GetLatestRepoDependencyTree().
- Added function GetLatestRepoDependencyList().
1.0.0 - 2023-02-24
First baselined version