diff --git a/home/.chezmoi.yaml.tmpl b/home/.chezmoi.yaml.tmpl index 4fde999d..4da45932 100644 --- a/home/.chezmoi.yaml.tmpl +++ b/home/.chezmoi.yaml.tmpl @@ -140,6 +140,11 @@ data: docker: doRegion: nyc1 domain: "{{ $domain }}" + gitlab: + glurl: "https://gitlab.com/" + runnerDescription: "Docker executor" + runnerImage: "alpine:latest" + runnerTags: "" headless: {{ $headless }} home: "{{ .chezmoi.homeDir }}" homeParentFolder: "{{ if eq .chezmoi.os "linux" }}/home{{ else if eq .chezmoi.os "darwin" }}/Users{{ else }}C:\Users{{ end }}" diff --git a/home/.chezmoiscripts/universal/run_onchange_after_46-gitlab-runner.sh.tmpl b/home/.chezmoiscripts/universal/run_onchange_after_46-gitlab-runner.sh.tmpl new file mode 100644 index 00000000..2afac503 --- /dev/null +++ b/home/.chezmoiscripts/universal/run_onchange_after_46-gitlab-runner.sh.tmpl @@ -0,0 +1,72 @@ +{{- if eq .host.distro.family "linux" -}} +#!/usr/bin/env bash +# @file GitLab Runner Configuration +# @brief Registers GitLab Runner with the given GitLab instance +# @description +# This script registers the machine where the script is run as a runner with the given GitLab instance or with the SaaS GitLab +# if no instance information is provided. +# The script configures the runner to use Docker Executor. Refer [this page](https://docs.gitlab.com/runner/executors/docker.html) for more details. +# +# ## Secrets +# +# The following chart details the secret(s) that are needed to configure the runner: +# +# | Secret | Description | +# |------------------------|------------------------------------------------------------| +# | `GITLAB_RUNNER_TOKEN` | The token generated when the runner was created in GitLab | +# +# For more information about storing secrets like SSH keys and API keys, refer to our Secrets documentation provided below +# +# ## Configuration Variables +# +# The following chart details the input variable(s) that are used to determine the configuration of the runner: +# +# | Variable | Description | +# |---------------------|-------------------------------------------------------------| +# | `glurl` | The URL of the Gitlab instance to associate the Runner with | +# | `runnerImage` | Provide an image to use to configure the runner | +# | `runnerDescription` | Description of this runner | +# | `runnerTags` | Comma separated list of tags for this runner | +# +# ## Links +# +# * [Secrets / Environment variables documentation](https://install.doctor/docs/customization/secrets) + +{{ includeTemplate "universal/profile" }} +{{ includeTemplate "universal/logg" }} + +### Run logic if gitlab-runner is installed +if command -v gitlab-runner > /dev/null; then + ### Check if Runner Token value is present + if [ -v $GITLAB_RUNNER_TOKEN ]; then + if [ -n {{ .host.gitlab.runnerTags }} ]; then + ### Registering runner + logg info 'Registering GitLab Runner with the provided tags' + gitlab-runner register \ + --non-interactive \ + --url {{ .host.gitlab.glurl }} \ + --token $GITLAB_RUNNER_TOKEN \ + --executor "docker" \ + --docker-image {{ .host.gitlab.runnerImage }} \ + --description {{ .host.gitlab.runnerDescription }} \ + --tag-list {{ .host.gitlab.runnerTags }} + else + ### Registering runner + logg info 'Registering GitLab Runner to run untagged builds' + gitlab-runner register \ + --non-interactive \ + --url {{ .host.gitlab.glurl }} \ + --token $GITLAB_RUNNER_TOKEN \ + --executor "docker" \ + --docker-image {{ .host.gitlab.runnerImage }} \ + --description {{ .host.gitlab.runnerDescription }} \ + --run-untagged + fi + else + logg warn 'GITLAB_RUNNER_TOKEN is not set. Not registering the runner' + fi +else + logg warn 'gitlab-runner is not installed or is not available in PATH' +fi + +{{ end -}} diff --git a/home/dot_config/shell/private_private.sh.tmpl b/home/dot_config/shell/private_private.sh.tmpl index 18198d48..e0de5e72 100644 --- a/home/dot_config/shell/private_private.sh.tmpl +++ b/home/dot_config/shell/private_private.sh.tmpl @@ -31,6 +31,7 @@ export GITHUB_TOKEN="$GH_TOKEN" ### GitLab export GL_TOKEN="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "GITLAB_TOKEN")) }}{{ includeTemplate "secrets/GITLAB_TOKEN" | decrypt }}{{ else }}{{ env "GITLAB_TOKEN" }}{{ end }}" export GITLAB_TOKEN="$GL_TOKEN" +export GITLAB_RUNNER_TOKEN="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "GITLAB_RUNNER_TOKEN")) }}{{ includeTemplate "secrets/GITLAB_RUNNER_TOKEN" | decrypt }}{{ else }}{{ env "GITLAB_RUNNER_TOKEN" }}{{ end }}" ### Heroku export HEROKU_API_KEY="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "HEROKU_API_KEY")) }}{{ includeTemplate "secrets/HEROKU_API_KEY" | decrypt }}{{ else }}{{ env "HEROKU_API_KEY" }}{{ end }}"