Merge pull request #26038 from backstage/nbs10/delete-backend-tasks-package

[NBS1.0] Mark `backend-tasks` as deprecated
This commit is contained in:
Camila Belo
2024-08-19 16:31:58 +02:00
committed by GitHub
146 changed files with 605 additions and 509 deletions
+30
View File
@@ -0,0 +1,30 @@
---
'@backstage/frontend-app-api': minor
'@backstage/backend-app-api': minor
'@backstage/backend-dynamic-feature-service': minor
'@backstage/plugin-catalog-backend-module-aws': minor
'@backstage/plugin-catalog-backend-module-azure': minor
'@backstage/plugin-catalog-backend-module-backstage-openapi': minor
'@backstage/plugin-catalog-backend-module-bitbucket-cloud': minor
'@backstage/plugin-catalog-backend-module-bitbucket-server': minor
'@backstage/plugin-catalog-backend-module-gcp': minor
'@backstage/plugin-catalog-backend-module-gerrit': minor
'@backstage/plugin-catalog-backend-module-github-org': minor
'@backstage/plugin-catalog-backend-module-github': minor
'@backstage/plugin-catalog-backend-module-gitlab-org': minor
'@backstage/plugin-catalog-backend-module-gitlab': minor
'@backstage/plugin-catalog-backend-module-incremental-ingestion': minor
'@backstage/plugin-catalog-backend-module-ldap': minor
'@backstage/plugin-catalog-backend-module-msgraph': minor
'@backstage/plugin-catalog-backend-module-puppetdb': minor
'@backstage/plugin-catalog-backend': minor
'@backstage/plugin-events-backend-module-aws-sqs': minor
'@backstage/plugin-scaffolder-backend': minor
'@backstage/plugin-search-backend-module-catalog': minor
'@backstage/plugin-search-backend-module-explore': minor
'@backstage/plugin-search-backend-module-stack-overflow-collator': minor
'@backstage/plugin-search-backend-module-techdocs': minor
'@backstage/plugin-search-backend-node': minor
---
Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+16
View File
@@ -0,0 +1,16 @@
---
'@backstage/backend-tasks': minor
---
This package is deprecated and will be removed in a near future, follow the instructions below to stop using it:
- `TaskScheduler`: Please migrate to the new backend system, and depend on `coreServices.scheduler` from `@backstage/backend-plugin-api` instead, or use `DefaultSchedulerService` from `@backstage/backend-defaults;
- `TaskRunner`: Please import `SchedulerServiceTaskRunner` from `@backstage/backend-plugin-api` instead;
- `TaskFunction`: Please import `SchedulerServiceTaskFunction` from `@backstage/backend-plugin-api` instead;
- `TaskDescriptor`: Please import `SchedulerServiceTaskDescriptor` from `@backstage/backend-plugin-api` instead;
- `TaskInvocationDefinition`: Please import `SchedulerServiceTaskInvocationDefinition` from `@backstage/backend-plugin-api` instead;
- `TaskScheduleDefinition`: Please import `SchedulerServiceTaskFunction` from `@backstage/backend-plugin-api` instead;
- `TaskScheduleDefinitionConfig`: Please import `SchedulerServiceTaskScheduleDefinitionConfig` from `@backstage/backend-plugin-api` instead;
- `PluginTaskScheduler`: Please use `SchedulerService` from `@backstage/backend-plugin-api` instead (most likely via `coreServices.scheduler`);
- `readTaskScheduleDefinitionFromConfig`: Please import `readSchedulerServiceTaskScheduleDefinitionFromConfig` from `@backstage/backend-plugin-api` instead;
- `HumanDuration`: Import `TypesHumanDuration` from `@backstage/types` instead.
@@ -78,7 +78,7 @@ Another pattern that can be used is a type of singleton pattern where the extens
```ts
interface ScaffolderTaskRunnerExtensionPoint {
setTaskRunner(taskRunner: TaskRunner): void;
setTaskRunner(taskRunner: SchedulerServiceTaskRunner): void;
}
```
+2 -2
View File
@@ -41,7 +41,7 @@ The default schedule for the Catalog Collator is to run every 10 minutes, you ca
search:
collators:
catalog:
schedule: # same options as in TaskScheduleDefinition
schedule: # same options as in SchedulerServiceTaskScheduleDefinition
# supports cron, ISO duration, "human duration" as used in code
initialDelay: { seconds: 90 }
# supports cron, ISO duration, "human duration" as used in code
@@ -85,7 +85,7 @@ The default schedule for the TechDocs Collator is to run every 10 minutes, you c
search:
collators:
techdocs:
schedule: # same options as in TaskScheduleDefinition
schedule: # same options as in SchedulerServiceTaskScheduleDefinition
# supports cron, ISO duration, "human duration" as used in code
initialDelay: { seconds: 90 }
# supports cron, ISO duration, "human duration" as used in code
+1 -1
View File
@@ -86,7 +86,7 @@ Search chooses to completely rebuild indices on a schedule. Different collators
can be configured to refresh at different intervals, depending on how often the
source information is updated. When search indexing is distributed among multiple
backend nodes, coordination to prevent clashes is typically handled by a
distributed `TaskRunner`.
distributed `SchedulerServiceTaskRunner`.
### The Search Page
+8 -5
View File
@@ -283,7 +283,7 @@ Backstage Search builds and maintains its index
[on a schedule](./concepts.md#the-scheduler). You can change how often the
indexes are rebuilt for a given type of document. You may want to do this if
your documents are updated more or less frequently. You can do so by configuring
a scheduled `TaskRunner` to pass into the `schedule` value, like this:
a scheduled `SchedulerServiceTaskRunner` to pass into the `schedule` value, like this:
```typescript {3}
const every10MinutesSchedule = env.scheduler.createScheduledTaskRunner({
@@ -302,16 +302,19 @@ indexBuilder.addCollator({
```
Note: if you are using the in-memory Lunr search engine, you probably want to
implement a non-distributed `TaskRunner` like the following to ensure consistency
implement a non-distributed `SchedulerServiceTaskRunner` like the following to ensure consistency
if you're running multiple search backend nodes (alternatively, you can configure
the search plugin to use a non-distributed database such as
[SQLite](../../tutorials/configuring-plugin-databases.md#postgresql-and-sqlite-3)):
```typescript
import { TaskInvocationDefinition, TaskRunner } from '@backstage/backend-tasks';
import {
SchedulerServiceTaskRunner,
SchedulerServiceTaskInvocationDefinition,
} from '@backstage/backend-plugin-api';
const schedule: TaskRunner = {
run: async (task: TaskInvocationDefinition) => {
const schedule: SchedulerServiceTaskRunner = {
run: async (task: SchedulerServiceTaskInvocationDefinition) => {
const startRefresh = async () => {
while (!task.signal?.aborted) {
try {
+2 -2
View File
@@ -36,7 +36,7 @@ catalog:
bucketName: sample-bucket
prefix: prefix/ # optional
region: us-east-2 # optional, uses the default region otherwise
schedule: # same options as in TaskScheduleDefinition
schedule: # same options as in SchedulerServiceTaskScheduleDefinition
# supports cron, ISO duration, "human duration" as used in code
frequency: { minutes: 30 }
# supports ISO duration, "human duration" as used in code
@@ -56,7 +56,7 @@ catalog:
bucketName: sample-bucket
prefix: prefix/ # optional
region: us-east-2 # optional, uses the default region otherwise
schedule: # same options as in TaskScheduleDefinition
schedule: # same options as in SchedulerServiceTaskScheduleDefinition
# supports cron, ISO duration, "human duration" as used in code
frequency: { minutes: 30 }
# supports ISO duration, "human duration" as used in code
+2 -2
View File
@@ -36,7 +36,7 @@ catalog:
bucketName: sample-bucket
prefix: prefix/ # optional
region: us-east-2 # optional, uses the default region otherwise
schedule: # same options as in TaskScheduleDefinition
schedule: # same options as in SchedulerServiceTaskScheduleDefinition
# supports cron, ISO duration, "human duration" as used in code
frequency: { minutes: 30 }
# supports ISO duration, "human duration" as used in code
@@ -56,7 +56,7 @@ catalog:
bucketName: sample-bucket
prefix: prefix/ # optional
region: us-east-2 # optional, uses the default region otherwise
schedule: # same options as in TaskScheduleDefinition
schedule: # same options as in SchedulerServiceTaskScheduleDefinition
# supports cron, ISO duration, "human duration" as used in code
frequency: { minutes: 30 }
# supports ISO duration, "human duration" as used in code
+1 -1
View File
@@ -45,7 +45,7 @@ catalog:
project: myproject
repository: service-* # this will match all repos starting with service-*
path: /catalog-info.yaml
schedule: # optional; same options as in TaskScheduleDefinition
schedule: # optional; same options as in SchedulerServiceTaskScheduleDefinition
# supports cron, ISO duration, "human duration" as used in code
frequency: { minutes: 30 }
# supports ISO duration, "human duration" as used in code
+1 -1
View File
@@ -45,7 +45,7 @@ catalog:
project: myproject
repository: service-* # this will match all repos starting with service-*
path: /catalog-info.yaml
schedule: # optional; same options as in TaskScheduleDefinition
schedule: # optional; same options as in SchedulerServiceTaskScheduleDefinition
# supports cron, ISO duration, "human duration" as used in code
frequency: { minutes: 30 }
# supports ISO duration, "human duration" as used in code
@@ -146,7 +146,7 @@ catalog:
filters: # optional
projectKey: '^apis-.*$' # optional; RegExp
repoSlug: '^service-.*$' # optional; RegExp
schedule: # same options as in TaskScheduleDefinition
schedule: # same options as in SchedulerServiceTaskScheduleDefinition
# supports cron, ISO duration, "human duration" as used in code
frequency: { minutes: 30 }
# supports ISO duration, "human duration" as used in code
@@ -63,7 +63,7 @@ catalog:
projectKey: '^apis-.*$' # optional; RegExp
repoSlug: '^service-.*$' # optional; RegExp
skipArchivedRepos: true # optional; boolean
schedule: # same options as in TaskScheduleDefinition
schedule: # same options as in SchedulerServiceTaskScheduleDefinition
# supports cron, ISO duration, "human duration" as used in code
frequency: { minutes: 30 }
# supports ISO duration, "human duration" as used in code
+2 -2
View File
@@ -133,7 +133,7 @@ catalog:
filters:
branch: 'main' # string
repository: '.*' # Regex
schedule: # same options as in TaskScheduleDefinition
schedule: # same options as in SchedulerServiceTaskScheduleDefinition
# supports cron, ISO duration, "human duration" as used in code
frequency: { minutes: 30 }
# supports ISO duration, "human duration" as used in code
@@ -249,7 +249,7 @@ schedule:
timeout: { minutes: 3 }
```
More information about scheduling can be found on the [TaskScheduleDefinition](https://backstage.io/docs/reference/backend-tasks.taskscheduledefinition) page.
More information about scheduling can be found on the [SchedulerServiceTaskScheduleDefinition](https://backstage.io/docs/reference/backend-plugin-api.schedulerservicetaskscheduledefinition) page.
Alternatively, or additionally, you can configure [github-apps](github-apps.md) authentication
which carries a much higher rate limit at GitHub.
+2 -2
View File
@@ -83,7 +83,7 @@ catalog:
filters:
branch: 'main' # string
repository: '.*' # Regex
schedule: # same options as in TaskScheduleDefinition
schedule: # same options as in SchedulerServiceTaskScheduleDefinition
# supports cron, ISO duration, "human duration" as used in code
frequency: { minutes: 30 }
# supports ISO duration, "human duration" as used in code
@@ -203,7 +203,7 @@ schedule:
timeout: { minutes: 3 }
```
More information about scheduling can be found on the [TaskScheduleDefinition](https://backstage.io/docs/reference/backend-tasks.taskscheduledefinition) page.
More information about scheduling can be found on the [SchedulerServiceTaskScheduleDefinition](https://backstage.io/docs/reference/backend-plugin-api.schedulerservicetaskscheduledefinition) page.
Alternatively, or additionally, you can configure [github-apps](github-apps.md) authentication
which carries a much higher rate limit at GitHub.
+1 -1
View File
@@ -94,7 +94,7 @@ Directly under the `githubOrg` is a list of configurations, each entry is a stru
- `id`: A stable id for this provider. Entities from this provider will be associated with this ID, so you should take care not to change it over time since that may lead to orphaned entities and/or conflicts.
- `githubUrl`: The target that this provider should consume
- `orgs` (optional): The list of the GitHub orgs to consume. If you only list a single org the generated group entities will use the `default` namespace, otherwise they will use the org name as the namespace. By default the provider will consume all accessible orgs on the given GitHub instance (support for GitHub App integration only).
- `schedule`: The refresh schedule to use, matches the structure of [`TaskScheduleDefinitionConfig`](https://backstage.io/docs/reference/backend-tasks.taskscheduledefinitionconfig/)
- `schedule`: The refresh schedule to use, matches the structure of [`SchedulerServiceTaskScheduleDefinitionConfig`](https://backstage.io/docs/reference/backend-plugin-api.schedulerservicetaskscheduledefinitionconfig/)
### Events Support
+1 -1
View File
@@ -154,7 +154,7 @@ catalog:
entityFilename: catalog-info.yaml # Optional. Defaults to `catalog-info.yaml`
projectPattern: '[\s\S]*' # Optional. Filters found projects based on provided patter. Defaults to `[\s\S]*`, which means to not filter anything
excludeRepos: [] # Optional. A list of project paths that should be excluded from discovery, e.g. group/subgroup/repo. Should not start or end with a slash.
schedule: # Same options as in TaskScheduleDefinition. Optional for the Legacy Backend System
schedule: # Same options as in SchedulerServiceTaskScheduleDefinition. Optional for the Legacy Backend System
# supports cron, ISO duration, "human duration" as used in code
frequency: { minutes: 30 }
# supports ISO duration, "human duration" as used in code
+1 -1
View File
@@ -173,7 +173,7 @@ catalog:
group: org/teams # Required for gitlab.com when `orgEnabled: true`. Optional for self managed. Must not end with slash. Accepts only groups under the provided path (which will be stripped)
allowInherited: true # Allow groups to be ingested even if there are no direct members.
groupPattern: '[\s\S]*' # Optional. Filters found groups based on provided pattern. Defaults to `[\s\S]*`, which means to not filter anything
schedule: # Same options as in TaskScheduleDefinition. Optional for the Legacy Backend System.
schedule: # Same options as in SchedulerServiceTaskScheduleDefinition. Optional for the Legacy Backend System.
# supports cron, ISO duration, "human duration" as used in code
frequency: { minutes: 30 }
# supports ISO duration, "human duration" as used in code
+1 -1
View File
@@ -41,7 +41,7 @@ The built-in protection against unauthorized access does not by default include
## Common Backend Configuration
There are many common facilities that are configured centrally and available to all Backstage backend plugins. For example there is a `DatabaseManager` that provides access to a SQL database, `TaskScheduler` for scheduling long-running tasks, `Logger` as a general logging facility, and `UrlReader` for reading content from external sources. These are all configured either directly in code, or within the `backend` block of the static configuration. The appropriate care needs to be taken to ensure that any secrets remain confidential and no malicious configuration is injected.
There are many common facilities that are configured centrally and available to all Backstage backend plugins. For example there is a `DatabaseManager` that provides access to a SQL database, `SchedulerService` for scheduling long-running tasks, `Logger` as a general logging facility, and `UrlReader` for reading content from external sources. These are all configured either directly in code, or within the `backend` block of the static configuration. The appropriate care needs to be taken to ensure that any secrets remain confidential and no malicious configuration is injected.
In a typical Backstage setup, there is no boundary between plugins that run on the same host. Likewise, there is no boundary between plugins that share the same database access. Any plugin that is running on a host that has access to the logical database of any other plugin should be considered to have full access to that other plugin. For example, even if you deploy the `auth` and `catalog` plugins on separate hosts with separate configuration and credentials, the `catalog` plugin is still considered to have full access to the `auth` plugin as long as the `catalog` plugin has access to the `auth` plugin's logical database. The only way to create a boundary between the two plugins is to deploy them in such a way that they do not have access to each others database. This applies to the database facility as well as any other shared resources, such as the cache.
-1
View File
@@ -52,7 +52,6 @@
"dependencies": {
"@backstage/backend-common": "workspace:^",
"@backstage/backend-plugin-api": "workspace:^",
"@backstage/backend-tasks": "workspace:^",
"@backstage/cli-common": "workspace:^",
"@backstage/cli-node": "workspace:^",
"@backstage/config": "workspace:^",
@@ -25,12 +25,12 @@ import { PermissionPolicy } from '@backstage/plugin-permission-node';
import { PluginCacheManager } from '@backstage/backend-common';
import { PluginDatabaseManager } from '@backstage/backend-common';
import { PluginEndpointDiscovery } from '@backstage/backend-common';
import { PluginTaskScheduler } from '@backstage/backend-tasks';
import { RootLoggerService } from '@backstage/backend-plugin-api';
import { Router } from 'express';
import { SchedulerService } from '@backstage/backend-plugin-api';
import { SchedulerServiceTaskRunner } from '@backstage/backend-plugin-api';
import { ServiceFactoryCompat } from '@backstage/backend-plugin-api';
import { ServiceRef } from '@backstage/backend-plugin-api';
import { TaskRunner } from '@backstage/backend-tasks';
import { TemplateAction } from '@backstage/plugin-scaffolder-node';
import { TokenManager } from '@backstage/backend-common';
import { UrlReaderService } from '@backstage/backend-plugin-api';
@@ -210,7 +210,7 @@ export interface LegacyBackendPluginInstaller {
// (undocumented)
search?(
indexBuilder: IndexBuilder,
schedule: TaskRunner,
schedule: SchedulerServiceTaskRunner,
env: LegacyPluginEnvironment,
): void;
}
@@ -225,7 +225,7 @@ export type LegacyPluginEnvironment = {
discovery: PluginEndpointDiscovery;
tokenManager: TokenManager;
permissions: PermissionEvaluator;
scheduler: PluginTaskScheduler;
scheduler: SchedulerService;
identity: IdentityApi;
eventBroker: EventBroker;
events: EventsService;
@@ -49,7 +49,6 @@
"@backstage/backend-common": "workspace:^",
"@backstage/backend-defaults": "workspace:^",
"@backstage/backend-plugin-api": "workspace:^",
"@backstage/backend-tasks": "workspace:^",
"@backstage/cli-common": "workspace:^",
"@backstage/cli-node": "workspace:^",
"@backstage/config": "workspace:^",
@@ -23,7 +23,6 @@ import {
TokenManager,
} from '@backstage/backend-common';
import { Router } from 'express';
import { PluginTaskScheduler, TaskRunner } from '@backstage/backend-tasks';
import { IdentityApi } from '@backstage/plugin-auth-node';
import { PermissionEvaluator } from '@backstage/plugin-permission-common';
import {
@@ -35,6 +34,8 @@ import {
import {
BackendFeature,
UrlReaderService,
SchedulerService,
SchedulerServiceTaskRunner,
} from '@backstage/backend-plugin-api';
import { PackagePlatform, PackageRole } from '@backstage/cli-node';
import { CatalogBuilder } from '@backstage/plugin-catalog-backend';
@@ -64,7 +65,7 @@ export type LegacyPluginEnvironment = {
discovery: PluginEndpointDiscovery;
tokenManager: TokenManager;
permissions: PermissionEvaluator;
scheduler: PluginTaskScheduler;
scheduler: SchedulerService;
identity: IdentityApi;
eventBroker: EventBroker;
events: EventsService;
@@ -163,7 +164,7 @@ export interface LegacyBackendPluginInstaller {
scaffolder?(env: LegacyPluginEnvironment): TemplateAction<any>[];
search?(
indexBuilder: IndexBuilder,
schedule: TaskRunner,
schedule: SchedulerServiceTaskRunner,
env: LegacyPluginEnvironment,
): void;
events?(
-1
View File
@@ -31,7 +31,6 @@
"@backstage/backend-common": "workspace:^",
"@backstage/backend-defaults": "workspace:^",
"@backstage/backend-plugin-api": "workspace:^",
"@backstage/backend-tasks": "workspace:^",
"@backstage/catalog-client": "workspace:^",
"@backstage/catalog-model": "workspace:^",
"@backstage/config": "workspace:^",
+5 -3
View File
@@ -34,7 +34,6 @@ import {
ServerTokenManager,
useHotMemoize,
} from '@backstage/backend-common';
import { TaskScheduler } from '@backstage/backend-tasks';
import { Config } from '@backstage/config';
import healthcheck from './plugins/healthcheck';
import { metricsHandler, metricsInit } from './metrics';
@@ -57,6 +56,7 @@ import { DefaultEventBroker } from '@backstage/plugin-events-backend';
import { DefaultEventsService } from '@backstage/plugin-events-node';
import { DefaultSignalsService } from '@backstage/plugin-signals-node';
import { UrlReaders } from '@backstage/backend-defaults/urlReader';
import { DefaultSchedulerService } from '@backstage/backend-defaults/scheduler';
function makeCreateEnv(config: Config) {
const root = getRootLogger();
@@ -69,7 +69,6 @@ function makeCreateEnv(config: Config) {
});
const databaseManager = DatabaseManager.fromConfig(config, { logger: root });
const cacheManager = CacheManager.fromConfig(config);
const taskScheduler = TaskScheduler.fromConfig(config, { databaseManager });
const identity = DefaultIdentityClient.create({
discovery,
});
@@ -89,7 +88,10 @@ function makeCreateEnv(config: Config) {
const logger = root.child({ type: 'plugin', plugin });
const database = databaseManager.forPlugin(plugin);
const cache = cacheManager.forPlugin(plugin);
const scheduler = taskScheduler.forPlugin(plugin);
const scheduler = DefaultSchedulerService.create({
logger,
database,
});
return {
logger,
+5 -3
View File
@@ -22,12 +22,14 @@ import {
PluginEndpointDiscovery,
TokenManager,
} from '@backstage/backend-common';
import { PluginTaskScheduler } from '@backstage/backend-tasks';
import { IdentityApi } from '@backstage/plugin-auth-node';
import { PermissionEvaluator } from '@backstage/plugin-permission-common';
import { EventBroker, EventsService } from '@backstage/plugin-events-node';
import { SignalsService } from '@backstage/plugin-signals-node';
import { UrlReaderService } from '@backstage/backend-plugin-api';
import {
UrlReaderService,
SchedulerService,
} from '@backstage/backend-plugin-api';
export type PluginEnvironment = {
logger: Logger;
@@ -38,7 +40,7 @@ export type PluginEnvironment = {
discovery: PluginEndpointDiscovery;
tokenManager: TokenManager;
permissions: PermissionEvaluator;
scheduler: PluginTaskScheduler;
scheduler: SchedulerService;
identity: IdentityApi;
/**
* @deprecated use `events` instead
+7 -9
View File
@@ -1,9 +1,16 @@
# @backstage/backend-tasks
> [!CAUTION]
> This package is deprecated and will be removed in a near future.
Common distributed task management for Backstage backends.
## Usage
> [!CAUTION]
> Please note that the documentation below is only valid for versions equal to or below `0.5.28-next.3`.
> As this package will be deleted soon, we recommend that you migrate to the new backend system, and depend on `coreServices.scheduler` from `@backstage/backend-plugin-api` instead, or use `DefaultSchedulerService` from `@backstage/backend-defaults`. Here are the [backend](https://backstage.io/docs/backend-system/building-backends/migrating) and [plugin](https://backstage.io/docs/backend-system/building-plugins-and-modules/migrating) migration guides.
Add the library to your backend package:
```bash
@@ -27,12 +34,3 @@ await scheduler.scheduleTask({
},
});
```
## Local Development
When working with the `@backstage/backend-tasks` library you may run into your task not running immediately at startup as expected if you are using a persistent database. This is by design - the library respects the previous state and does not run the task sooner than the specified frequency. If you want to get around this, there is a table called `backstage_backend_tasks__tasks` in the applicable plugin's database which will contain a record with the next run date and time. You can delete this record to get things back to what you expect.
## Documentation
- [Backstage Readme](https://github.com/backstage/backstage/blob/master/README.md)
- [Backstage Documentation](https://backstage.io/docs)
+17 -17
View File
@@ -1,35 +1,39 @@
{
"name": "@backstage/backend-tasks",
"description": "Common distributed task management library for Backstage backends",
"version": "0.5.28-next.3",
"main": "src/index.ts",
"types": "src/index.ts",
"description": "Common distributed task management library for Backstage backends",
"backstage": {
"role": "node-library"
},
"publishConfig": {
"access": "public",
"main": "dist/index.cjs.js",
"types": "dist/index.d.ts"
},
"backstage": {
"role": "node-library"
},
"keywords": [
"backstage"
],
"homepage": "https://backstage.io",
"repository": {
"type": "git",
"url": "https://github.com/backstage/backstage",
"directory": "packages/backend-tasks"
},
"keywords": [
"backstage"
],
"license": "Apache-2.0",
"main": "src/index.ts",
"types": "src/index.ts",
"files": [
"dist",
"migrations/**/*.{js,d.ts}"
],
"scripts": {
"build": "backstage-cli package build",
"clean": "backstage-cli package clean",
"lint": "backstage-cli package lint",
"test": "backstage-cli package test",
"prepack": "backstage-cli package prepack",
"postpack": "backstage-cli package postpack",
"clean": "backstage-cli package clean",
"start": "backstage-cli package start"
"start": "backstage-cli package start",
"test": "backstage-cli package test"
},
"dependencies": {
"@backstage/backend-common": "workspace:^",
@@ -50,9 +54,5 @@
"@backstage/backend-test-utils": "workspace:^",
"@backstage/cli": "workspace:^",
"wait-for-expect": "^3.0.2"
},
"files": [
"dist",
"migrations/**/*.{js,d.ts}"
]
}
}
+4
View File
@@ -17,6 +17,10 @@
/**
* Common distributed task management library for Backstage backends
*
* @remarks
* This package is deprecated and will be removed in a near future.
* Please migrate to the new backend system, and depend on `coreServices.scheduler` from `@backstage/backend-plugin-api` instead, or use `DefaultSchedulerService` from `@backstage/backend-defaults`.
*
* @packageDocumentation
*/
-1
View File
@@ -29,7 +29,6 @@
"dependencies": {
"@backstage/backend-defaults": "workspace:^",
"@backstage/backend-plugin-api": "workspace:^",
"@backstage/backend-tasks": "workspace:^",
"@backstage/catalog-model": "workspace:^",
"@backstage/plugin-app-backend": "workspace:^",
"@backstage/plugin-auth-backend": "workspace:^",
@@ -15,8 +15,8 @@ import { EntityProvider } from '@backstage/plugin-catalog-node';
import { EntityProviderConnection } from '@backstage/plugin-catalog-node';
import { LocationSpec } from '@backstage/plugin-catalog-common';
import { LoggerService } from '@backstage/backend-plugin-api';
import { PluginTaskScheduler } from '@backstage/backend-tasks';
import { TaskRunner } from '@backstage/backend-tasks';
import { SchedulerService } from '@backstage/backend-plugin-api';
import { SchedulerServiceTaskRunner } from '@backstage/backend-plugin-api';
import { UrlReaderService } from '@backstage/backend-plugin-api';
// @public
@@ -96,8 +96,8 @@ export class AwsS3EntityProvider implements EntityProvider {
configRoot: Config,
options: {
logger: LoggerService;
schedule?: TaskRunner;
scheduler?: PluginTaskScheduler;
schedule?: SchedulerServiceTaskRunner;
scheduler?: SchedulerService;
},
): AwsS3EntityProvider[];
// (undocumented)
+3 -3
View File
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { TaskScheduleDefinitionConfig } from '@backstage/backend-tasks';
import { SchedulerServiceTaskScheduleDefinitionConfig } from '@backstage/backend-plugin-api';
export interface Config {
catalog?: {
@@ -69,7 +69,7 @@ export interface Config {
/**
* (Optional) TaskScheduleDefinition for the refresh.
*/
schedule?: TaskScheduleDefinitionConfig;
schedule?: SchedulerServiceTaskScheduleDefinitionConfig;
}
| {
[name: string]: {
@@ -97,7 +97,7 @@ export interface Config {
/**
* (Optional) TaskScheduleDefinition for the refresh.
*/
schedule?: TaskScheduleDefinitionConfig;
schedule?: SchedulerServiceTaskScheduleDefinitionConfig;
};
};
};
@@ -59,7 +59,6 @@
"@aws-sdk/types": "^3.347.0",
"@backstage/backend-defaults": "workspace:^",
"@backstage/backend-plugin-api": "workspace:^",
"@backstage/backend-tasks": "workspace:^",
"@backstage/catalog-model": "workspace:^",
"@backstage/config": "workspace:^",
"@backstage/errors": "workspace:^",
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { TaskScheduleDefinition } from '@backstage/backend-tasks';
import { SchedulerServiceTaskScheduleDefinition } from '@backstage/backend-plugin-api';
import { mockServices, startTestBackend } from '@backstage/backend-test-utils';
import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha';
import { catalogModuleAwsS3EntityProvider } from './catalogModuleAwsS3EntityProvider';
@@ -23,7 +23,7 @@ import { AwsS3EntityProvider } from '../providers';
describe('catalogModuleAwsS3EntityProvider', () => {
it('should register provider at the catalog extension point', async () => {
let addedProviders: Array<AwsS3EntityProvider> | undefined;
let usedSchedule: TaskScheduleDefinition | undefined;
let usedSchedule: SchedulerServiceTaskScheduleDefinition | undefined;
const extensionPoint = {
addEntityProvider: (providers: any) => {
@@ -15,10 +15,10 @@
*/
import {
PluginTaskScheduler,
TaskInvocationDefinition,
TaskRunner,
} from '@backstage/backend-tasks';
SchedulerService,
SchedulerServiceTaskRunner,
SchedulerServiceTaskInvocationDefinition,
} from '@backstage/backend-plugin-api';
import { ConfigReader } from '@backstage/config';
import { EntityProviderConnection } from '@backstage/plugin-catalog-node';
import { AwsS3EntityProvider } from './AwsS3EntityProvider';
@@ -27,14 +27,14 @@ import 'aws-sdk-client-mock-jest';
import { ListObjectsV2Command, S3Client } from '@aws-sdk/client-s3';
import { mockServices } from '@backstage/backend-test-utils';
class PersistingTaskRunner implements TaskRunner {
private tasks: TaskInvocationDefinition[] = [];
class PersistingTaskRunner implements SchedulerServiceTaskRunner {
private tasks: SchedulerServiceTaskInvocationDefinition[] = [];
getTasks() {
return this.tasks;
}
run(task: TaskInvocationDefinition): Promise<void> {
run(task: SchedulerServiceTaskInvocationDefinition): Promise<void> {
this.tasks.push(task);
return Promise.resolve(undefined);
}
@@ -117,7 +117,7 @@ describe('AwsS3EntityProvider', () => {
if (scheduleInConfig) {
schedulingConfig.scheduler = {
createScheduledTaskRunner: (_: any) => schedule,
} as unknown as PluginTaskScheduler;
} as unknown as SchedulerService;
} else {
schedulingConfig.schedule = schedule;
}
@@ -392,7 +392,7 @@ describe('AwsS3EntityProvider', () => {
it('fail with scheduler but no schedule config', () => {
const scheduler = {
createScheduledTaskRunner: (_: any) => jest.fn(),
} as unknown as PluginTaskScheduler;
} as unknown as SchedulerService;
const config = new ConfigReader({
catalog: {
providers: {
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { PluginTaskScheduler, TaskRunner } from '@backstage/backend-tasks';
import { Config } from '@backstage/config';
import { AwsS3Integration, ScmIntegrations } from '@backstage/integration';
import {
@@ -36,7 +35,11 @@ import {
AwsCredentialsManager,
DefaultAwsCredentialsManager,
} from '@backstage/integration-aws-node';
import { LoggerService } from '@backstage/backend-plugin-api';
import {
LoggerService,
SchedulerService,
SchedulerServiceTaskRunner,
} from '@backstage/backend-plugin-api';
// TODO: event-based updates using S3 events (+ queue like SQS)?
/**
@@ -57,8 +60,8 @@ export class AwsS3EntityProvider implements EntityProvider {
configRoot: Config,
options: {
logger: LoggerService;
schedule?: TaskRunner;
scheduler?: PluginTaskScheduler;
schedule?: SchedulerServiceTaskRunner;
scheduler?: SchedulerService;
},
): AwsS3EntityProvider[] {
const providerConfigs = readAwsS3Configs(configRoot);
@@ -107,7 +110,7 @@ export class AwsS3EntityProvider implements EntityProvider {
private readonly integration: AwsS3Integration,
private readonly awsCredentialsManager: AwsCredentialsManager,
logger: LoggerService,
taskRunner: TaskRunner,
taskRunner: SchedulerServiceTaskRunner,
) {
this.logger = logger.child({
target: this.getProviderName(),
@@ -116,7 +119,9 @@ export class AwsS3EntityProvider implements EntityProvider {
this.scheduleFn = this.createScheduleFn(taskRunner);
}
private createScheduleFn(taskRunner: TaskRunner): () => Promise<void> {
private createScheduleFn(
taskRunner: SchedulerServiceTaskRunner,
): () => Promise<void> {
return async () => {
const taskId = `${this.getProviderName()}:refresh`;
return taskRunner.run({
@@ -14,9 +14,9 @@
* limitations under the License.
*/
import { readTaskScheduleDefinitionFromConfig } from '@backstage/backend-tasks';
import { Config } from '@backstage/config';
import { AwsS3Config } from './types';
import { readSchedulerServiceTaskScheduleDefinitionFromConfig } from '@backstage/backend-plugin-api';
const DEFAULT_PROVIDER_ID = 'default';
@@ -49,7 +49,9 @@ function readAwsS3Config(id: string, config: Config): AwsS3Config {
const accountId = config.getOptionalString('accountId');
const schedule = config.has('schedule')
? readTaskScheduleDefinitionFromConfig(config.getConfig('schedule'))
? readSchedulerServiceTaskScheduleDefinitionFromConfig(
config.getConfig('schedule'),
)
: undefined;
return {
@@ -14,13 +14,13 @@
* limitations under the License.
*/
import { TaskScheduleDefinition } from '@backstage/backend-tasks';
import { SchedulerServiceTaskScheduleDefinition } from '@backstage/backend-plugin-api';
export type AwsS3Config = {
id: string;
bucketName: string;
prefix?: string;
region?: string;
schedule?: TaskScheduleDefinition;
schedule?: SchedulerServiceTaskScheduleDefinition;
accountId?: string;
};
@@ -10,9 +10,9 @@ import { EntityProvider } from '@backstage/plugin-catalog-node';
import { EntityProviderConnection } from '@backstage/plugin-catalog-node';
import { LocationSpec } from '@backstage/plugin-catalog-common';
import { LoggerService } from '@backstage/backend-plugin-api';
import { PluginTaskScheduler } from '@backstage/backend-tasks';
import { SchedulerService } from '@backstage/backend-plugin-api';
import { SchedulerServiceTaskRunner } from '@backstage/backend-plugin-api';
import { ScmIntegrationRegistry } from '@backstage/integration';
import { TaskRunner } from '@backstage/backend-tasks';
// @public
export class AzureDevOpsDiscoveryProcessor implements CatalogProcessor {
@@ -46,8 +46,8 @@ export class AzureDevOpsEntityProvider implements EntityProvider {
configRoot: Config,
options: {
logger: LoggerService;
schedule?: TaskRunner;
scheduler?: PluginTaskScheduler;
schedule?: SchedulerServiceTaskRunner;
scheduler?: SchedulerService;
},
): AzureDevOpsEntityProvider[];
// (undocumented)
+2 -2
View File
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { TaskScheduleDefinitionConfig } from '@backstage/backend-tasks';
import { SchedulerServiceTaskScheduleDefinitionConfig } from '@backstage/backend-plugin-api';
export interface Config {
catalog?: {
@@ -52,7 +52,7 @@ export interface Config {
/**
* (Optional) TaskScheduleDefinition for the refresh.
*/
schedule?: TaskScheduleDefinitionConfig;
schedule?: SchedulerServiceTaskScheduleDefinitionConfig;
};
};
};
@@ -52,7 +52,6 @@
},
"dependencies": {
"@backstage/backend-plugin-api": "workspace:^",
"@backstage/backend-tasks": "workspace:^",
"@backstage/config": "workspace:^",
"@backstage/integration": "workspace:^",
"@backstage/plugin-catalog-common": "workspace:^",
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { TaskScheduleDefinition } from '@backstage/backend-tasks';
import { SchedulerServiceTaskScheduleDefinition } from '@backstage/backend-plugin-api';
import { mockServices, startTestBackend } from '@backstage/backend-test-utils';
import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha';
import { catalogModuleAzureDevOpsEntityProvider } from './catalogModuleAzureDevOpsEntityProvider';
@@ -23,7 +23,7 @@ import { AzureDevOpsEntityProvider } from '../providers';
describe('catalogModuleAzureDevOpsEntityProvider', () => {
it('should register provider at the catalog extension point', async () => {
let addedProviders: Array<AzureDevOpsEntityProvider> | undefined;
let usedSchedule: TaskScheduleDefinition | undefined;
let usedSchedule: SchedulerServiceTaskScheduleDefinition | undefined;
const extensionPoint = {
addEntityProvider: (providers: any) => {
@@ -15,10 +15,10 @@
*/
import {
PluginTaskScheduler,
TaskInvocationDefinition,
TaskRunner,
} from '@backstage/backend-tasks';
SchedulerService,
SchedulerServiceTaskRunner,
SchedulerServiceTaskInvocationDefinition,
} from '@backstage/backend-plugin-api';
import { ConfigReader } from '@backstage/config';
import { EntityProviderConnection } from '@backstage/plugin-catalog-node';
import { CodeSearchResultItem } from '../lib';
@@ -29,14 +29,14 @@ import { mockServices } from '@backstage/backend-test-utils';
jest.mock('../lib');
const mockCodeSearch = codeSearch as jest.MockedFunction<typeof codeSearch>;
class PersistingTaskRunner implements TaskRunner {
private tasks: TaskInvocationDefinition[] = [];
class PersistingTaskRunner implements SchedulerServiceTaskRunner {
private tasks: SchedulerServiceTaskInvocationDefinition[] = [];
getTasks() {
return this.tasks;
}
run(task: TaskInvocationDefinition): Promise<void> {
run(task: SchedulerServiceTaskInvocationDefinition): Promise<void> {
this.tasks.push(task);
return Promise.resolve(undefined);
}
@@ -83,7 +83,7 @@ describe('AzureDevOpsEntityProvider', () => {
if (scheduleInConfig) {
schedulingConfig.scheduler = {
createScheduledTaskRunner: (_: any) => schedule,
} as unknown as PluginTaskScheduler;
} as unknown as SchedulerService;
} else {
schedulingConfig.schedule = schedule;
}
@@ -275,7 +275,7 @@ describe('AzureDevOpsEntityProvider', () => {
it('fail with scheduler but no schedule config', () => {
const scheduler = {
createScheduledTaskRunner: (_: any) => jest.fn(),
} as unknown as PluginTaskScheduler;
} as unknown as SchedulerService;
const config = new ConfigReader({
catalog: {
providers: {
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { PluginTaskScheduler, TaskRunner } from '@backstage/backend-tasks';
import { Config } from '@backstage/config';
import {
AzureDevOpsCredentialsProvider,
@@ -32,7 +31,11 @@ import { readAzureDevOpsConfigs } from './config';
import { AzureDevOpsConfig } from './types';
import * as uuid from 'uuid';
import { codeSearch, CodeSearchResultItem } from '../lib';
import { LoggerService } from '@backstage/backend-plugin-api';
import {
SchedulerService,
SchedulerServiceTaskRunner,
LoggerService,
} from '@backstage/backend-plugin-api';
/**
* Provider which discovers catalog files within an Azure DevOps repositories.
@@ -50,8 +53,8 @@ export class AzureDevOpsEntityProvider implements EntityProvider {
configRoot: Config,
options: {
logger: LoggerService;
schedule?: TaskRunner;
scheduler?: PluginTaskScheduler;
schedule?: SchedulerServiceTaskRunner;
scheduler?: SchedulerService;
},
): AzureDevOpsEntityProvider[] {
const providerConfigs = readAzureDevOpsConfigs(configRoot);
@@ -99,7 +102,7 @@ export class AzureDevOpsEntityProvider implements EntityProvider {
private readonly integration: AzureIntegration,
private readonly credentialsProvider: AzureDevOpsCredentialsProvider,
logger: LoggerService,
taskRunner: TaskRunner,
taskRunner: SchedulerServiceTaskRunner,
) {
this.logger = logger.child({
target: this.getProviderName(),
@@ -108,7 +111,9 @@ export class AzureDevOpsEntityProvider implements EntityProvider {
this.scheduleFn = this.createScheduleFn(taskRunner);
}
private createScheduleFn(taskRunner: TaskRunner): () => Promise<void> {
private createScheduleFn(
taskRunner: SchedulerServiceTaskRunner,
): () => Promise<void> {
return async () => {
const taskId = `${this.getProviderName()}:refresh`;
return taskRunner.run({
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { readTaskScheduleDefinitionFromConfig } from '@backstage/backend-tasks';
import { readSchedulerServiceTaskScheduleDefinitionFromConfig } from '@backstage/backend-plugin-api';
import { Config } from '@backstage/config';
import { AzureDevOpsConfig } from './types';
@@ -45,7 +45,9 @@ function readAzureDevOpsConfig(id: string, config: Config): AzureDevOpsConfig {
const path = config.getOptionalString('path') || '/catalog-info.yaml';
const schedule = config.has('schedule')
? readTaskScheduleDefinitionFromConfig(config.getConfig('schedule'))
? readSchedulerServiceTaskScheduleDefinitionFromConfig(
config.getConfig('schedule'),
)
: undefined;
return {
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { TaskScheduleDefinition } from '@backstage/backend-tasks';
import { SchedulerServiceTaskScheduleDefinition } from '@backstage/backend-plugin-api';
export type AzureDevOpsConfig = {
id: string;
@@ -24,5 +24,5 @@ export type AzureDevOpsConfig = {
repository: string;
branch?: string;
path: string;
schedule?: TaskScheduleDefinition;
schedule?: SchedulerServiceTaskScheduleDefinition;
};
@@ -35,7 +35,6 @@
"dependencies": {
"@backstage/backend-openapi-utils": "workspace:^",
"@backstage/backend-plugin-api": "workspace:^",
"@backstage/backend-tasks": "workspace:^",
"@backstage/catalog-model": "workspace:^",
"@backstage/config": "workspace:^",
"@backstage/errors": "workspace:^",
@@ -37,10 +37,11 @@ import {
AuthService,
DiscoveryService,
LoggerService,
SchedulerService,
SchedulerServiceTaskRunner,
} from '@backstage/backend-plugin-api';
import * as uuid from 'uuid';
import lodash from 'lodash';
import { PluginTaskScheduler, TaskRunner } from '@backstage/backend-tasks';
const HTTP_VERBS: (keyof PathItemObject)[] = [
'get',
@@ -163,7 +164,7 @@ export class InternalOpenApiDocumentationProvider implements EntityProvider {
public readonly discovery: DiscoveryService,
public readonly logger: LoggerService,
public readonly auth: AuthService,
taskRunner: TaskRunner,
taskRunner: SchedulerServiceTaskRunner,
) {
this.scheduleFn = this.createScheduleFn(taskRunner);
}
@@ -173,7 +174,7 @@ export class InternalOpenApiDocumentationProvider implements EntityProvider {
options: {
discovery: DiscoveryService;
logger: LoggerService;
schedule: PluginTaskScheduler;
schedule: SchedulerService;
auth: AuthService;
},
) {
@@ -204,7 +205,9 @@ export class InternalOpenApiDocumentationProvider implements EntityProvider {
return await this.scheduleFn();
}
private createScheduleFn(taskRunner: TaskRunner): () => Promise<void> {
private createScheduleFn(
taskRunner: SchedulerServiceTaskRunner,
): () => Promise<void> {
return async () => {
const taskId = `${this.getProviderName()}:refresh`;
return taskRunner.run({
@@ -10,8 +10,8 @@ import { EntityProviderConnection } from '@backstage/plugin-catalog-node';
import { Events } from '@backstage/plugin-bitbucket-cloud-common';
import { EventsService } from '@backstage/plugin-events-node';
import { LoggerService } from '@backstage/backend-plugin-api';
import { PluginTaskScheduler } from '@backstage/backend-tasks';
import { TaskRunner } from '@backstage/backend-tasks';
import { SchedulerService } from '@backstage/backend-plugin-api';
import { SchedulerServiceTaskRunner } from '@backstage/backend-plugin-api';
import { TokenManager } from '@backstage/backend-common';
// @public
@@ -25,8 +25,8 @@ export class BitbucketCloudEntityProvider implements EntityProvider {
catalogApi?: CatalogApi;
events?: EventsService;
logger: LoggerService;
schedule?: TaskRunner;
scheduler?: PluginTaskScheduler;
schedule?: SchedulerServiceTaskRunner;
scheduler?: SchedulerService;
tokenManager?: TokenManager;
},
): BitbucketCloudEntityProvider[];
+3 -3
View File
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { TaskScheduleDefinitionConfig } from '@backstage/backend-tasks';
import { SchedulerServiceTaskScheduleDefinitionConfig } from '@backstage/backend-plugin-api';
export interface Config {
catalog?: {
@@ -58,7 +58,7 @@ export interface Config {
/**
* (Optional) TaskScheduleDefinition for the discovery.
*/
schedule?: TaskScheduleDefinitionConfig;
schedule?: SchedulerServiceTaskScheduleDefinitionConfig;
}
| {
[name: string]: {
@@ -91,7 +91,7 @@ export interface Config {
/**
* (Optional) TaskScheduleDefinition for the discovery.
*/
schedule?: TaskScheduleDefinitionConfig;
schedule?: SchedulerServiceTaskScheduleDefinitionConfig;
};
};
};
@@ -53,7 +53,6 @@
"dependencies": {
"@backstage/backend-common": "workspace:^",
"@backstage/backend-plugin-api": "workspace:^",
"@backstage/backend-tasks": "workspace:^",
"@backstage/catalog-client": "workspace:^",
"@backstage/catalog-model": "workspace:^",
"@backstage/config": "workspace:^",
@@ -14,8 +14,10 @@
* limitations under the License.
*/
import { createServiceFactory } from '@backstage/backend-plugin-api';
import { TaskScheduleDefinition } from '@backstage/backend-tasks';
import {
createServiceFactory,
SchedulerServiceTaskScheduleDefinition,
} from '@backstage/backend-plugin-api';
import { startTestBackend, mockServices } from '@backstage/backend-test-utils';
import { EntityProviderConnection } from '@backstage/plugin-catalog-node';
import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha';
@@ -35,7 +37,7 @@ describe('catalogModuleBitbucketCloudEntityProvider', () => {
},
});
let addedProviders: Array<BitbucketCloudEntityProvider> | undefined;
let usedSchedule: TaskScheduleDefinition | undefined;
let usedSchedule: SchedulerServiceTaskScheduleDefinition | undefined;
const catalogExtensionPointImpl = {
addEntityProvider: (providers: any) => {
@@ -16,10 +16,10 @@
import { TokenManager } from '@backstage/backend-common';
import {
PluginTaskScheduler,
TaskInvocationDefinition,
TaskRunner,
} from '@backstage/backend-tasks';
SchedulerService,
SchedulerServiceTaskInvocationDefinition,
SchedulerServiceTaskRunner,
} from '@backstage/backend-plugin-api';
import {
mockServices,
registerMswTestHooks,
@@ -40,14 +40,14 @@ import {
BitbucketCloudEntityProvider,
} from './BitbucketCloudEntityProvider';
class PersistingTaskRunner implements TaskRunner {
private tasks: TaskInvocationDefinition[] = [];
class PersistingTaskRunner implements SchedulerServiceTaskRunner {
private tasks: SchedulerServiceTaskInvocationDefinition[] = [];
getTasks() {
return this.tasks;
}
run(task: TaskInvocationDefinition): Promise<void> {
run(task: SchedulerServiceTaskInvocationDefinition): Promise<void> {
this.tasks.push(task);
return Promise.resolve(undefined);
}
@@ -190,7 +190,7 @@ describe('BitbucketCloudEntityProvider', () => {
});
it('fail with scheduler but no schedule config', () => {
const scheduler = jest.fn() as unknown as PluginTaskScheduler;
const scheduler = jest.fn() as unknown as SchedulerService;
const config = new ConfigReader({
catalog: {
providers: {
@@ -214,7 +214,7 @@ describe('BitbucketCloudEntityProvider', () => {
it('single simple provider config with schedule in config', () => {
const scheduler = {
createScheduledTaskRunner: (_: any) => jest.fn(),
} as unknown as PluginTaskScheduler;
} as unknown as SchedulerService;
const config = new ConfigReader({
catalog: {
providers: {
@@ -15,8 +15,11 @@
*/
import { TokenManager } from '@backstage/backend-common';
import { LoggerService } from '@backstage/backend-plugin-api';
import { PluginTaskScheduler, TaskRunner } from '@backstage/backend-tasks';
import {
LoggerService,
SchedulerService,
SchedulerServiceTaskRunner,
} from '@backstage/backend-plugin-api';
import { CatalogApi } from '@backstage/catalog-client';
import { LocationEntity } from '@backstage/catalog-model';
import { Config } from '@backstage/config';
@@ -80,8 +83,8 @@ export class BitbucketCloudEntityProvider implements EntityProvider {
catalogApi?: CatalogApi;
events?: EventsService;
logger: LoggerService;
schedule?: TaskRunner;
scheduler?: PluginTaskScheduler;
schedule?: SchedulerServiceTaskRunner;
scheduler?: SchedulerService;
tokenManager?: TokenManager;
},
): BitbucketCloudEntityProvider[] {
@@ -124,7 +127,7 @@ export class BitbucketCloudEntityProvider implements EntityProvider {
config: BitbucketCloudEntityProviderConfig,
integration: BitbucketCloudIntegration,
logger: LoggerService,
taskRunner: TaskRunner,
taskRunner: SchedulerServiceTaskRunner,
catalogApi?: CatalogApi,
events?: EventsService,
tokenManager?: TokenManager,
@@ -140,7 +143,9 @@ export class BitbucketCloudEntityProvider implements EntityProvider {
this.tokenManager = tokenManager;
}
private createScheduleFn(schedule: TaskRunner): () => Promise<void> {
private createScheduleFn(
schedule: SchedulerServiceTaskRunner,
): () => Promise<void> {
return async () => {
const taskId = this.getTaskId();
return schedule.run({
@@ -15,9 +15,9 @@
*/
import {
readTaskScheduleDefinitionFromConfig,
TaskScheduleDefinition,
} from '@backstage/backend-tasks';
SchedulerServiceTaskScheduleDefinition,
readSchedulerServiceTaskScheduleDefinitionFromConfig,
} from '@backstage/backend-plugin-api';
import { Config } from '@backstage/config';
const DEFAULT_CATALOG_PATH = '/catalog-info.yaml';
@@ -31,7 +31,7 @@ export type BitbucketCloudEntityProviderConfig = {
projectKey?: RegExp;
repoSlug?: RegExp;
};
schedule?: TaskScheduleDefinition;
schedule?: SchedulerServiceTaskScheduleDefinition;
};
export function readProviderConfigs(
@@ -67,7 +67,9 @@ function readProviderConfig(
const repoSlugPattern = config.getOptionalString('filters.repoSlug');
const schedule = config.has('schedule')
? readTaskScheduleDefinitionFromConfig(config.getConfig('schedule'))
? readSchedulerServiceTaskScheduleDefinitionFromConfig(
config.getConfig('schedule'),
)
: undefined;
return {
@@ -10,9 +10,9 @@ import { EntityProvider } from '@backstage/plugin-catalog-node';
import { EntityProviderConnection } from '@backstage/plugin-catalog-node';
import { LocationSpec } from '@backstage/plugin-catalog-node';
import { LoggerService } from '@backstage/backend-plugin-api';
import { PluginTaskScheduler } from '@backstage/backend-tasks';
import { Response as Response_2 } from 'node-fetch';
import { TaskRunner } from '@backstage/backend-tasks';
import { SchedulerService } from '@backstage/backend-plugin-api';
import { SchedulerServiceTaskRunner } from '@backstage/backend-plugin-api';
// @public
export class BitbucketServerClient {
@@ -57,8 +57,8 @@ export class BitbucketServerEntityProvider implements EntityProvider {
options: {
logger: LoggerService;
parser?: BitbucketServerLocationParser;
schedule?: TaskRunner;
scheduler?: PluginTaskScheduler;
schedule?: SchedulerServiceTaskRunner;
scheduler?: SchedulerService;
},
): BitbucketServerEntityProvider[];
// (undocumented)
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { TaskScheduleDefinitionConfig } from '@backstage/backend-tasks';
import { SchedulerServiceTaskScheduleDefinitionConfig } from '@backstage/backend-plugin-api';
export interface Config {
catalog?: {
@@ -54,7 +54,7 @@ export interface Config {
/**
* (Optional) TaskScheduleDefinition for the refresh.
*/
schedule?: TaskScheduleDefinitionConfig;
schedule?: SchedulerServiceTaskScheduleDefinitionConfig;
}
| {
[name: string]: {
@@ -86,7 +86,7 @@ export interface Config {
/**
* (Optional) TaskScheduleDefinition for the refresh.
*/
schedule?: TaskScheduleDefinitionConfig;
schedule?: SchedulerServiceTaskScheduleDefinitionConfig;
};
};
};
@@ -51,7 +51,6 @@
},
"dependencies": {
"@backstage/backend-plugin-api": "workspace:^",
"@backstage/backend-tasks": "workspace:^",
"@backstage/catalog-model": "workspace:^",
"@backstage/config": "workspace:^",
"@backstage/errors": "workspace:^",
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { TaskScheduleDefinition } from '@backstage/backend-tasks';
import { SchedulerServiceTaskScheduleDefinition } from '@backstage/backend-plugin-api';
import { mockServices, startTestBackend } from '@backstage/backend-test-utils';
import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha';
import { catalogModuleBitbucketServerEntityProvider } from './catalogModuleBitbucketServerEntityProvider';
@@ -23,7 +23,7 @@ import { BitbucketServerEntityProvider } from '../providers';
describe('catalogModuleBitbucketServerEntityProvider', () => {
it('should register provider at the catalog extension point', async () => {
let addedProviders: Array<BitbucketServerEntityProvider> | undefined;
let usedSchedule: TaskScheduleDefinition | undefined;
let usedSchedule: SchedulerServiceTaskScheduleDefinition | undefined;
const extensionPoint = {
addEntityProvider: (providers: any) => {
@@ -15,10 +15,10 @@
*/
import {
PluginTaskScheduler,
TaskInvocationDefinition,
TaskRunner,
} from '@backstage/backend-tasks';
SchedulerService,
SchedulerServiceTaskRunner,
SchedulerServiceTaskInvocationDefinition,
} from '@backstage/backend-plugin-api';
import {
mockServices,
registerMswTestHooks,
@@ -30,14 +30,14 @@ import { setupServer } from 'msw/node';
import { BitbucketServerEntityProvider } from './BitbucketServerEntityProvider';
import { BitbucketServerPagedResponse } from '../lib';
class PersistingTaskRunner implements TaskRunner {
private tasks: TaskInvocationDefinition[] = [];
class PersistingTaskRunner implements SchedulerServiceTaskRunner {
private tasks: SchedulerServiceTaskInvocationDefinition[] = [];
getTasks() {
return this.tasks;
}
run(task: TaskInvocationDefinition): Promise<void> {
run(task: SchedulerServiceTaskInvocationDefinition): Promise<void> {
this.tasks.push(task);
return Promise.resolve(undefined);
}
@@ -412,7 +412,7 @@ describe('BitbucketServerEntityProvider', () => {
it('fail with scheduler but no schedule config', () => {
const scheduler = {
createScheduledTaskRunner: (_: any) => jest.fn(),
} as unknown as PluginTaskScheduler;
} as unknown as SchedulerService;
const config = new ConfigReader({
catalog: {
providers: {
@@ -469,7 +469,7 @@ describe('BitbucketServerEntityProvider', () => {
const schedule = new PersistingTaskRunner();
const scheduler = {
createScheduledTaskRunner: (_: any) => schedule,
} as unknown as PluginTaskScheduler;
} as unknown as SchedulerService;
const entityProviderConnection: EntityProviderConnection = {
applyMutation: jest.fn(),
refresh: jest.fn(),
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { PluginTaskScheduler, TaskRunner } from '@backstage/backend-tasks';
import { Entity } from '@backstage/catalog-model';
import { Config } from '@backstage/config';
import { InputError } from '@backstage/errors';
@@ -36,7 +35,11 @@ import {
BitbucketServerLocationParser,
defaultBitbucketServerLocationParser,
} from './BitbucketServerLocationParser';
import { LoggerService } from '@backstage/backend-plugin-api';
import {
LoggerService,
SchedulerService,
SchedulerServiceTaskRunner,
} from '@backstage/backend-plugin-api';
/**
* Discovers catalog files located in Bitbucket Server.
@@ -59,8 +62,8 @@ export class BitbucketServerEntityProvider implements EntityProvider {
options: {
logger: LoggerService;
parser?: BitbucketServerLocationParser;
schedule?: TaskRunner;
scheduler?: PluginTaskScheduler;
schedule?: SchedulerServiceTaskRunner;
scheduler?: SchedulerService;
},
): BitbucketServerEntityProvider[] {
const integrations = ScmIntegrations.fromConfig(config);
@@ -103,7 +106,7 @@ export class BitbucketServerEntityProvider implements EntityProvider {
config: BitbucketServerEntityProviderConfig,
integration: BitbucketServerIntegration,
logger: LoggerService,
taskRunner: TaskRunner,
taskRunner: SchedulerServiceTaskRunner,
parser?: BitbucketServerLocationParser,
) {
this.integration = integration;
@@ -115,7 +118,9 @@ export class BitbucketServerEntityProvider implements EntityProvider {
this.scheduleFn = this.createScheduleFn(taskRunner);
}
private createScheduleFn(taskRunner: TaskRunner): () => Promise<void> {
private createScheduleFn(
taskRunner: SchedulerServiceTaskRunner,
): () => Promise<void> {
return async () => {
const taskId = `${this.getProviderName()}:refresh`;
return taskRunner.run({
@@ -15,9 +15,9 @@
*/
import {
readTaskScheduleDefinitionFromConfig,
TaskScheduleDefinition,
} from '@backstage/backend-tasks';
SchedulerServiceTaskScheduleDefinition,
readSchedulerServiceTaskScheduleDefinitionFromConfig,
} from '@backstage/backend-plugin-api';
import { Config } from '@backstage/config';
const DEFAULT_CATALOG_PATH = '/catalog-info.yaml';
@@ -32,7 +32,7 @@ export type BitbucketServerEntityProviderConfig = {
repoSlug?: RegExp;
skipArchivedRepos?: boolean;
};
schedule?: TaskScheduleDefinition;
schedule?: SchedulerServiceTaskScheduleDefinition;
};
export function readProviderConfigs(
@@ -70,7 +70,9 @@ function readProviderConfig(
);
const schedule = config.has('schedule')
? readTaskScheduleDefinitionFromConfig(config.getConfig('schedule'))
? readSchedulerServiceTaskScheduleDefinitionFromConfig(
config.getConfig('schedule'),
)
: undefined;
return {
+2 -2
View File
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { TaskScheduleDefinitionConfig } from '@backstage/backend-tasks';
import { SchedulerServiceTaskScheduleDefinitionConfig } from '@backstage/backend-plugin-api';
export interface Config {
catalog?: {
@@ -37,7 +37,7 @@ export interface Config {
/**
* (Optional) TaskScheduleDefinition for the refresh.
*/
schedule: TaskScheduleDefinitionConfig;
schedule: SchedulerServiceTaskScheduleDefinitionConfig;
};
};
};
@@ -52,7 +52,6 @@
},
"dependencies": {
"@backstage/backend-plugin-api": "workspace:^",
"@backstage/backend-tasks": "workspace:^",
"@backstage/catalog-model": "workspace:^",
"@backstage/config": "workspace:^",
"@backstage/plugin-catalog-node": "workspace:^",
@@ -15,7 +15,7 @@
*/
import { GkeEntityProvider } from './GkeEntityProvider';
import { TaskRunner } from '@backstage/backend-tasks';
import { SchedulerServiceTaskRunner } from '@backstage/backend-plugin-api';
import * as container from '@google-cloud/container';
import { ConfigReader } from '@backstage/config';
@@ -30,7 +30,7 @@ describe('GkeEntityProvider', () => {
const taskRunner = {
createScheduleFn: jest.fn(),
run: jest.fn(),
} as TaskRunner;
} as SchedulerServiceTaskRunner;
const schedulerMock = {
createScheduledTaskRunner: jest.fn(),
} as any;
@@ -13,10 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {
readTaskScheduleDefinitionFromConfig,
TaskRunner,
} from '@backstage/backend-tasks';
import {
DeferredEntity,
EntityProvider,
@@ -31,7 +27,12 @@ import {
ANNOTATION_KUBERNETES_DASHBOARD_PARAMETERS,
} from '@backstage/plugin-kubernetes-common';
import { Config } from '@backstage/config';
import { LoggerService, SchedulerService } from '@backstage/backend-plugin-api';
import {
LoggerService,
SchedulerService,
SchedulerServiceTaskRunner,
readSchedulerServiceTaskScheduleDefinitionFromConfig,
} from '@backstage/backend-plugin-api';
import {
ANNOTATION_LOCATION,
ANNOTATION_ORIGIN_LOCATION,
@@ -51,7 +52,7 @@ export class GkeEntityProvider implements EntityProvider {
private constructor(
logger: LoggerService,
taskRunner: TaskRunner,
taskRunner: SchedulerServiceTaskRunner,
gkeParents: string[],
clusterManagerClient: container.v1.ClusterManagerClient,
) {
@@ -90,7 +91,7 @@ export class GkeEntityProvider implements EntityProvider {
clusterManagerClient: container.v1.ClusterManagerClient;
}) {
const gkeProviderConfig = config.getConfig('catalog.providers.gcp.gke');
const schedule = readTaskScheduleDefinitionFromConfig(
const schedule = readSchedulerServiceTaskScheduleDefinitionFromConfig(
gkeProviderConfig.getConfig('schedule'),
);
return new GkeEntityProvider(
@@ -172,7 +173,9 @@ export class GkeEntityProvider implements EntityProvider {
};
}
private createScheduleFn(taskRunner: TaskRunner): () => Promise<void> {
private createScheduleFn(
taskRunner: SchedulerServiceTaskRunner,
): () => Promise<void> {
return async () => {
const taskId = `${this.getProviderName()}:refresh`;
return taskRunner.run({
@@ -7,8 +7,8 @@ import { Config } from '@backstage/config';
import { EntityProvider } from '@backstage/plugin-catalog-node';
import { EntityProviderConnection } from '@backstage/plugin-catalog-node';
import { LoggerService } from '@backstage/backend-plugin-api';
import { PluginTaskScheduler } from '@backstage/backend-tasks';
import { TaskRunner } from '@backstage/backend-tasks';
import { SchedulerService } from '@backstage/backend-plugin-api';
import { SchedulerServiceTaskRunner } from '@backstage/backend-plugin-api';
// @public (undocumented)
export class GerritEntityProvider implements EntityProvider {
@@ -19,8 +19,8 @@ export class GerritEntityProvider implements EntityProvider {
configRoot: Config,
options: {
logger: LoggerService;
schedule?: TaskRunner;
scheduler?: PluginTaskScheduler;
schedule?: SchedulerServiceTaskRunner;
scheduler?: SchedulerService;
},
): GerritEntityProvider[];
// (undocumented)
@@ -48,7 +48,6 @@
},
"dependencies": {
"@backstage/backend-plugin-api": "workspace:^",
"@backstage/backend-tasks": "workspace:^",
"@backstage/config": "workspace:^",
"@backstage/errors": "workspace:^",
"@backstage/integration": "workspace:^",
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { TaskScheduleDefinition } from '@backstage/backend-tasks';
import { SchedulerServiceTaskScheduleDefinition } from '@backstage/backend-plugin-api';
import { mockServices, startTestBackend } from '@backstage/backend-test-utils';
import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha';
import { catalogModuleGerritEntityProvider } from './catalogModuleGerritEntityProvider';
@@ -23,7 +23,7 @@ import { GerritEntityProvider } from '../providers/GerritEntityProvider';
describe('catalogModuleGerritEntityProvider', () => {
it('should register provider at the catalog extension point', async () => {
let addedProviders: Array<GerritEntityProvider> | undefined;
let usedSchedule: TaskScheduleDefinition | undefined;
let usedSchedule: SchedulerServiceTaskScheduleDefinition | undefined;
const extensionPoint = {
addEntityProvider: (providers: any) => {
@@ -15,10 +15,10 @@
*/
import {
PluginTaskScheduler,
TaskInvocationDefinition,
TaskRunner,
} from '@backstage/backend-tasks';
SchedulerService,
SchedulerServiceTaskRunner,
SchedulerServiceTaskInvocationDefinition,
} from '@backstage/backend-plugin-api';
import {
mockServices,
registerMswTestHooks,
@@ -41,14 +41,14 @@ const getJsonFixture = (fileName: string) =>
),
);
class PersistingTaskRunner implements TaskRunner {
private tasks: TaskInvocationDefinition[] = [];
class PersistingTaskRunner implements SchedulerServiceTaskRunner {
private tasks: SchedulerServiceTaskInvocationDefinition[] = [];
getTasks() {
return this.tasks;
}
run(task: TaskInvocationDefinition): Promise<void> {
run(task: SchedulerServiceTaskInvocationDefinition): Promise<void> {
this.tasks.push(task);
return Promise.resolve(undefined);
}
@@ -228,7 +228,7 @@ describe('GerritEntityProvider', () => {
it('fail with scheduler but no schedule config', () => {
const scheduler = {
createScheduledTaskRunner: (_: any) => jest.fn(),
} as unknown as PluginTaskScheduler;
} as unknown as SchedulerService;
expect(() =>
GerritEntityProvider.fromConfig(config, {
logger,
@@ -270,7 +270,7 @@ describe('GerritEntityProvider', () => {
});
const scheduler = {
createScheduledTaskRunner: (_: any) => schedule,
} as unknown as PluginTaskScheduler;
} as unknown as SchedulerService;
const repoBuffer = fs.readFileSync(
path.resolve(__dirname, '__fixtures__/listProjectsBody.txt'),
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { PluginTaskScheduler, TaskRunner } from '@backstage/backend-tasks';
import { Config } from '@backstage/config';
import { InputError } from '@backstage/errors';
import {
@@ -35,7 +34,11 @@ import * as uuid from 'uuid';
import { readGerritConfigs } from './config';
import { GerritProjectQueryResult, GerritProviderConfig } from './types';
import { LoggerService } from '@backstage/backend-plugin-api';
import {
LoggerService,
SchedulerService,
SchedulerServiceTaskRunner,
} from '@backstage/backend-plugin-api';
/** @public */
export class GerritEntityProvider implements EntityProvider {
@@ -49,8 +52,8 @@ export class GerritEntityProvider implements EntityProvider {
configRoot: Config,
options: {
logger: LoggerService;
schedule?: TaskRunner;
scheduler?: PluginTaskScheduler;
schedule?: SchedulerServiceTaskRunner;
scheduler?: SchedulerService;
},
): GerritEntityProvider[] {
if (!options.schedule && !options.scheduler) {
@@ -95,7 +98,7 @@ export class GerritEntityProvider implements EntityProvider {
config: GerritProviderConfig,
integration: GerritIntegration,
logger: LoggerService,
taskRunner: TaskRunner,
taskRunner: SchedulerServiceTaskRunner,
) {
this.config = config;
this.integration = integration;
@@ -114,7 +117,9 @@ export class GerritEntityProvider implements EntityProvider {
await this.scheduleFn();
}
private createScheduleFn(taskRunner: TaskRunner): () => Promise<void> {
private createScheduleFn(
taskRunner: SchedulerServiceTaskRunner,
): () => Promise<void> {
return async () => {
const taskId = `${this.getProviderName()}:refresh`;
return taskRunner.run({
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { readTaskScheduleDefinitionFromConfig } from '@backstage/backend-tasks';
import { readSchedulerServiceTaskScheduleDefinitionFromConfig } from '@backstage/backend-plugin-api';
import { Config } from '@backstage/config';
import { GerritProviderConfig } from './types';
@@ -24,7 +24,9 @@ function readGerritConfig(id: string, config: Config): GerritProviderConfig {
const query = config.getString('query');
const schedule = config.has('schedule')
? readTaskScheduleDefinitionFromConfig(config.getConfig('schedule'))
? readSchedulerServiceTaskScheduleDefinitionFromConfig(
config.getConfig('schedule'),
)
: undefined;
return {
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { TaskScheduleDefinition } from '@backstage/backend-tasks';
import { SchedulerServiceTaskScheduleDefinition } from '@backstage/backend-plugin-api';
export type GerritProjectInfo = {
id: string;
@@ -30,5 +30,5 @@ export type GerritProviderConfig = {
query: string;
id: string;
branch?: string;
schedule?: TaskScheduleDefinition;
schedule?: SchedulerServiceTaskScheduleDefinition;
};
@@ -34,7 +34,6 @@
},
"dependencies": {
"@backstage/backend-plugin-api": "workspace:^",
"@backstage/backend-tasks": "workspace:^",
"@backstage/config": "workspace:^",
"@backstage/plugin-catalog-backend-module-github": "workspace:^",
"@backstage/plugin-catalog-node": "workspace:^",
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { TaskScheduleDefinition } from '@backstage/backend-tasks';
import { SchedulerServiceTaskScheduleDefinition } from '@backstage/backend-plugin-api';
import { mockServices, startTestBackend } from '@backstage/backend-test-utils';
import { EntityProvider } from '@backstage/plugin-catalog-node';
import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha';
@@ -23,7 +23,7 @@ import { catalogModuleGithubOrgEntityProvider } from './module';
describe('catalogModuleGithubOrgEntityProvider', () => {
it('should register provider at the catalog extension point', async () => {
let addedProviders: Array<EntityProvider> | undefined;
let usedSchedule: TaskScheduleDefinition | undefined;
let usedSchedule: SchedulerServiceTaskScheduleDefinition | undefined;
const extensionPoint = {
addEntityProvider: (...providers: any) => {
@@ -18,11 +18,9 @@ import {
coreServices,
createBackendModule,
createExtensionPoint,
SchedulerServiceTaskScheduleDefinition,
readSchedulerServiceTaskScheduleDefinitionFromConfig,
} from '@backstage/backend-plugin-api';
import {
readTaskScheduleDefinitionFromConfig,
TaskScheduleDefinition,
} from '@backstage/backend-tasks';
import { Config } from '@backstage/config';
import {
GithubMultiOrgEntityProvider,
@@ -134,7 +132,7 @@ function readDefinitionsFromConfig(rootConfig: Config): Array<{
id: string;
githubUrl: string;
orgs?: string[];
schedule: TaskScheduleDefinition;
schedule: SchedulerServiceTaskScheduleDefinition;
}> {
const baseKey = 'catalog.providers.githubOrg';
const baseConfig = rootConfig.getOptional(baseKey);
@@ -150,6 +148,8 @@ function readDefinitionsFromConfig(rootConfig: Config): Array<{
id: c.getString('id'),
githubUrl: c.getString('githubUrl'),
orgs: c.getOptionalStringArray('orgs'),
schedule: readTaskScheduleDefinitionFromConfig(c.getConfig('schedule')),
schedule: readSchedulerServiceTaskScheduleDefinitionFromConfig(
c.getConfig('schedule'),
),
}));
}
@@ -20,10 +20,10 @@ import { graphql } from '@octokit/graphql';
import { LocationSpec } from '@backstage/plugin-catalog-node';
import { LoggerService } from '@backstage/backend-plugin-api';
import { PluginEndpointDiscovery } from '@backstage/backend-common';
import { PluginTaskScheduler } from '@backstage/backend-tasks';
import { SchedulerService } from '@backstage/backend-plugin-api';
import { SchedulerServiceTaskRunner } from '@backstage/backend-plugin-api';
import { ScmIntegrationRegistry } from '@backstage/integration';
import { ScmLocationAnalyzer } from '@backstage/plugin-catalog-node';
import { TaskRunner } from '@backstage/backend-tasks';
import { TokenManager } from '@backstage/backend-common';
import { UserEntity } from '@backstage/catalog-model';
@@ -70,8 +70,8 @@ export class GitHubEntityProvider implements EntityProvider {
config: Config,
options: {
logger: LoggerService;
schedule?: TaskRunner;
scheduler?: PluginTaskScheduler;
schedule?: SchedulerServiceTaskRunner;
scheduler?: SchedulerService;
},
): GitHubEntityProvider[];
// (undocumented)
@@ -90,8 +90,8 @@ export class GithubEntityProvider implements EntityProvider, EventSubscriber {
options: {
events?: EventsService;
logger: LoggerService;
schedule?: TaskRunner;
scheduler?: PluginTaskScheduler;
schedule?: SchedulerServiceTaskRunner;
scheduler?: SchedulerService;
},
): GithubEntityProvider[];
// (undocumented)
@@ -173,7 +173,7 @@ export interface GithubMultiOrgEntityProviderOptions {
id: string;
logger: LoggerService;
orgs?: string[];
schedule?: 'manual' | TaskRunner;
schedule?: 'manual' | SchedulerServiceTaskRunner;
teamTransformer?: TeamTransformer;
userTransformer?: UserTransformer;
}
@@ -251,7 +251,7 @@ export interface GithubOrgEntityProviderOptions {
id: string;
logger: LoggerService;
orgUrl: string;
schedule?: 'manual' | TaskRunner;
schedule?: 'manual' | SchedulerServiceTaskRunner;
teamTransformer?: TeamTransformer;
userTransformer?: UserTransformer;
}
+5 -5
View File
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { TaskScheduleDefinitionConfig } from '@backstage/backend-tasks';
import { SchedulerServiceTaskScheduleDefinitionConfig } from '@backstage/backend-plugin-api';
export interface Config {
catalog?: {
@@ -116,7 +116,7 @@ export interface Config {
/**
* (Optional) TaskScheduleDefinition for the refresh.
*/
schedule?: TaskScheduleDefinitionConfig;
schedule?: SchedulerServiceTaskScheduleDefinitionConfig;
}
| {
[name: string]: {
@@ -185,7 +185,7 @@ export interface Config {
/**
* (Optional) TaskScheduleDefinition for the refresh.
*/
schedule?: TaskScheduleDefinitionConfig;
schedule?: SchedulerServiceTaskScheduleDefinitionConfig;
};
};
@@ -220,7 +220,7 @@ export interface Config {
/**
* The refresh schedule to use.
*/
schedule: TaskScheduleDefinitionConfig;
schedule: SchedulerServiceTaskScheduleDefinitionConfig;
}
| Array<{
/**
@@ -249,7 +249,7 @@ export interface Config {
/**
* The refresh schedule to use.
*/
schedule: TaskScheduleDefinitionConfig;
schedule: SchedulerServiceTaskScheduleDefinitionConfig;
}>;
};
};
@@ -53,7 +53,6 @@
"dependencies": {
"@backstage/backend-common": "workspace:^",
"@backstage/backend-plugin-api": "workspace:^",
"@backstage/backend-tasks": "workspace:^",
"@backstage/catalog-client": "workspace:^",
"@backstage/catalog-model": "workspace:^",
"@backstage/config": "workspace:^",
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { PluginTaskScheduler, TaskRunner } from '@backstage/backend-tasks';
import { Config } from '@backstage/config';
import {
EntityProvider,
@@ -25,7 +24,11 @@ import {
GithubOrgEntityProvider,
GithubOrgEntityProviderOptions,
} from './providers/GithubOrgEntityProvider';
import { LoggerService } from '@backstage/backend-plugin-api';
import {
LoggerService,
SchedulerService,
SchedulerServiceTaskRunner,
} from '@backstage/backend-plugin-api';
/**
* @public
@@ -58,8 +61,8 @@ export class GitHubEntityProvider implements EntityProvider {
config: Config,
options: {
logger: LoggerService;
schedule?: TaskRunner;
scheduler?: PluginTaskScheduler;
schedule?: SchedulerServiceTaskRunner;
scheduler?: SchedulerService;
},
): GitHubEntityProvider[] {
options.logger.warn(
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { TaskScheduleDefinition } from '@backstage/backend-tasks';
import { SchedulerServiceTaskScheduleDefinition } from '@backstage/backend-plugin-api';
import { mockServices, startTestBackend } from '@backstage/backend-test-utils';
import { EntityProvider } from '@backstage/plugin-catalog-node';
import {
@@ -27,7 +27,7 @@ import { GithubLocationAnalyzer } from '../analyzers/GithubLocationAnalyzer';
describe('githubCatalogModule', () => {
it('should register provider at the catalog extension point', async () => {
let addedProviders: Array<EntityProvider> | undefined;
let usedSchedule: TaskScheduleDefinition | undefined;
let usedSchedule: SchedulerServiceTaskScheduleDefinition | undefined;
const extensionPoint = {
addEntityProvider: (providers: any) => {
@@ -15,10 +15,10 @@
*/
import {
PluginTaskScheduler,
TaskInvocationDefinition,
TaskRunner,
} from '@backstage/backend-tasks';
SchedulerService,
SchedulerServiceTaskRunner,
SchedulerServiceTaskInvocationDefinition,
} from '@backstage/backend-plugin-api';
import { Config, ConfigReader } from '@backstage/config';
import {
DeferredEntity,
@@ -41,14 +41,14 @@ jest.mock('../lib/github', () => {
getOrganizationRepositories: jest.fn(),
};
});
class PersistingTaskRunner implements TaskRunner {
private tasks: TaskInvocationDefinition[] = [];
class PersistingTaskRunner implements SchedulerServiceTaskRunner {
private tasks: SchedulerServiceTaskInvocationDefinition[] = [];
getTasks() {
return this.tasks;
}
run(task: TaskInvocationDefinition): Promise<void> {
run(task: SchedulerServiceTaskInvocationDefinition): Promise<void> {
this.tasks.push(task);
return Promise.resolve(undefined);
}
@@ -624,7 +624,7 @@ describe('GithubEntityProvider', () => {
it('fail with scheduler but no schedule config', () => {
const scheduler = {
createScheduledTaskRunner: (_: any) => jest.fn(),
} as unknown as PluginTaskScheduler;
} as unknown as SchedulerService;
const config = createSingleProviderConfig();
expect(() =>
@@ -641,7 +641,7 @@ describe('GithubEntityProvider', () => {
const schedule = new PersistingTaskRunner();
const scheduler = {
createScheduledTaskRunner: (_: any) => schedule,
} as unknown as PluginTaskScheduler;
} as unknown as SchedulerService;
const config = createSingleProviderConfig({
providerConfig: {
schedule: {
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { PluginTaskScheduler, TaskRunner } from '@backstage/backend-tasks';
import { Config } from '@backstage/config';
import {
GithubCredentialsProvider,
@@ -66,7 +65,11 @@ import {
RepositoryUnarchivedEvent,
} from '@octokit/webhooks-types';
import { Minimatch } from 'minimatch';
import { LoggerService } from '@backstage/backend-plugin-api';
import {
LoggerService,
SchedulerService,
SchedulerServiceTaskRunner,
} from '@backstage/backend-plugin-api';
const EVENT_TOPICS = ['github.push', 'github.repository'];
@@ -103,8 +106,8 @@ export class GithubEntityProvider implements EntityProvider, EventSubscriber {
options: {
events?: EventsService;
logger: LoggerService;
schedule?: TaskRunner;
scheduler?: PluginTaskScheduler;
schedule?: SchedulerServiceTaskRunner;
scheduler?: SchedulerService;
},
): GithubEntityProvider[] {
if (!options.schedule && !options.scheduler) {
@@ -147,7 +150,7 @@ export class GithubEntityProvider implements EntityProvider, EventSubscriber {
config: GithubEntityProviderConfig,
integration: GithubIntegration,
logger: LoggerService,
taskRunner: TaskRunner,
taskRunner: SchedulerServiceTaskRunner,
events?: EventsService,
) {
this.config = config;
@@ -177,7 +180,9 @@ export class GithubEntityProvider implements EntityProvider, EventSubscriber {
return await this.scheduleFn();
}
private createScheduleFn(taskRunner: TaskRunner): () => Promise<void> {
private createScheduleFn(
taskRunner: SchedulerServiceTaskRunner,
): () => Promise<void> {
return async () => {
const taskId = `${this.getProviderName()}:refresh`;
return taskRunner.run({
@@ -15,9 +15,9 @@
*/
import {
readTaskScheduleDefinitionFromConfig,
TaskScheduleDefinition,
} from '@backstage/backend-tasks';
SchedulerServiceTaskScheduleDefinition,
readSchedulerServiceTaskScheduleDefinitionFromConfig,
} from '@backstage/backend-plugin-api';
import { Config } from '@backstage/config';
const DEFAULT_CATALOG_PATH = '/catalog-info.yaml';
@@ -36,7 +36,7 @@ export type GithubEntityProviderConfig = {
visibility?: string[];
};
validateLocationsExist: boolean;
schedule?: TaskScheduleDefinition;
schedule?: SchedulerServiceTaskScheduleDefinition;
};
export type GithubTopicFilters = {
@@ -96,7 +96,9 @@ function readProviderConfig(
}
const schedule = config.has('schedule')
? readTaskScheduleDefinitionFromConfig(config.getConfig('schedule'))
? readSchedulerServiceTaskScheduleDefinitionFromConfig(
config.getConfig('schedule'),
)
: undefined;
return {
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { TaskRunner } from '@backstage/backend-tasks';
import {
ANNOTATION_LOCATION,
ANNOTATION_ORIGIN_LOCATION,
@@ -78,7 +77,10 @@ import {
} from '../lib/github';
import { splitTeamSlug } from '../lib/util';
import { areGroupEntities, areUserEntities } from '../lib/guards';
import { LoggerService } from '@backstage/backend-plugin-api';
import {
LoggerService,
SchedulerServiceTaskRunner,
} from '@backstage/backend-plugin-api';
const EVENT_TOPICS = [
'github.installation',
@@ -128,10 +130,10 @@ export interface GithubMultiOrgEntityProviderOptions {
* manually at some interval.
*
* But more commonly you will pass in the result of
* {@link @backstage/backend-tasks#PluginTaskScheduler.createScheduledTaskRunner}
* {@link @backstage/backend-plugin-api#SchedulerService.createScheduledTaskRunner}
* to enable automatic scheduling of tasks.
*/
schedule?: 'manual' | TaskRunner;
schedule?: 'manual' | SchedulerServiceTaskRunner;
/**
* The logger to use.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { TaskRunner } from '@backstage/backend-tasks';
import { SchedulerServiceTaskRunner } from '@backstage/backend-plugin-api';
import { Entity, isGroupEntity } from '@backstage/catalog-model';
import { Config } from '@backstage/config';
import {
@@ -103,10 +103,10 @@ export interface GithubOrgEntityProviderOptions {
* manually at some interval.
*
* But more commonly you will pass in the result of
* {@link @backstage/backend-tasks#PluginTaskScheduler.createScheduledTaskRunner}
* {@link @backstage/backend-plugin-api#SchedulerService.createScheduledTaskRunner}
* to enable automatic scheduling of tasks.
*/
schedule?: 'manual' | TaskRunner;
schedule?: 'manual' | SchedulerServiceTaskRunner;
/**
* The logger to use.
@@ -40,7 +40,6 @@
"@backstage/plugin-events-node": "workspace:^"
},
"devDependencies": {
"@backstage/backend-tasks": "workspace:^",
"@backstage/backend-test-utils": "workspace:^",
"@backstage/cli": "workspace:^",
"@backstage/plugin-events-backend-test-utils": "workspace:^",
@@ -14,8 +14,10 @@
* limitations under the License.
*/
import { createServiceFactory } from '@backstage/backend-plugin-api';
import { TaskScheduleDefinition } from '@backstage/backend-tasks';
import {
createServiceFactory,
SchedulerServiceTaskScheduleDefinition,
} from '@backstage/backend-plugin-api';
import { mockServices, startTestBackend } from '@backstage/backend-test-utils';
import { GitlabOrgDiscoveryEntityProvider } from '@backstage/plugin-catalog-backend-module-gitlab';
import { EntityProviderConnection } from '@backstage/plugin-catalog-node';
@@ -35,7 +37,7 @@ describe('catalogModuleGitlabOrgDiscoveryEntityProvider', () => {
},
});
let addedProviders: Array<GitlabOrgDiscoveryEntityProvider> | undefined;
let usedSchedule: TaskScheduleDefinition | undefined;
let usedSchedule: SchedulerServiceTaskScheduleDefinition | undefined;
const extensionPoint = {
addEntityProvider: (providers: any) => {
@@ -13,9 +13,9 @@ import { GitLabIntegrationConfig } from '@backstage/integration';
import { GroupEntity } from '@backstage/catalog-model';
import { LocationSpec } from '@backstage/plugin-catalog-node';
import { LoggerService } from '@backstage/backend-plugin-api';
import { PluginTaskScheduler } from '@backstage/backend-tasks';
import { TaskRunner } from '@backstage/backend-tasks';
import { TaskScheduleDefinition } from '@backstage/backend-tasks';
import { SchedulerService } from '@backstage/backend-plugin-api';
import { SchedulerServiceTaskRunner } from '@backstage/backend-plugin-api';
import { SchedulerServiceTaskScheduleDefinition } from '@backstage/backend-plugin-api';
import { UserEntity } from '@backstage/catalog-model';
// @public
@@ -28,8 +28,8 @@ export class GitlabDiscoveryEntityProvider implements EntityProvider {
options: {
logger: LoggerService;
events?: EventsService;
schedule?: TaskRunner;
scheduler?: PluginTaskScheduler;
schedule?: SchedulerServiceTaskRunner;
scheduler?: SchedulerService;
},
): GitlabDiscoveryEntityProvider[];
// (undocumented)
@@ -83,8 +83,8 @@ export class GitlabOrgDiscoveryEntityProvider implements EntityProvider {
options: {
logger: LoggerService;
events?: EventsService;
schedule?: TaskRunner;
scheduler?: PluginTaskScheduler;
schedule?: SchedulerServiceTaskRunner;
scheduler?: SchedulerService;
userTransformer?: UserTransformer;
groupEntitiesTransformer?: GroupTransformer;
groupNameTransformer?: GroupNameTransformer;
@@ -108,7 +108,7 @@ export type GitlabProviderConfig = {
groupPattern: RegExp;
allowInherited?: boolean;
orgEnabled?: boolean;
schedule?: TaskScheduleDefinition;
schedule?: SchedulerServiceTaskScheduleDefinition;
skipForkedRepos?: boolean;
excludeRepos?: string[];
};
+2 -2
View File
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { TaskScheduleDefinitionConfig } from '@backstage/backend-tasks';
import { SchedulerServiceTaskScheduleDefinitionConfig } from '@backstage/backend-plugin-api';
export interface Config {
catalog?: {
@@ -46,7 +46,7 @@ export interface Config {
/**
* (Optional) TaskScheduleDefinition for the refresh.
*/
schedule?: TaskScheduleDefinitionConfig;
schedule?: SchedulerServiceTaskScheduleDefinitionConfig;
/**
* (Optional) RegExp for the Project Name Pattern
*/
@@ -53,7 +53,6 @@
"dependencies": {
"@backstage/backend-common": "workspace:^",
"@backstage/backend-plugin-api": "workspace:^",
"@backstage/backend-tasks": "workspace:^",
"@backstage/catalog-model": "workspace:^",
"@backstage/config": "workspace:^",
"@backstage/integration": "workspace:^",
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { TaskScheduleDefinition } from '@backstage/backend-tasks';
import { SchedulerServiceTaskScheduleDefinition } from '@backstage/backend-plugin-api';
import { GroupEntity, UserEntity } from '@backstage/catalog-model';
import { GitLabIntegrationConfig } from '@backstage/integration';
@@ -196,7 +196,7 @@ export type GitlabProviderConfig = {
allowInherited?: boolean;
orgEnabled?: boolean;
schedule?: TaskScheduleDefinition;
schedule?: SchedulerServiceTaskScheduleDefinition;
/**
* If the project is a fork, skip repository
*/
@@ -14,8 +14,10 @@
* limitations under the License.
*/
import { createServiceFactory } from '@backstage/backend-plugin-api';
import { TaskScheduleDefinition } from '@backstage/backend-tasks';
import {
createServiceFactory,
SchedulerServiceTaskScheduleDefinition,
} from '@backstage/backend-plugin-api';
import { mockServices, startTestBackend } from '@backstage/backend-test-utils';
import { EntityProviderConnection } from '@backstage/plugin-catalog-node';
import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha';
@@ -35,7 +37,7 @@ describe('catalogModuleGitlabDiscoveryEntityProvider', () => {
},
});
let addedProviders: Array<GitlabDiscoveryEntityProvider> | undefined;
let usedSchedule: TaskScheduleDefinition | undefined;
let usedSchedule: SchedulerServiceTaskScheduleDefinition | undefined;
const extensionPoint = {
addEntityProvider: (providers: any) => {
@@ -15,10 +15,10 @@
*/
import {
PluginTaskScheduler,
TaskInvocationDefinition,
TaskRunner,
} from '@backstage/backend-tasks';
SchedulerService,
SchedulerServiceTaskRunner,
SchedulerServiceTaskInvocationDefinition,
} from '@backstage/backend-plugin-api';
import {
mockServices,
registerMswTestHooks,
@@ -35,14 +35,14 @@ const server = setupServer(...handlers);
registerMswTestHooks(server);
afterEach(() => jest.clearAllMocks());
class PersistingTaskRunner implements TaskRunner {
private tasks: TaskInvocationDefinition[] = [];
class PersistingTaskRunner implements SchedulerServiceTaskRunner {
private tasks: SchedulerServiceTaskInvocationDefinition[] = [];
getTasks() {
return this.tasks;
}
run(task: TaskInvocationDefinition): Promise<void> {
run(task: SchedulerServiceTaskInvocationDefinition): Promise<void> {
this.tasks.push(task);
return Promise.resolve(undefined);
}
@@ -75,7 +75,7 @@ describe('GitlabDiscoveryEntityProvider - configuration', () => {
it('should fail with scheduler but no schedule config', () => {
const scheduler = {
createScheduledTaskRunner: (_: any) => jest.fn(),
} as unknown as PluginTaskScheduler;
} as unknown as SchedulerService;
const config = new ConfigReader(mock.config_no_schedule_integration);
expect(() =>
@@ -14,8 +14,11 @@
* limitations under the License.
*/
import { LoggerService } from '@backstage/backend-plugin-api';
import { PluginTaskScheduler, TaskRunner } from '@backstage/backend-tasks';
import {
LoggerService,
SchedulerService,
SchedulerServiceTaskRunner,
} from '@backstage/backend-plugin-api';
import { Config } from '@backstage/config';
import { GitLabIntegration, ScmIntegrations } from '@backstage/integration';
import { LocationSpec } from '@backstage/plugin-catalog-common';
@@ -68,8 +71,8 @@ export class GitlabDiscoveryEntityProvider implements EntityProvider {
options: {
logger: LoggerService;
events?: EventsService;
schedule?: TaskRunner;
scheduler?: PluginTaskScheduler;
schedule?: SchedulerServiceTaskRunner;
scheduler?: SchedulerService;
},
): GitlabDiscoveryEntityProvider[] {
if (!options.schedule && !options.scheduler) {
@@ -121,7 +124,7 @@ export class GitlabDiscoveryEntityProvider implements EntityProvider {
integration: GitLabIntegration;
logger: LoggerService;
events?: EventsService;
taskRunner: TaskRunner;
taskRunner: SchedulerServiceTaskRunner;
}) {
this.config = options.config;
this.integration = options.integration;
@@ -165,7 +168,9 @@ export class GitlabDiscoveryEntityProvider implements EntityProvider {
* @param taskRunner - The task runner instance.
* @returns The scheduled function.
*/
private createScheduleFn(taskRunner: TaskRunner): () => Promise<void> {
private createScheduleFn(
taskRunner: SchedulerServiceTaskRunner,
): () => Promise<void> {
return async () => {
const taskId = `${this.getProviderName()}:refresh`;
return taskRunner.run({
@@ -15,10 +15,10 @@
*/
import {
PluginTaskScheduler,
TaskInvocationDefinition,
TaskRunner,
} from '@backstage/backend-tasks';
SchedulerService,
SchedulerServiceTaskRunner,
SchedulerServiceTaskInvocationDefinition,
} from '@backstage/backend-plugin-api';
import {
mockServices,
registerMswTestHooks,
@@ -36,14 +36,14 @@ const server = setupServer(...handlers);
registerMswTestHooks(server);
afterEach(() => jest.clearAllMocks());
class PersistingTaskRunner implements TaskRunner {
private tasks: TaskInvocationDefinition[] = [];
class PersistingTaskRunner implements SchedulerServiceTaskRunner {
private tasks: SchedulerServiceTaskInvocationDefinition[] = [];
getTasks() {
return this.tasks;
}
run(task: TaskInvocationDefinition): Promise<void> {
run(task: SchedulerServiceTaskInvocationDefinition): Promise<void> {
this.tasks.push(task);
return Promise.resolve(undefined);
}
@@ -113,7 +113,7 @@ describe('GitlabOrgDiscoveryEntityProvider - configuration', () => {
it('should fail with scheduler but no schedule config', () => {
const scheduler = {
createScheduledTaskRunner: (_: any) => jest.fn(),
} as unknown as PluginTaskScheduler;
} as unknown as SchedulerService;
const config = new ConfigReader(mock.config_org_integration_saas);
expect(() =>
@@ -130,7 +130,7 @@ describe('GitlabOrgDiscoveryEntityProvider - configuration', () => {
const schedule = new PersistingTaskRunner();
const scheduler = {
createScheduledTaskRunner: (_: any) => schedule,
} as unknown as PluginTaskScheduler;
} as unknown as SchedulerService;
const config = new ConfigReader(mock.config_org_integration_saas_sched);
const providers = GitlabOrgDiscoveryEntityProvider.fromConfig(config, {
logger,
@@ -13,8 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { LoggerService } from '@backstage/backend-plugin-api';
import { PluginTaskScheduler, TaskRunner } from '@backstage/backend-tasks';
import {
LoggerService,
SchedulerService,
SchedulerServiceTaskRunner,
} from '@backstage/backend-plugin-api';
import {
ANNOTATION_LOCATION,
ANNOTATION_ORIGIN_LOCATION,
@@ -114,8 +117,8 @@ export class GitlabOrgDiscoveryEntityProvider implements EntityProvider {
options: {
logger: LoggerService;
events?: EventsService;
schedule?: TaskRunner;
scheduler?: PluginTaskScheduler;
schedule?: SchedulerServiceTaskRunner;
scheduler?: SchedulerService;
userTransformer?: UserTransformer;
groupEntitiesTransformer?: GroupEntitiesTransformer;
groupNameTransformer?: GroupNameTransformer;
@@ -176,7 +179,7 @@ export class GitlabOrgDiscoveryEntityProvider implements EntityProvider {
integration: GitLabIntegration;
logger: LoggerService;
events?: EventsService;
taskRunner: TaskRunner;
taskRunner: SchedulerServiceTaskRunner;
userTransformer?: UserTransformer;
groupEntitiesTransformer?: GroupEntitiesTransformer;
groupNameTransformer?: GroupNameTransformer;
@@ -321,7 +324,9 @@ export class GitlabOrgDiscoveryEntityProvider implements EntityProvider {
}
}
private createScheduleFn(taskRunner: TaskRunner): () => Promise<void> {
private createScheduleFn(
taskRunner: SchedulerServiceTaskRunner,
): () => Promise<void> {
return async () => {
const taskId = `${this.getProviderName()}:refresh`;
return taskRunner.run({
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { readTaskScheduleDefinitionFromConfig } from '@backstage/backend-tasks';
import { readSchedulerServiceTaskScheduleDefinitionFromConfig } from '@backstage/backend-plugin-api';
import { Config } from '@backstage/config';
import { GitlabProviderConfig } from '../lib';
@@ -51,7 +51,9 @@ function readGitlabConfig(id: string, config: Config): GitlabProviderConfig {
config.getOptionalStringArray('excludeRepos') ?? [];
const schedule = config.has('schedule')
? readTaskScheduleDefinitionFromConfig(config.getConfig('schedule'))
? readSchedulerServiceTaskScheduleDefinitionFromConfig(
config.getConfig('schedule'),
)
: undefined;
const restrictUsersToGroup =
config.getOptionalBoolean('restrictUsersToGroup') ?? false;
@@ -14,8 +14,8 @@ import { EventSubscriber } from '@backstage/plugin-events-node';
import type { Logger } from 'winston';
import type { PermissionEvaluator } from '@backstage/plugin-permission-common';
import type { PluginDatabaseManager } from '@backstage/backend-common';
import type { PluginTaskScheduler } from '@backstage/backend-tasks';
import { Router } from 'express';
import { SchedulerService } from '@backstage/backend-plugin-api';
import { UrlReaderService } from '@backstage/backend-plugin-api';
// @public
@@ -89,7 +89,7 @@ export interface IncrementalEntityProviderOptions {
export type PluginEnvironment = {
logger: Logger;
database: PluginDatabaseManager;
scheduler: PluginTaskScheduler;
scheduler: SchedulerService;
config: Config;
reader: UrlReaderService;
permissions: PermissionEvaluator;
@@ -53,7 +53,6 @@
"dependencies": {
"@backstage/backend-common": "workspace:^",
"@backstage/backend-plugin-api": "workspace:^",
"@backstage/backend-tasks": "workspace:^",
"@backstage/catalog-model": "workspace:^",
"@backstage/config": "workspace:^",
"@backstage/errors": "workspace:^",
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { PluginTaskScheduler } from '@backstage/backend-tasks';
import { SchedulerService } from '@backstage/backend-plugin-api';
import { TestDatabases, mockServices } from '@backstage/backend-test-utils';
import { ConfigReader } from '@backstage/config';
import { IncrementalEntityProvider } from '../types';
@@ -66,8 +66,7 @@ describe('WrapperProviders', () => {
config,
logger,
client,
scheduler:
scheduler as Partial<PluginTaskScheduler> as PluginTaskScheduler,
scheduler: scheduler as Partial<SchedulerService> as SchedulerService,
applyDatabaseMigrations,
});
const wrapped1 = providers.wrap(provider1, {

Some files were not shown because too many files have changed in this diff Show More