90 lines
2.0 KiB
Ruby
90 lines
2.0 KiB
Ruby
#
|
|
# Cookbook:: kosmos_gitea
|
|
# Recipe:: act_runner
|
|
#
|
|
|
|
working_directory = node["gitea"]["working_directory"]
|
|
gitea_credentials = data_bag_item("credentials", "gitea")
|
|
runners = gitea_credentials["runners"]
|
|
|
|
begin
|
|
gitea_host = search(:node, "role:gitea").first["knife_zero"]["host"]
|
|
rescue
|
|
Chef::Log.warn('No server with "gitea" role. Stopping here.')
|
|
return
|
|
end
|
|
|
|
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 node["gitea"]["act_runner"]["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 http://#{gitea_host}:#{node["gitea"]["port"]} \
|
|
--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",
|
|
Restart: "always",
|
|
},
|
|
Install: {
|
|
WantedBy: "multi-user.target"
|
|
}
|
|
})
|
|
verify false
|
|
triggers_reload true
|
|
action [:create]
|
|
end
|
|
|
|
service runner_name do
|
|
action [:enable, :start]
|
|
end
|
|
end
|