include_recipe 'deno' user node['blossom']['user'] do home "/home/#{node['blossom']['user']}" manage_home true system true end group node['blossom']['group'] do members [node['blossom']['user']] system true end directory node['blossom']['install_dir'] do owner node['blossom']['user'] group node['blossom']['group'] mode '0755' end git node['blossom']['install_dir'] do repository node['blossom']['repo_url'] revision node['blossom']['revision'] action :sync user node['blossom']['user'] group node['blossom']['group'] notifies :run, 'execute[blossom_build]', :immediately notifies :restart, 'service[blossom]', :delayed end execute 'blossom_build' do command '/usr/local/bin/deno task build' cwd node['blossom']['install_dir'] user node['blossom']['user'] group node['blossom']['group'] environment( 'DENO_DIR' => "/home/#{node['blossom']['user']}/.cache/deno" ) action :nothing end directory "/home/#{node['blossom']['user']}/data" do owner node['blossom']['user'] group node['blossom']['group'] mode '0750' recursive true end template "#{node['blossom']['install_dir']}/config.yml" do source 'config.yml.erb' owner node['blossom']['user'] group node['blossom']['group'] mode '0640' variables( port: node['blossom']['port'], host: node['blossom']['host'], domain: node['blossom']['domain'], user: node['blossom']['user'], storage_backend: node['blossom']['storage']['backend'], storage_local_dir: node['blossom']['storage']['local']['dir'], storage_s3: node['blossom']['storage']['s3'], allowed_pubkeys: node['blossom']['allowed_pubkeys'], max_size: node['blossom']['max_size'], list_enabled: node['blossom']['list']['enabled'], list_require_auth: node['blossom']['list']['require_auth'], list_allow_others: node['blossom']['list']['allow_list_others'], delete_require_auth: node['blossom']['delete']['require_auth'] ) notifies :restart, 'service[blossom]', :delayed end file "#{node['blossom']['install_dir']}/.env" do owner node['blossom']['user'] group node['blossom']['group'] mode '0640' action :create notifies :restart, 'service[blossom]', :delayed end systemd_unit 'blossom.service' do content({ Unit: { Description: 'Blossom Server', After: 'network.target' }, Service: { Type: 'simple', User: node['blossom']['user'], Group: node['blossom']['group'], WorkingDirectory: node['blossom']['install_dir'], ExecStart: '/usr/local/bin/deno task start config.yml', Restart: 'on-failure', Environment: [ "DENO_DIR=/home/#{node['blossom']['user']}/.cache/deno" ] }, Install: { WantedBy: 'multi-user.target' } }) action [:create] end service "blossom" do action [:enable, :start] end