In this article, I will explain how I solved a large git repository clone issue we had during our continuous integration job.
The fact is that we have a Cordova project using multiple plugins. Most of these plugins are stored in git repositories and some of them or their dependencies are really large. This can slow our job execution or even make it fail (due to timeout) as it depends on our internet connection..
I decided to find a way to “cache” repository so the build jobs wouldn’t use internet connection each time they need to clone the plugin repository without changing plugins files.
The solution I found was to use our locally hosted gitlab as a mirror for the large repository and force git to use it using the git configuration “insteadOf”
I created a new repository in our gitlab to host the large plugin repository and I cloned it’s content from remote location once. I then added the following configuration for git inside the CI job runner machine:
git config --global url."<url of local gitlab mirror>".insteadOf "<url of primary repository>"
Now I just need to regularly update the local mirror with a simple cron job for example. The Gitlab Enterprise Edition can also automatically update it’s repository from remote origin.
The result is just impressive : one job that could take more than an hour before of large repository clone will now execute in less than 10min.
I am running a bilingual blog and I have recently discover Yarakuzen. This is an innovative tool for text translation and they offer a free plan for personnal use. They also have premium plans for an extensive use.
This app is not like other translation tool but offers the ability to adjust translation as I want and save them. The more I translate my content, the more it become accurate and customized for my taste.
So to use it on my wordpress blog, I had to create an account here and generate and API key. I also downloaded the Yarakuzen wordpress plugin than is perfectly integrated to WordPress.
The plugin will ask for a public and a private key I get from my Yarakuzen account :
Now, when I start a new post, I see a new box from the Yarakuzen plugin, it allows me to send my post content to Yarakuzen for translation.
This is how I use it :
- I create my first post in any language (say english) and save it
- I create another post for translation and paste content from source post
- I send translation to Yarakuzen through the box and when ready
- I click the “Retrieve translation” button from the Yarakuzen box
This will replace my content with the translated text and it will also keep medias so I don’t need to add them again in the translation.
This is a service that is really helpful for me and I will use really often. You can learn more about Yarakuzen and their plans and services in yarakuzen.com
Working on a small package Atom lately, I started to configure Travis CI to automatically launch my builds and tests.This allows me to ensure that the future push and pull requests of my project do not break anything. As this is an opensource project, I can use Github free TravisCI services.
My repository is installed on Github and I started to activate webhook Travic CI in parameters. To do this, go to Settings> Webhooks & Services> Travic CI and activate this service by clicking edit button.
You must now set Travis CI. My Travis CI account is linked to my Github account so I can find the list of my repository and I chose the one that is concerned.
Finally, to start the work of travis, add a .travis.yml file in the root of the project. This file contains the information necessary for Travis and configuration for actions to run. Regarding the Atom packages, a repository has been deployed to easily set up Travis configurations. Just go to https://github.com/atom/ci/blob/master/.travis.yml and use it.
When I makes new push on the repository, Travis will now launch automatically builds and keep me informed in case of problems. To top it all, I can have the small button indicating the status of the repository.It can easily be integrated on a web page or on my project README
For Atom packages, it is also possible to use other services or as AppVeyor Circle. The details for these are also available on the directoryhttps://github.com/atom/ci/
Et voila, your turn now!