Update TemplatesΒΆ

One of the big advantages of Flexlate is the ease of bringing updates to the template back to your project. Flexlate creates real Git merge conflicts, so you can use your preferred merge tool to resolve them. Flexlate saves the resolved conflicts in Git branches, so you won’t have to resolve the same conflicts again on the next update.

Updating TemplatesΒΆ

The fxt update command updates the template(s) to the latest version allowed. It can also be used to update the data with or without updating the version.

    $ cat answer1.txt
2.7
$ fxt update
 Syncing changes in flexlate configs to output

question1? Format: yaml


The second question
question2? Format: float
50

    create  answer1.txt



    create  temp.txt


βœ” Successfully updated template output

$ cat answer1.txt
50.0
some new footer

By default, it will prompt for all the questions, using the saved answers as defaults. You can change any data that you want during the update process.

Updating without PromptsΒΆ

If you want to use the existing data and skip all prompts, you can pass the --no-input flag or -n for short:

fxt update -n

Updating specific TemplatesΒΆ

You can update specific templates by passing the names of the template sources you want to update, for example:

fxt update copier-simple-example

Checking for UpdatesΒΆ

The fxt check command checks for updates to the template(s). It displays them in a tabular format if there are updates available.

    $ fxt check
βœ” All templates up to date

$ fxt config target copier-simple-example

$ fxt check
πŸ“ Some templates are not up to date. Run fxt update to update
┏━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Template Name         ┃ Current Version          ┃ Latest Version            ┃
┑━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
β”‚ copier-simple-example β”‚ c7e1ba1bfb141e9c577e7c2… β”‚ f3fa2c9526c12b3011e0a261… β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

For scripting purposes, it returns code 0 if there are no updates available, and 1 if there are:

if ! fxt check; then
  echo "Need to update template";
else
  echo "No updates to template needed";
fi;

Change Target VersionΒΆ

Normally, the target version in a template source will be set to null, meaning fxt update will always update to the newest version. If a template source was added with the --version flag, then it will have that version set as the target version. When the target version is specified for a template source, fxt update will not update beyond that version.

To remove the target version, use the fxt config target command to remove the target version.

    $ fxt init-from https://github.com/nickderobertis/copier-simple-example --version c7e1ba1bfb141e9c577e7c21ee4a5d3ae5dde04d
 Initializing flexlate project with default add mode local and user=False in 
/tmp/tmp9u8snrur
β ‹  Initializing...
β ‹  Initializing...
β ™  Initializing...

βœ” Finished initializing flexlate project
 Adding template source...
 Adding template source copier-simple-example from 
https://github.com/nickderobertis/copier-simple-example
β ‹
β ™
 Sucessfully added template source copier-simple-example
β Ή
β Ή

 Applying template copier-simple-example to /tmp/tmp9u8snrur
 Updating 1 applied templates

question1? Format: yaml
my answer

The second question
question2? Format: float
10

    create  my answer.txt



    create  temp.txt


βœ” Successfully updated template output
βœ” Successfully applied template copier-simple-example to /tmp/tmp9u8snrur


$ cd project

$ cat flexlate.json | grep target
      "target_version": "c7e1ba1bfb141e9c577e7c21ee4a5d3ae5dde04d",

$ fxt config target copier-simple-example

$ cat flexlate.json | grep target
      "target_version": null,

$ cat 'my answer.txt'
10.0
$ fxt update --no-input
 Syncing changes in flexlate configs to output

    create  my answer.txt



    create  temp.txt


βœ” Successfully updated template output

$ cat 'my answer.txt'
10.0
some new footer

Get Automated PRs with Template UpdatesΒΆ

Flexlate has official companion Github Actions that can automate using Flexlate. The Flexlate Update Action can be used to help automatically get PRs for template updates.

If there is a merge conflict in the changes, it will open a separate PR to resolve the conflicts, allowing you to resolve them in Github’s web editor.

Follow the user guide on CI automation to hook up this workflow and other supporting workflows.

Next StepsΒΆ

In order to keep updating and not have to resolve the same merge conflicts repeatedly, we need to save the Flexlate history.