Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/xolvio/contentful-pipelines
Provides connivence methods for running Contentful migrations.
https://github.com/xolvio/contentful-pipelines
cicd-pipeline contentful
Last synced: about 2 months ago
JSON representation
Provides connivence methods for running Contentful migrations.
- Host: GitHub
- URL: https://github.com/xolvio/contentful-pipelines
- Owner: xolvio
- Created: 2020-06-17T17:03:22.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2023-01-07T04:47:15.000Z (almost 2 years ago)
- Last Synced: 2024-04-14T12:53:47.555Z (9 months ago)
- Topics: cicd-pipeline, contentful
- Language: TypeScript
- Homepage:
- Size: 769 KB
- Stars: 2
- Watchers: 3
- Forks: 0
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Contentful Pipelines
## How to Install
```
npm -D install @xolvio/contentful-pipelines
```## API
The `contentful pipelines` package exposes two commands which can be run either as a `package.json` script or executed in the code (runtime).
#### Migrations
Given directory structure:```
your-project
├── README.md
├── src
│ └── components
│ ├── Title
│ │ └── migrations
│ │ └── title
│ │ └── 1513695986378-create-title-type.js
│ └── Sections
│ └── migrations
│ └── sections
│ └── 1513695986378-create-title-type.js
├── package.json```
Running as `package.json` command:
```shell script
"migrations": "CONTENTFUL_MANAGEMENT_API= CONTENTFUL_SPACE_ID= CONTENTFUL_ENVIRONMENT_ID= xolvio-contentful-migrations src/components/Title src/components/Sections"
```Running from code:
```typescript
async function runMigrations(migrationPaths, options);
```| Parameter | Type | Default | Description |
| :--------------- | :----------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------------------------------------------------------------------------------------- |
| `migrationPaths` | `string[]` | [] | **Required**. List of paths to the components containing migration scripts. Paths should be relative to the project's root. |
| `options` | {
targetEnvironment: `string`,
spaceId: `string`,
contentfulManagementApiKey: `string`
} | `targetEnvironment = process.env.CONTENTFUL_ENVIRONMENT_ID`
`spaceId = process.env.CONTENTFUL_SPACE_ID`
`contentfulManagementApiKey = process.env.CONTENTFUL_MANAGEMENT_API` | Optional. Overwrites the `process.env` variables |```typescript
const { runMigrations } = require("@xolvio/contentful-pipelines");await runMigrations(["src/components/Title", "src/components/Sections"]);
```#### Creating the contentful environment
Running as `package.json` command:```shell script
"createQaEnvironmentFromProd": "CONTENTFUL_MANAGEMENT_API= CONTENTFUL_SPACE_ID= CONTENTFUL_SOURCE_ENVIRONMENT= CONTENTFUL_ENVIRONMENT_ID= xolvio-contentful-create-environment"
```Running from code:
```typescript
async function createEnvironmentFromSource(options);
```| Parameter | Type | Default | Description |
| :-------- | :----------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------- |
| `options` | {
sourceEnvironment: `string`,
targetEnvironment: `string`,
spaceId: `string`,
contentfulManagementApiKey: `string`
} | `sourceEnvironment=process.env.CONTENTFUL_SOURCE_ENVIRONMENT`
`targetEnvironment = process.env.CONTENTFUL_ENVIRONMENT_ID`
`spaceId = process.env.CONTENTFUL_SPACE_ID`
`contentfulManagementApiKey = process.env.CONTENTFUL_MANAGEMENT_API` | Optional. Overwrites the `process.env` variables |Example:
```typescript
await createEnvironmentFromSource();
```## Writing migration scripts
For executing the migrations we're using [Contentful Migrate Tool](https://github.com/deluan/contentful-migrate) so the migrations are written using their syntax. Using their CLI tool you can quickly create the migration scripts based on the existing Contentful Content Types.#### Useful scripts
Fetch existing entry data (used for initial data migration scripts)```typescript
module.exports.up = async (migration, { makeRequest }) => {
const existing = await makeRequest({
method: "GET",
url: `/entries/ENTRY_ID_TO_QUERY`,
}).catch(console.log);console.log("existing: ", JSON.stringify(existing.fields));
};
```Create contentful entry from within the contentful migration script:
```typescript
module.exports.up = async (migration, { makeRequest }) => {
await makeRequest({
method: "PUT",
url: `/entries/NEW_ENTRY_ID`,
data: EXISTING_FIELDS_FROM_SNIPPET_ABOVE,
headers: {
"X-Contentful-Content-Type": "CONTENT_TYPE_ID",
},
});
};
```
## TODO
- CLI for running migrations for all of the components listed in the package.json