mirror of
https://github.com/xtr-dev/payload-automation.git
synced 2025-12-10 08:53:23 +00:00
Add migration document for v0.0.37 and update parameter field
🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
225
MIGRATION-v0.0.37.md
Normal file
225
MIGRATION-v0.0.37.md
Normal file
@@ -0,0 +1,225 @@
|
|||||||
|
# Migration Guide: v0.0.36 to v0.0.37
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Version 0.0.37 introduces significant refactoring and cleanup changes focused on simplifying the plugin architecture and removing unused features. This version removes several deprecated components and consolidates trigger handling.
|
||||||
|
|
||||||
|
## Breaking Changes
|
||||||
|
|
||||||
|
### 1. Removed Components and Files
|
||||||
|
|
||||||
|
The following components and modules have been completely removed:
|
||||||
|
|
||||||
|
#### Components
|
||||||
|
- `TriggerWorkflowButton` - Manual workflow triggering component
|
||||||
|
- `WorkflowExecutionStatus` - Workflow execution status display component
|
||||||
|
|
||||||
|
#### Plugin Modules
|
||||||
|
- `init-global-hooks.ts` - Global hook initialization (functionality moved to main plugin)
|
||||||
|
- `init-step-tasks.ts` - Step task initialization (functionality integrated elsewhere)
|
||||||
|
- `init-webhook.ts` - Webhook initialization (functionality removed)
|
||||||
|
- `init-workflow-hooks.ts` - Workflow hook initialization (functionality moved to main plugin)
|
||||||
|
|
||||||
|
#### Triggers
|
||||||
|
- `webhook-trigger.ts` - Webhook trigger support has been removed
|
||||||
|
- `cron-trigger.ts` - Cron/scheduled trigger support has been removed
|
||||||
|
- `cron-scheduler.ts` - Cron scheduling system has been removed
|
||||||
|
|
||||||
|
#### Tests
|
||||||
|
- `webhook-triggers.spec.ts` - Webhook trigger integration tests
|
||||||
|
|
||||||
|
### 2. Cron/Scheduled Workflows Removal
|
||||||
|
|
||||||
|
Cron trigger functionality has been completely removed from the plugin. If you were using cron triggers in your workflows:
|
||||||
|
|
||||||
|
**Migration Path:**
|
||||||
|
- Use external scheduling services like GitHub Actions or Vercel Cron
|
||||||
|
- Trigger workflows via webhook endpoints from external schedulers
|
||||||
|
- Implement custom scheduling in your application using libraries like `node-cron`
|
||||||
|
|
||||||
|
**Example with GitHub Actions:**
|
||||||
|
```yaml
|
||||||
|
name: Trigger Workflow
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 9 * * *' # Daily at 9 AM
|
||||||
|
jobs:
|
||||||
|
trigger:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Trigger Workflow
|
||||||
|
run: |
|
||||||
|
curl -X POST https://your-app.com/api/workflows/trigger/your-workflow-id
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Webhook Trigger Removal
|
||||||
|
|
||||||
|
Webhook triggers have been removed. If you were using webhook triggers:
|
||||||
|
|
||||||
|
**Migration Path:**
|
||||||
|
- Implement custom webhook endpoints in your PayloadCMS application
|
||||||
|
- Use collection or global hooks to trigger workflows based on document changes
|
||||||
|
- Create manual trigger endpoints using the workflow executor directly
|
||||||
|
|
||||||
|
### 4. Architecture Changes
|
||||||
|
|
||||||
|
#### ExecutorRegistry Removal
|
||||||
|
The `executorRegistry` singleton pattern has been removed. WorkflowExecutor instances are now created on-demand for each execution.
|
||||||
|
|
||||||
|
**What this means:**
|
||||||
|
- No shared state between workflow executions
|
||||||
|
- Each execution is completely independent
|
||||||
|
- Better memory management and isolation
|
||||||
|
|
||||||
|
#### Hook Registration Consolidation
|
||||||
|
Hook registration logic has been consolidated into the main plugin file:
|
||||||
|
- Collection hooks are now registered directly in `plugin/index.ts`
|
||||||
|
- Global hooks are handled through the new `plugin/global-hook.ts` module
|
||||||
|
- Simplified hook management with better TypeScript typing
|
||||||
|
|
||||||
|
## Non-Breaking Changes
|
||||||
|
|
||||||
|
### 1. Trigger Module Refactoring
|
||||||
|
|
||||||
|
Triggers have been reorganized into a dedicated `triggers/` directory with improved modularity:
|
||||||
|
|
||||||
|
- `triggers/collection-trigger.ts` - Collection-based triggers
|
||||||
|
- `triggers/global-trigger.ts` - Global document triggers
|
||||||
|
- `triggers/index.ts` - Trigger exports
|
||||||
|
- `triggers/types.ts` - Trigger type definitions
|
||||||
|
|
||||||
|
### 2. Field Helper Improvements
|
||||||
|
|
||||||
|
New `triggerField` helper function standardizes virtual field creation across all trigger modules:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
// Before (manual virtual field creation)
|
||||||
|
{
|
||||||
|
name: '__builtin_collection',
|
||||||
|
type: 'text',
|
||||||
|
admin: { hidden: true },
|
||||||
|
virtual: true,
|
||||||
|
access: { read: () => false, update: () => false }
|
||||||
|
}
|
||||||
|
|
||||||
|
// After (using helper)
|
||||||
|
triggerField('collection', {
|
||||||
|
type: 'text',
|
||||||
|
// helper handles virtual field setup automatically
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. TypeScript Improvements
|
||||||
|
|
||||||
|
- Replaced 'any' types with proper TypeScript types
|
||||||
|
- Added `CollectionAfterChangeHook` and `PayloadRequest` type usage
|
||||||
|
- Improved type safety throughout the codebase
|
||||||
|
|
||||||
|
### 4. Code Organization
|
||||||
|
|
||||||
|
#### New File Structure
|
||||||
|
```
|
||||||
|
src/
|
||||||
|
├── plugin/
|
||||||
|
│ ├── collection-hook.ts # Collection hook logic
|
||||||
|
│ ├── global-hook.ts # Global hook logic (new)
|
||||||
|
│ └── index.ts # Main plugin (consolidated)
|
||||||
|
├── triggers/ # Trigger modules (new directory)
|
||||||
|
├── fields/
|
||||||
|
│ └── parameter.ts # Moved from triggers/helpers.ts
|
||||||
|
```
|
||||||
|
|
||||||
|
#### ESLint Configuration
|
||||||
|
- Disabled `perfectionist/sort-object-types` and `perfectionist/sort-objects` rules
|
||||||
|
- Allows natural object property ordering without enforced alphabetical sorting
|
||||||
|
|
||||||
|
## Migration Steps
|
||||||
|
|
||||||
|
### 1. Update Imports
|
||||||
|
|
||||||
|
If you were importing removed components or modules, remove these imports:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
// Remove these imports - no longer available
|
||||||
|
import { TriggerWorkflowButton } from '@xtr-dev/payload-automation/client'
|
||||||
|
import { WorkflowExecutionStatus } from '@xtr-dev/payload-automation/client'
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Update Workflow Configurations
|
||||||
|
|
||||||
|
If your workflows used cron or webhook triggers, you'll need to modify them:
|
||||||
|
|
||||||
|
**Before:**
|
||||||
|
```javascript
|
||||||
|
{
|
||||||
|
trigger: {
|
||||||
|
type: 'cron',
|
||||||
|
schedule: '0 9 * * *'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**After:**
|
||||||
|
```javascript
|
||||||
|
{
|
||||||
|
trigger: {
|
||||||
|
type: 'collection', // Use collection or global triggers instead
|
||||||
|
collection: 'your-collection',
|
||||||
|
operation: 'create'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Replace Webhook Functionality
|
||||||
|
|
||||||
|
If you were using webhook triggers, implement custom webhook handling:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
// In your PayloadCMS config
|
||||||
|
export default buildConfig({
|
||||||
|
endpoints: [
|
||||||
|
{
|
||||||
|
path: '/trigger-workflow/:workflowId',
|
||||||
|
method: 'post',
|
||||||
|
handler: async (req) => {
|
||||||
|
const { workflowId } = req.params
|
||||||
|
// Implement your workflow triggering logic here
|
||||||
|
// Use the WorkflowExecutor directly if needed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Update Custom Components
|
||||||
|
|
||||||
|
If you built custom components using the removed ones as reference, update them to work with the new architecture.
|
||||||
|
|
||||||
|
## Benefits of This Release
|
||||||
|
|
||||||
|
1. **Simplified Architecture**: Consolidated plugin initialization reduces complexity
|
||||||
|
2. **Better Memory Management**: On-demand executor creation eliminates shared state issues
|
||||||
|
3. **Improved Type Safety**: Proper TypeScript typing throughout
|
||||||
|
4. **Reduced Bundle Size**: Removal of unused code reduces package size
|
||||||
|
5. **Better Maintainability**: Cleaner code organization and module structure
|
||||||
|
6. **More Reliable**: External scheduling is more robust than in-process cron jobs
|
||||||
|
|
||||||
|
## Testing Your Migration
|
||||||
|
|
||||||
|
After migrating:
|
||||||
|
|
||||||
|
1. **Test Existing Workflows**: Ensure collection and global triggers still work as expected
|
||||||
|
2. **Verify External Triggers**: Test any external webhook or scheduling implementations
|
||||||
|
3. **Check Custom Components**: Validate any custom UI components that interact with workflows
|
||||||
|
4. **Run Integration Tests**: Execute your test suite to catch any breaking changes
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
If you encounter issues migrating from v0.0.36 to v0.0.37:
|
||||||
|
|
||||||
|
1. Check that you're not using any of the removed components or features
|
||||||
|
2. Verify your workflow trigger types are supported (collection, global, manual)
|
||||||
|
3. Update any custom integrations that relied on removed modules
|
||||||
|
4. Consider the external scheduling alternatives for cron functionality
|
||||||
|
|
||||||
|
For additional support, please refer to the plugin documentation or open an issue in the project repository.
|
||||||
@@ -3,7 +3,7 @@ import type {Field} from "payload"
|
|||||||
|
|
||||||
export const parameter = (slug: string, field: {name: string} & Field): Field => ({
|
export const parameter = (slug: string, field: {name: string} & Field): Field => ({
|
||||||
...field,
|
...field,
|
||||||
name: 'parameter' + field.name.replace(/^\w/, c => c.toUpperCase()),
|
name: 'parameter' + field.name.replace(/^\w/, c => c.toUpperCase()) + Math.random().toString().replace(/\D/g, ''),
|
||||||
admin: {
|
admin: {
|
||||||
...(field.admin as unknown || {}),
|
...(field.admin as unknown || {}),
|
||||||
condition: (_, siblingData, __) => {
|
condition: (_, siblingData, __) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user