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