Inclure les données Git dans Deploy

Cet article expliquera comment inclure des informations de Git, telles que le nom de la branche ou le hachage de validation, dans le code du robot. Cela est nécessaire pour utiliser de telles informations dans le code du robot, telles que l’impression du hachage de validation et du nom de la branche lorsque le robot démarre.

Note

Git doit être dans le path pour que cela fonctionne. Cela devrait être activé par défaut lors de l’installation de Git <https://git-scm.com/downloads>`__.

Nom de la branche de déploiement

Cet exemple utilise git rev-parse pour extraire les données du nom de la branche actuelle. La commande Git utilisée pour cela est :

$ git rev-parse --abbrev-ref HEAD

Le drapeau --abbrev-ref indique à Git d’utiliser une version abrégée du nom du commit actuel sur lequel rev-parse agit. Lorsque HEAD est le commit le plus récent sur une branche, cela renverra le nom de cette branche.

Ensuite, créez une nouvelle tâche dans le fichier build.gradle qui exécutera la commande Git ci-dessus et écrivez-la dans un fichier du répertoire src/main/deploy. Par exemple, ce qui suit est un exemple de tâche nommé writeBranchName qui écrira le nom de la branche dans un fichier nommé branch.txt.

tasks.register("writeBranchName") {
   // Define an output stream to write to instead of terminal
   def stdout = new ByteArrayOutputStream()

   // Execute the git command
   exec {
      commandLine "git", "rev-parse", "--abbrev-ref", "HEAD"
      // Write to the output stream instead of terminal
      standardOutput = stdout
   }

   // Parse the output into a string
   def branch = stdout.toString().trim()

   // Create a new file
   new File(
      // Join project directory and deploy directory
      projectDir.toString() + "/src/main/deploy",
      // File name to write to
      "branch.txt"
   ).text = branch // Set the contents of the file to the variable branch
}

Cela enregistre une tâche Gradle qui utilise la commande Git ci-dessus, enregistre la sortie dans une variable, puis l’écrit dans un fichier. Comme il a été écrit dans le répertoire src/main/deploy, il sera inclus dans le fichier jar déployé sur le robot et accessible dans le code.

L’étape suivante consiste à faire dépendre la tâche de déploiement de la tâche que vous avez créée, afin qu’elle s’exécute automatiquement avant le déploiement du code. Cet exemple utilise le nom de tâche writeBranchName de l’exemple précédent, mais il doit être remplacé par le nom de la tâche dans votre build.gradle.

deploy.targets.roborio.artifacts.frcStaticFileDeploy.dependsOn(writeBranchName)

Déployer le hachage de validation

Semblable à l’exemple précédent, git rev-parse sera utilisé pour analyser le hachage de validation actuel. La commande Git utilisée pour cela est :

$ git rev-parse --short HEAD

Semblable à la commande Git précédente, rev-parse est utilisé pour trouver des informations sur le commit à HEAD. Cependant, au lieu d’utiliser --abbrev-ref pour trouver le nom de branche associé à ce commit, --short est utilisé pour trouver le hachage de commit à 7 caractères.

Note

Si vous souhaitez utiliser le hachage de commit complet au lieu de la version à 7 caractères, vous pouvez omettre le drapeau --short.

Ensuite, créez une tâche dans build.gradle qui exécute cette commande et écrit la sortie dans un fichier. C’est en grande partie le même que le premier exemple, sauf que la tâche est nommée writeCommitHash, la nouvelle commande Git est utilisée et elle est écrite dans commit.txt au lieu de branch.txt.

tasks.register("writeCommitHash") {
   def stdout = new ByteArrayOutputStream()

   exec {
     commandLine "git", "rev-parse", "--short", "HEAD"
     standardOutput = stdout
   }

   def commitHash = stdout.toString().trim()

   new File(
      projectDir.toString() + "/src/main/deploy",
      "commit.txt"
   ).text = commitHash
}

deploy.targets.roborio.artifacts.frcStaticFileDeploy.dependsOn(writeCommitHash)

Ignorer les fichiers générés avec Git

Étant donné que ces fichiers incluent des données déjà suivies par Git et sont régénérées à chaque déploiement de code, il est recommandé de ne pas suivre ces modifications avec Git en utilisant le gitignore <https://git-scm.com/docs/gitignore> `__ fichier. Ce fichier doit exister par défaut dans tout projet généré par l’extension WPILib VS Code. Vous trouverez ci-dessous un exemple qui continue d’utiliser les noms de fichiers ``branch.txt` et commit.txt :

src/main/deploy/branch.txt
src/main/deploy/commit.txt
...

Utilisation des fichiers déployés

In order to access files that were written to the deploy directory in code, you have to use the getDeployDirectory() method of the Filesystem class in Java, or the GetDeployDirectory() function of the frc::filesystem namespace in C++. Below is an example of opening both files from the previous examples:

Note

L’ouverture et la lecture des fichiers sont lents et ne doivent pas être effectuées pendant des méthodes périodiques. Étant donné que le fichier ne changera qu’au déploiement, il n’a besoin d’être lu qu’une seule fois.

File deployDir = Filesystem.getDeployDirectory();
File branchFile = new File(deployDir, "branch.txt");
File commitFile = new File(deployDir, "commit.txt");

Pour plus d’informations sur la façon d’interagir avec les objets fichier, consultez la documentation de la classe File.