Enriching GitHub Repositories with Topics Using Terraform

Introduction :-

Managing #GitHub repositories efficiently, especially in large organizations, can be a daunting task. One key aspect of effective repository #management is the ability to categorize and label repositories with relevant topics. Topics help in #discovering and organizing repositories, making it easier for your teams to #collaborate and find the right codebase. However, manually adding topics to numerous repositories can be time-consuming and error-prone. This is where #Terraform, the popular #infrastructure-as-code tool, comes to the rescue.

Prerequisites:-

  • #Github repository with full access.

  • #Terraform installed on your local machine.

Step-1 :- Create a folder named github-topics in your home directory.

Step-2 :- Within the github topics folder create a main.tf file and copy the below code into main.tf

#main.tf
data "github_repository" "repository" {
  full_name = var.repository
}

data "github_branch" "development" {
  repository = var.repository
  branch     = var.branch
}
resource "null_resource" "github_topics" {
  triggers = {
    repo_name = "${data.github_repository.repository.full_name}"
  }

  provisioner "local-exec" {
    command = <<-EOT
      GITHUB_TOKEN="${var.token}"
      REPO_NAME="${data.github_repository.repository.full_name}"

    curl -X PUT \
      -H "Authorization: token $GITHUB_TOKEN" \
      -H "Accept: application/vnd.github.mercy-preview+json" \
      -d '{
        "names": ["terraform", "infrastructure-as-code", "circleci", "aws", "kubernetes","argo", "cognito", "vcluster", "kubecost", "kyverno", "kubescape"]
      }' \
      "https://api.github.com/repos/$REPO_NAME/topics"
    EOT
  }
}

step-3 :- create a variable.tf file for storing the variables for main.tf file.

#variable.tf 

variable "repository" {
  type = string
  description = "name of the github repositroy"
  default  = "mahira"
}

variable "branch" {
  type = string
  description = "name of the github repository branch"
  default  = "mahira-medium"
}

variable "token" {
  type = string
  description = "github token"
  default  = "*************************"
}
#provider.tf
terraform {
  required_providers {
    github = {
     source = "integrations/github"
     version = "5.29.0"
    }
  }
}

Step-4 :- Set the appropriate values for the variables and apply the above configuration.

Step-5 :- once the #deployment is done, go to your github repository and check whether the topics are being added or not.

Conclusion :-

Incorporating #Terraform into your #GitHub repository management workflow is a powerful way to enhance #organization and productivity. With the ability to automate the addition of #topics to your repositories, you save time, reduce the risk of errors, and ensure that your codebase is optimally organized for efficient #collaboration. Remember that this is just one example of how #Terraform can be leveraged to improve your #development workflows. Feel free to explore and adapt Terraform for more #GitHub management tasks to further enhance your development process.

0
Subscribe to my newsletter

Read articles from Mahira Technology Private Limited directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Mahira Technology Private Limited
Mahira Technology Private Limited

A leading tech consulting firm specializing in innovative solutions. Experts in cloud, DevOps, automation, data analytics & more. Trusted technology partner.