# # 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