Patience and the right tools@stefanjudisWays to handle content model changes
View Slide
Stefan JudisFrontend Developer, Occasional Teacher, Meetup Organizer❤ Open Source, Performance and Accessibility ❤@stefanjudis
NOBODY(!)GETS IT RIGHTTHE FIRSTTIME...
4WAYS TO SURVIVESHARE&REUSEANALYSE EVOLVE
5WAYS TO SURVIVESHARE&REUSEANALYSE EVOLVE
github.com/contentful/contentful-migration
github.com/contentful/contentful-migrationPROGRAMMATICCONTENT MODELCHANGES
MIGRATION CLICONTENT TYPE OPERATIONSCreate a content type0102030405Delete a content typeEdit a content typeCreate/edit/delete fieldsChange a field ID
Transform an entry in place0102 Derive an entry from anotherMIGRATION CLICONTENT TRANSFORMATIONS
MIGRATION CLIADVANTAGESRepeatable01020304Can be kept in VCIncludes sanity checksPerfect for CI
speakerdeck.com/stefanjudis/patience-and-the-right-tools-ways-to-approach-content-modellingyoutu.be/eX2FzlA-QnQ
13How toDISCARD TEST PREVIEWa migration?
Sandbox Environments
CREATE MULTIPLEVERSIONS OF A SPACECHANGE/TEST THEM INISOLATION
cdn.contentful.com/spaces/{space_id}/entriesconst contentful = require('contentful');const client = contentful.createClient({space: '',accessToken: ''});client.getEntries();
cdn.contentful.com/spaces/{space_id}/environments/{environment_id}/entriesconst contentful = require('contentful');const client = contentful.createClient({space: '',environment: '',accessToken: ''});client.getEntries();
COPIEDContent types Entries AssetsLocales UI-extensions Saved viewsSHAREDUsers & space membershipsRoles & permissionsAPI keys Web hooks
youtu.be/7DE6PQ3tPyI
21Common use casesLOCALDEVELOPMENTSTAGING/QACONTINUOUSINTEGRATION
22Common use casesLOCALDEVELOPMENTSTAGING/QACONTINUOUSINTEGRATION
24Common use casesLOCALDEVELOPMENTSTAGING/QACONTINUOUSINTEGRATION
FEATURE SANDBOXES
FEATURE SANDBOXESENVIRONMENT SANDBOXES
ENVIRONMENT SANDBOXESFEATURE SANDBOXESCI SANDBOXES
www.contentful.com/r/knowledgebase/cms-as-code/www.contentful.com/developers/docs/concepts/multiple-environments/
www.contentful.com/r/knowledgebase/cms-as-code/www.contentful.com/developers/docs/concepts/multiple-environments/BUT HOWTO DO THIS?
migrations0_0_4.js0_0_5.js0_0_6.js0_0_7.js0_0_8.js
0_0_8.jsmodule.exports = function runMigration(migration) {const post = migration.editContentType("post");post.createField("rating").name("Rating").type("Number").required(false);return;};
- run:name: Preparing environment for testingcommand: |. venv/bin/activatepython scripts/migration_prep.py "CI_$CIRCLE_BRANCH"scripts/migrate.js $SPACE_ID "CI_$CIRCLE_BRANCH" $MANAGEMENT_API_KEY
- run:name: Preparing environment for testingcommand: |. venv/bin/activatepython scripts/migration_prep.py "CI_$CIRCLE_BRANCH"scripts/migrate.js $SPACE_ID "CI_$CIRCLE_BRANCH" $MANAGEMENT_API_KEYclient = contentful_management.Client(MANGEMENT_API_KEY)environment = client.environments(SPACE_ID).create(TESTING_ENV, {"name": TESTING_ENV})
- run:name: Preparing environment for testingcommand: |. venv/bin/activatepython scripts/migration_prep.py "CI_$CIRCLE_BRANCH"scripts/migrate.js $SPACE_ID "CI_$CIRCLE_BRANCH" $MANAGEMENT_API_KEYconst {default: runMigration} = require('contentful-migration/built/bin/cli');await runMigration({ /* ... */ });client = contentful_management.Client(MANGEMENT_API_KEY)environment = client.environments(SPACE_ID).create(TESTING_ENV, {"name": TESTING_ENV})
Keep code andcontent model in sync
Demo
Feedback?Ideas?
Integrate your content modelinto your delivery pipeline
Thanks.@stefanjudisSlidesctfl.io/ci-environmentsExamplectfl.io/ci-environments-example