Puede Jekyll usar un file de configuration de un repository diferente

Estoy usando Jekyll y GitHub Pages para crear documentation para proyectos que viven en repositorys separados que son parte de una count de organización en GitHub. Mi equipo ha decidido que es más lógico que los documentos vivan en cada repository junto con el código, por lo que utilizaremos una twig gh-pages en cada repository.

También estableceré un repository de gh-páginas por separado de la count de la organización para que sirva como página de destino. Me gustaría tener todos mis elementos de configuration de jekyll en vivo en este repository. ¿Qué debo poner en el file de configuration en cada uno de los repos para extraer con éxito todos los layouts, css / scss, etc. desde esta location central? ¿Esto es posible?

Aquí hay una representación visual

En pocas palabras , estoy tratando de tener un lugar donde pueda hacer cambios en los files de formatting del website en lugar de 6.

En las páginas de Github, puede usar resources de otro repository mediante el uso de submodules de git .

Esto funciona bien para _layouts y _sass , pero lamentablemente no para _includes . Esto debido al hecho de que, en Jekyll 2.x, no puede configurar la ruta de la carpeta _includes . Esto se ha confirmado en el maestro actual y estará disponible tan pronto como Jekyll 3 salga y lo usen las páginas de github.

Editar : con Jekyll 3, ahora puede configurar includes_dir: _mydir . Ver documentation para la configuration de Jekyll .

Una solución provisional puede ser combinar en los layouts hasta que pueda configurar _includes ruta. No tan limpio, pero, como sus templates están centralizadas, será fácil refactorizar.

Cómo

1 – crear un repository de resources

Agregar el repository de su organización como un submodule generará resources, publicación y páginas. No es una buena forma de hacerlo porque las publicaciones y las páginas estarán presentes en los blogs de tus proyectos.

La mejor manera es _includes sus resources ( _includes , _layouts , _sass , css ) en un repository dedicado en github.com/userName/resources .

En su _layouts/default.html , no olvide llamarlo css con:

 <link rel="stylesheet" href="{{ "/resources/css/main.css" | prepend: site.baseurl }}"> 

2 – Configuración del blog del proyecto

Cree un blog de proyecto sin files de resources y agregue el submodule de resources.

 git submodule add https://github.com/userName/resources.git 

Esto crea una carpeta de resources en tu repository.

Edite su _config.yml y agregue:

 layouts: /resources/_layouts sass: sass_dir: /resources/_sass 

Ahora jekyll serve , funciona.

3 – Flujo de trabajo de resources

Como sus resources se encuentran en un submodule, los cambios en una plantilla o file sass no se reflejarán en su blog automáticamente.

Para actualizar tu blog deberás hacer esto para todos tus blogs.

 git submodule update --remote git commit -a -m 'resources update' git push origin gh-pages 

Después de recibir retroalimentación de mi equipo, terminé haciendo lo siguiente:

  • crear un nuevo repository que sea la fuente del sitio de GH-Pages
  • agregue los repos de proyectos individuales como submodules de este repository
  • agregue una secuencia de commands que le indique a jekyll que extraiga contenido de carpetas específicas en los submodules y colóquelos en un directory de temperatura, luego use ese directory de temperatura como fuente de compilation

#remove docs-build-temp folder if it exists

rm -rf ./docs-build-temp

#make temp-content folder

mkdir ./docs-build-temp

#copy content from doc folder in submodules into temp-content folder

cp -R ./submodule1/doc ./docs-build-temp/newdir1

cp -R ./submodule2/doc ./docs-build-temp/newdir2

#tell jekyll the content source

bundle exec jekyll build -s ./docs-build-temp

La secuencia de commands funciona cuando se ejecuta localmente y en Travis CI *.

* Configuré la authentication ssh entre mi count de usuario en github y cada uno de los repositorys en travis para evitar el hecho de que todos ellos son privados. Parece estar funcionando bien hasta ahora.