name: Git Sync
type: plugin
slug: git-sync
version: 2.3.2
description: Allows to synchronize portions of Grav with Git Repositories (GitHub, BitBucket, GitLab)
icon: git
author:
  name: Trilby Media, LLC
  email: hello@trilby.media
  url: http://trilby.media
homepage: http://trilby.media
keywords: grav, plugin, git, sync, github, bitbucket, gitlab
issues: https://github.com/trilbymedia/grav-plugin-git-sync/issues
docs: https://github.com/trilbymedia/grav-plugin-git-sync
license: MIT

dependencies:
- { name: grav, version: '>=1.6.0' }
- { name: form, version: '>=2.16.3' }

form:
  validation: strict
  fields:
    Basic:
      type: section
      title: Basic Settings
      underline: true

    enabled:
      type: toggle
      label: Plugin Status
      highlight: 1
      default: 0
      options:
        1: Enabled
        0: Disabled
      validate:
        type: bool

    folders:
      type: select
      multiple: true
      label: Folders to Sync
      classes: fancy
      description: Removing folders after they have been synced may cause undesired results.
      default:
        - pages
      options:
        - pages
        - themes
        - plugins
        - config
        - data
      selectize:
        create: true
      validate:
        type: commalist

    Sync:
      type: section
      title: Automatic Synchronization Settings
      underline: true

    SyncNotice:
      type: hidden
      markdown: true
      text: |
        ! To improve the speed of saving pages you can disable automatic sync. Then, changes to a page will not be sent to the remote repository on every save. To sync your changes to the repository tap the GitSync button (<i class="fa fa-git"></i>) in the top left of the Administration Panel, or use the below Scheduler option to add the GitSync Syncronization Job to the Scheduler (<strong>Grav 1.6 required</strong>).

    sync.on_save:
      type: toggle
      label: Sync on Page Save
      help: Sync with the remote directory when a page is saved through the admin
      default: 1
      highlight: 1
      options:
        1: PLUGIN_ADMIN.YES
        0: PLUGIN_ADMIN.NO
      validate:
        type: bool

    sync.on_delete:
      type: toggle
      label: Sync on Page Delete
      help: Sync with the remote directory when a page is deleted through the admin
      default: 1
      highlight: 1
      options:
        1: PLUGIN_ADMIN.YES
        0: PLUGIN_ADMIN.NO
      validate:
        type: bool

    sync.on_media:
      type: toggle
      label: Sync on Media Changes
      help: Sync with the remote directory when a media is uploaded or deleted through the admin immediately (instead of only syncing when the page is saved)
      default: 1
      highlight: 1
      options:
        1: PLUGIN_ADMIN.YES
        0: PLUGIN_ADMIN.NO
      validate:
        type: bool

    sync.cron_enable:
      type: toggle
      label: Add Sync to Scheduler
      help: Add GitSync Job to the Scheduler so it can automatically perform synchronization at the given time
      default: 0
      highlight: 1
      options:
        1: PLUGIN_ADMIN.YES
        0: PLUGIN_ADMIN.NO
      validate:
        type: bool

    sync.cron_at:
      type: cron
      label: Run Sync at
      help: When should the Scheduler run the automatic GitSync synchronization job
      default: '0 12,23 * * *'

    Repo:
      type: section
      title: Git Repository Settings
      underline: true

    local_repository:
      type: hidden
      multiple: false
      size: medium
      label: Local Repository Path

    repository:
      type: text
      label: Git Repository
      placeholder: https://github.com/user/repository.git

    no_user:
      type: toggle
      label: User not required
      highlight: 0
      default: 0
      options:
        1: Enabled
        0: Disabled
      description: With this setting enabled, the user can be left blank and it will be ignored from the authentication. Useful when only needing access tokens `token@host` rather than `user:password@host`

    user:
      type: text
      label: Git User
      placeholder: Username, not email
      autocomplete: off

    password:
      type: enc-password
      label: Git Password or Token
      placeholder: Your Git Password or Token
      description: Enter your password or token to encrypt and securely store it, then save the settings. It will not show up here for security reasons.
      autocomplete: off

    webhook:
      type: text
      label: Repository Web Hook URL
      placeholder: /_git-sync
      data-default@: '\Grav\Plugin\GitSyncPlugin::generateRandomWebhook'

    webhook_enabled:
      type: toggle
      label: Web Hook Secret
      highlight: 1
      default: 0
      options:
        1: Enabled
        0: Disabled
      description: With this setting enabled, only authorized webhook calls will be able to trigger a synchronization (recommended)

    webhook_secret:
      type: text
      label: Repository Web Hook Secret
      placeholder: Your Web Hook Secret
      data-default@: '\Grav\Plugin\GitSyncPlugin::generateWebhookSecret'
      description: You can either use this randomly generated string or enter your own secret. <br /> **Bitbucket** does not yet support Webhook Secrets.
      markdown: true

    Advanced:
      type: section
      title: Advanced Git Settings
      underline: true

    branch:
      type: text
      default: master
      label: Local Branch
      placeholder: master

    remote.name:
      type: text
      default: origin
      label: Remote Name
      placeholder: origin

    remote.branch:
      type: text
      default: master
      label: Remote Branch
      placeholder: master

    git.author:
      type: select
      default: gituser
      label: Commits Author
      options:
        gituser: Use Git User Name
        gitsync: Use GitSync Committer Name
        gravuser: Use Grav User Name
        gravfull: Use Grav User Full Name

    git.message:
      type: text
      default: (Grav GitSync) Automatic Commit
      label: Commit message
      placeholder: (Grav GitSync) Automatic Commit
      help: You can use {{pageTitle}} or {{pageRoute}} in your message as placeholders for the title or route of the page being saved

    git.name:
      type: text
      default: GitSync
      label: Committer Name
      placeholder: GitSync

    git.email:
      type: text
      default: git-sync@trilby.media
      label: Committer Email
      placeholder: git-sync@trilby.media

    git.bin:
      type: text
      default: git
      label: Git Binary Path
      help: If the default `git` command doesn't work on your machine or if you want to specify a custom path, do it in here
      placeholder: /usr/bin/git

    git.ignore:
      type: textarea
      label: Git Ignore
      help: Add custom git ignore rules to go along with GitSync. One per line
      rows: 6
      placeholder: |
        node_modules
        /.idea

    git.private_key:
      type: text
      label: Private SSH Key
      placeholder: ~/.ssh/id_rsa
      markdown: true
      description: >
        In order to be able to sparse-checkout and push changes, it is expected you have an ssh-key configured for accessing the repository. This is usually found under `~/.ssh` and it needs to be configured for the same user that runs the web-server. <br />
        <br />
        Point it to the secret (not the public) and make also sure you have strict permissions to the file. (`-rw-------`). <br />
        <br />
        Example: `private_key: /home/www-data/.ssh/id_rsa`<br />
        <br />
        **IMPORTANT**: SSH keys with passphrase are __NOT__ supported. To remove a passphrase, run the `ssh-keygen -p` command and when asked for the new passphrase leave blank and return.

    logging:
      type: toggle
      default: 0
      label: Log Git Commands
      help: Logs git commands. Useful to debug and troubleshoot git execution
      highlight: 0
      options:
        1: PLUGIN_ADMIN.YES
        0: PLUGIN_ADMIN.NO
      validate:
        type: bool

    Actions:
      type: section
      title: Actions
      underline: true

    _wizard:
      type: git-wizard
      label: Text Variable
      help: Text to add to the top of a page