87 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| #
 | |
| # Cookbook:: kosmos_gitea
 | |
| # Recipe:: act_runner
 | |
| #
 | |
| 
 | |
| version           = node["gitea"]["act_runner"]["version"]
 | |
| download_url      = "https://dl.gitea.com/act_runner/#{version}/act_runner-#{version}-linux-amd64"
 | |
| working_directory = node["gitea"]["working_directory"]
 | |
| gitea_credentials = data_bag_item("credentials", "gitea")
 | |
| runners           = gitea_credentials["runners"]
 | |
| gitea_host        = "https://#{node["gitea"]["domain"]}"
 | |
| 
 | |
| apt_repository 'docker' do
 | |
|   uri 'https://download.docker.com/linux/ubuntu'
 | |
|   key 'https://download.docker.com/linux/ubuntu/gpg'
 | |
|   components ['stable']
 | |
| end
 | |
| 
 | |
| %w[
 | |
|   docker-ce
 | |
|   docker-ce-cli
 | |
|   containerd.io
 | |
|   docker-buildx-plugin
 | |
| ].each do |apt_pkg|
 | |
|   package apt_pkg
 | |
| end
 | |
| 
 | |
| remote_file "/usr/local/bin/act_runner" do
 | |
|   source download_url
 | |
|   checksum node["gitea"]["act_runner"]["checksum"]
 | |
|   mode "0750"
 | |
| end
 | |
| 
 | |
| directory "#{working_directory}/runners" do
 | |
|   mode  "0700"
 | |
| end
 | |
| 
 | |
| runners.each do |runner|
 | |
|   runner_name = "gitea-runner-#{runner["org"]}"
 | |
|   runner_dir = "#{working_directory}/runners/#{runner["org"]}"
 | |
| 
 | |
|   directory runner_dir do
 | |
|     mode  "0700"
 | |
|   end
 | |
| 
 | |
|   bash "register_#{runner["org"]}_runner" do
 | |
|     cwd runner_dir
 | |
|     code <<-EOF
 | |
| act_runner register \
 | |
|   --no-interactive \
 | |
|   --instance #{gitea_host} \
 | |
|   --name #{runner_name} \
 | |
|   --token #{runner["token"]}
 | |
|     EOF
 | |
|     not_if { File.exist?("#{runner_dir}/.runner") }
 | |
|   end
 | |
| 
 | |
|   systemd_unit "#{runner_name}.service" do
 | |
|     content({
 | |
|       Unit: {
 | |
|         Description: "Gitea Actions Runner for '#{runner["org"]}' org",
 | |
|         Documentation: ["https://gitea.com/gitea/act_runner"],
 | |
|         Requires: "gitea.service",
 | |
|         After: "syslog.target network.target"
 | |
|       },
 | |
|       Service: {
 | |
|         Type: "simple",
 | |
|         WorkingDirectory: runner_dir,
 | |
|         Environment: "HOME=/root",
 | |
|         ExecStart: "/usr/local/bin/act_runner daemon",
 | |
|         ExecStartPre: "/bin/sleep 3", # Wait for Gitea's API to be up when restarting at the same time
 | |
|         Restart: "always",
 | |
|       },
 | |
|       Install: {
 | |
|         WantedBy: "multi-user.target"
 | |
|       }
 | |
|     })
 | |
|     verify false
 | |
|     triggers_reload true
 | |
|     action [:create]
 | |
|   end
 | |
| 
 | |
|   service runner_name do
 | |
|     action [:enable, :start]
 | |
|   end
 | |
| end
 |