Socket
Socket
Sign inDemoInstall

strapi-plugin-config-sync

Package Overview
Dependencies
6
Maintainers
1
Versions
39
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    strapi-plugin-config-sync

CLI & GUI for syncing config data across environments.


Version published
Weekly downloads
6.5K
decreased by-8.16%
Maintainers
1
Created
Weekly downloads
 

Readme

Source

Strapi config-sync plugin

CLI & GUI for syncing config data across environments.

NPM Version Monthly download on NPM CI build status codecov.io

✨ Features

  • CLI (config-sync CLI for syncing the config from the command line)
  • GUI (Settings page for syncing the config in Strapi admin)
  • Partial sync (Import or export only specific portions of config)
  • Exclude configs (Exclude specific config from the sync)

⏳ Installation

Install the plugin in your Strapi project.

# using yarn
yarn add strapi-plugin-config-sync

# using npm
npm install strapi-plugin-config-sync --save

Add the export path to the watchIgnoreFiles list in the config/admin.js file. This way your app won't reload when you export the config in development.

config/admin.js:
module.exports = ({ env }) => ({
  // ...
  watchIgnoreFiles: [
    '**/config-sync/files/**',
  ],
});

After successful installation you have to rebuild the admin UI so it'll include this plugin. To rebuild and restart Strapi run:

# using yarn
yarn build --clean
yarn develop

# using npm
npm run build --clean
npm run develop

The Config Sync plugin should appear in the Plugins section of Strapi sidebar after you run app again.

Enjoy 🎉

🖐 Requirements

Complete installation requirements are the exact same as for Strapi itself and can be found in the Strapi documentation.

Supported Strapi versions:

  • Strapi 4.0.0 (recently tested)
  • Strapi ^4.x
  • Strapi ^3.4.x (use strapi-plugin-config-sync@0.1.6)

(This plugin may work with older Strapi versions, but these are not tested nor officially supported at this time.)

We recommend always using the latest version of Strapi to start your new projects.

💡 Motivation

In Strapi we come across what I would call config types. These are models of which the records are stored in our database, just like content types. Though the big difference here is that your code ofter relies on the database records of these types.

Having said that, it makes sense that these records can be exported, added to git, and be migrated across environments. This way we can make sure we have all the data our code relies on, on each environment.

Examples of these types are:

  • Admin roles (admin::role)
  • User roles (plugin::users-permissions.role)
  • Admin settings (strapi::core-store)
  • I18n locale (plugin::i18n.locale)

This plugin gives you the tools to sync this data. You can export the data as JSON files on one env, and import them on every other env. By writing this data as JSON files you can easily track them in your version control system (git).

With great power comes great responsibility - Spider-Man

🔌 Command line interface (CLI)

Add the config-sync command as a script to the package.json of your Strapi project:

"scripts": {
  // ...
  "cs": "config-sync"
},

You can now run all the config-sync commands like this:

# using yarn
yarn cs --help

# using npm
npm run cs --help

⬆️ Import ⬇️ Export

Command: import Alias: i

Command: export Alias: e

These commands are used to sync the config in your Strapi project.

Example:

# using yarn
yarn cs import
yarn cs export

# using npm
npm run cs import
npm run cs export
Flag: --yes -y

Use this flag to skip the confirm prompt and go straight to syncing the config.

[command] --yes
Flag: --type -t

Use this flag to specify the type of config you want to sync.

[command] --type user-role
Flag: --partial -p

Use this flag to sync a specific set of configs by giving the CLI a comma-separated string of config names.

[command] --partial user-role.public,i18n-locale.en

↔️ Diff

Command: diff | Alias: d

This command is used to see the difference between the config as found in the sync directory, and the config as found in the database.

Example:

# using yarn
yarn cs diff

# using npm
npm run cs diff

🖥️ Admin panel (GUI)

This plugin ships with a settings page which can be accessed from the admin panel of Strapi. On this page you can pretty much do the same as you can from the CLI. You can import, export and see the difference between the config as found in the sync directory, and the config as found in the database.

Pro tip: By clicking on one of the items in the diff table you can see the exact difference between sync dir and database in a git-style diff viewer.

Config diff in admin

⌨️ Usage / Workflow

This plugin works best when you use git for the version control of your Strapi project. When you do so, with this plugin you are able to version control your config data through files.

The following workflows are assuming you're using git.

Local development

When building a new feature locally for your Strapi project you'd use the following workflow:

  • Build the feature.
  • Export the config.
  • Commit and push the files to git.

Deployment

When deploying the newly created feature - to either a server, or a co-worker's machine - you'd use the following workflow:

  • Pull the latest file changes to the environment.
  • (Re)start your Strapi instance.
  • Import the config.

Production deployment

When deploying to production you'd use the same deployment workflow as described above. But before you do, you have to take some extra precautions to ensure no data will be lost:

  • Run yarn cs diff to verify there are no config changes that could be overwritten.
  • If there have been changes made;
    • Export these before you pull the new config.
    • Commit and push the exported files to git.
    • If needed; merge into the branch you were about to pull.
  • Continue with the regular deployment workflow.

Try to avoid making config changes directly on production. You wouldn't want to change something like API permissions (roles) on production without it being in your version control.

🚀 Config types

Admin role

Prefix: admin-role | UID: code | Query string: admin::role

User role

Prefix: user-role | UID: type | Query string: plugin::users-permissions.role

Core store

Prefix: core-store | UID: key | Query string: strapi::core-store

I18n locale

Prefix: i81n-locale | UID: code | Query string: plugin::i18n.locale

🔍 Naming convention

All the config files written in the sync directory have the same naming convention. It goes as follows:

[config-type].[config-name].json
  • config-type - Corresponds to the prefix of the config type.
  • config-name - The unique identifier of the config.
    • For core-store config this is the key value.
    • For user-role config this is the type value.
    • For admin-role config this is the code value.
    • For i18n-locale config this is the code value

🔧 Settings

The settings of the plugin can be overridden in the config/plugins.js file. In the example below you can see how, and also what the default settings are.

config/plugins.js:
module.exports = ({ env }) => ({
  // ...
  'config-sync': {
    enabled: true,
    config: {
      destination: "extensions/config-sync/files/",
      minify: false,
      importOnBootstrap: false,
      include: [
        "core-store",
        "user-role"
        "admin-role"
        "i18n-locale"
      ],
      exclude: [
        "core-store.plugin_users-permissions_grant"
      ],
    },
  },
});
PropertyTypeDescription
destinationstringThe path for reading and writing the sync files.
minifyboolWhen enabled all the exported JSON files will be minified.
importOnBootstrapboolAllows you to let the config be imported automaticly when strapi is bootstrapping (on strapi start). This setting should only be used in production, and should be handled very carefully as it can unintendedly overwrite the changes in your database. PLEASE USE WITH CARE.
includearrayTypes you want to include in the syncing process. Allowed values: core-store, user-role, admin-role, i18n-locale.
excludearraySpecify the names of configs you want to exclude from the syncing process. By default the API tokens for users-permissions, which are stored in core_store, are excluded. This setting expects the config names to comply with the naming convention.

🤝 Contributing

Feel free to fork and make a pull request of this plugin. All the input is welcome!

⭐️ Show your support

Give a star if this project helped you.

🌎 Community support

📝 Resources

FAQs

Last updated on 09 Dec 2021

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc