Skip to content

Commit fcab490

Browse files
committed
Use latest fb_apt form
1 parent b64d1d8 commit fcab490

File tree

17 files changed

+142
-261
lines changed

17 files changed

+142
-261
lines changed

cookbooks/boxcutter_builder/recipes/default.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727

2828
include_recipe 'boxcutter_docker::default'
2929

30-
include_recipe 'boxcutter_github::runner_user'
3130
node.default['fb_users']['groups']['docker']['members'] << 'github-runner'
3231

3332
node.default['fb_ssh']['authorized_keys']['github-runner']['craft'] = \
@@ -68,7 +67,6 @@
6867

6968
include_recipe 'boxcutter_docker::default'
7069

71-
include_recipe 'boxcutter_github::runner_user'
7270
node.default['fb_users']['groups']['docker']['members'] << 'github-runner'
7371

7472
directory '/home/github-runner/.ssh' do

cookbooks/boxcutter_github/Policyfile.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@
1212

1313
# run_list: chef-client will run these recipes in the order specified.
1414
run_list 'boxcutter_ohai', 'boxcutter_init', 'boxcutter_github_test::default'
15+
named_run_list 'boxcutter_github_test_cli',
16+
'boxcutter_ohai', 'boxcutter_init', 'boxcutter_github_test::cli'
17+
named_run_list 'boxcutter_github_test_runner',
18+
'boxcutter_ohai', 'boxcutter_init', 'boxcutter_github_test::runner'
1519

1620
# Specify a custom source for a single cookbook:
1721
cookbook 'boxcutter_github', path: '.'

cookbooks/boxcutter_github/README.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,20 @@ node.default['boxcutter_github']['github_runner'] = {
3131
},
3232
}
3333
```
34+
35+
## Removing a runner
36+
37+
```
38+
sudo su -
39+
# Must run from runner root
40+
cd /home/github-runner/actions-runner/latest
41+
./svc.sh status
42+
43+
./svc.sh uninstall
44+
```
45+
46+
```
47+
su - github-runner
48+
cd ~/actions-runner/latest
49+
./config.sh remove
50+
```

cookbooks/boxcutter_github/kitchen.yml

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,6 @@ verifier:
4040
platforms:
4141
# @see https://github.com/chef-cookbooks/testing_examples/blob/main/kitchen.dokken.yml
4242
# @see https://hub.docker.com/u/dokken
43-
- name: ubuntu-20.04
44-
driver:
45-
image: boxcutter/dokken-ubuntu-20.04
46-
pid_one_command: /bin/systemd
47-
4843
- name: ubuntu-22.04
4944
driver:
5045
image: boxcutter/dokken-ubuntu-22.04
@@ -66,15 +61,18 @@ platforms:
6661
- RUN rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
6762

6863
suites:
69-
- name: default
70-
# run_list set in Policyfile.rb, this does nothing
71-
# run_list:
72-
# - recipe[boxcutter_ohai]
73-
# - recipe[boxcutter_init]
74-
# - recipe[boxcutter_github::default]
64+
- name: cli
65+
named_run_list: boxcutter_github_test_cli
66+
verifier:
67+
inspec_tests:
68+
- test/integration/cli
69+
attributes:
70+
71+
- name: runner
72+
named_run_list: boxcutter_github_test_runner
7573
verifier:
7674
inspec_tests:
77-
- test/integration/default
75+
- test/integration/runner
7876
attributes:
7977
lifecycle:
8078
pre_converge:
@@ -85,4 +83,4 @@ suites:
8583
ln -s /etc/cinc /etc/chef
8684
echo "<%= ENV['OP_SERVICE_ACCOUNT_TOKEN'] %>" > /etc/chef/op_service_account_token
8785
set -x
88-
'
86+
'

cookbooks/boxcutter_github/recipes/cli.rb

Lines changed: 63 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -19,102 +19,70 @@
1919
# https://github.com/cli/cli/blob/trunk/docs/install_linux.md
2020
case node['platform']
2121
when 'ubuntu'
22-
# For now, continue to publish keys installable by apt-key, so we don't have
23-
# to change fb_apt yet. apt-key is not going away until after Ubuntu 22.04.
24-
# Hopefully Facebook will accommodate fb_apt to work without apt-key so we
25-
# don't have to do it.
26-
#
27-
# To get the information needed from a gpg key, download it to a temporary
28-
# ubuntu install:
29-
#
30-
# curl -fsSLO https://cli.github.com/packages/githubcli-archive-keyring.gpg
31-
#
32-
# List the key with `gpg --show-keys` like so:
33-
#
34-
# gpg --with-fingerprint --show-keys githubcli-archive-keyring.gpg
35-
#
36-
# In 2024-09-12 show keys looked like this:
37-
#
38-
# pub rsa4096 2022-09-06 [SC] [expires: 2026-09-05]
39-
# 2C61 0620 1985 B60E 6C7A C873 23F3 D4EA 7571 6059
40-
# uid GitHub CLI <opensource+cli@github.com>
41-
# sub rsa4096 2022-09-06 [E] [expires: 2026-09-05]
42-
#
43-
# Use the last 16 digits of the key signature as the key for
44-
# node.default['fb_apt']['keys']:
45-
#
46-
# 23F3 D4EA 7571 6059
47-
#
48-
# To dump the key contents, run:
49-
#
50-
# gpg --enarmor < githubcli-archive-keyring.gpg > foo.txt
51-
#
52-
# Then replace the GPG armored blocks with the following markers (content
53-
# remains the same:
54-
# -----BEGIN PGP PUBLIC KEY BLOCK-----
55-
# -----END PGP PUBLIC KEY BLOCK-----
56-
node.default['fb_apt']['keys']['23F3D4EA75716059'] = <<-EOS
57-
-----BEGIN PGP PUBLIC KEY BLOCK-----
58-
59-
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
106-
ADUE8jV+eCAWuR9uIl4=
107-
=qpKU
108-
-----END PGP PUBLIC KEY BLOCK-----
109-
EOS
22+
node.default['fb_apt']['sources']['github_cli'] = {
23+
'key' => 'github_cli',
24+
'url' => 'https://cli.github.com/packages',
25+
'suite' => 'stable',
26+
'components' => ['main'],
27+
}
11028

111-
# Omit signed-by and use apt-key to import the key
112-
case node['kernel']['machine']
113-
when 'x86_64', 'amd64'
114-
node.default['fb_apt']['repos'] << 'deb [arch=amd64] https://cli.github.com/packages stable main'
115-
when 'aarch64', 'arm64'
116-
node.default['fb_apt']['repos'] << 'deb [arch=arm64] https://cli.github.com/packages stable main'
117-
end
29+
# curl -fsSLO https://cli.github.com/packages/githubcli-archive-keyring.gpg
30+
# gpg --enarmor < githubcli-archive-keyring.gpg > githubcli-archive-keyring.asc
31+
node.default['fb_apt']['keymap']['github_cli'] = <<~EOS
32+
-----BEGIN PGP ARMORED FILE-----
33+
Comment: Use "gpg --dearmor" for unpacking
34+
35+
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
82+
ADUE8jV+eCAWuR9uIl4=
83+
=qpKU
84+
-----END PGP ARMORED FILE-----
85+
EOS
11886
when 'centos'
11987
node.default['fb_yum_repos']['repos']['gh_cli'] = {
12088
'repos' => {

cookbooks/boxcutter_github/recipes/runner.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,13 @@
1616
# See the License for the specific language governing permissions and
1717
# limitations under the License.
1818

19+
FB::Users.initialize_group(node, 'github-runner')
20+
21+
node.default['fb_users']['users']['github-runner'] = {
22+
'home' => '/home/github-runner',
23+
'shell' => '/bin/bash',
24+
'gid' => 'github-runner',
25+
'action' => :add,
26+
}
27+
1928
boxcutter_github_runners 'manage'

cookbooks/boxcutter_github/recipes/runner_user.rb

Lines changed: 0 additions & 39 deletions
This file was deleted.

cookbooks/boxcutter_github/resources/runner.rb

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
property :group, String
99
property :work_directory, String
1010
property :labels, Array
11-
property :disable_update, [true, false], default: true
11+
property :disable_update, [true, false], default: false
1212

1313
load_current_value do |new_resource|
1414
puts 'MISCHA: load_current_value'
@@ -63,12 +63,6 @@
6363

6464
filename = ::File.basename(url)
6565
tmp_path = ::File.join(Chef::Config[:file_cache_path], filename)
66-
67-
remote_file tmp_path do
68-
source url
69-
checksum checksum
70-
end
71-
7266
path = "#{new_resource.install_directory}/#{filename.gsub(/\.tar\.gz$/, '')}"
7367

7468
[
@@ -82,6 +76,11 @@
8276
end
8377
end
8478

79+
remote_file tmp_path do
80+
source url
81+
checksum checksum
82+
end
83+
8584
execute 'extract actions-runner' do
8685
command <<-BASH
8786
tar --extract --no-same-owner --directory #{path} --file #{tmp_path}

cookbooks/boxcutter_github/spec/unit/recipes/runner_user_spec.rb

Lines changed: 0 additions & 41 deletions
This file was deleted.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#
2+
# Cookbook:: boxcutter_github_test
3+
# Recipe:: cli
4+
#
5+
include_recipe 'boxcutter_github::cli'

0 commit comments

Comments
 (0)