mirror of
https://github.com/samsonjs/samhuri.net.git
synced 2026-04-27 14:57:40 +00:00
Trim redundant Bake tasks and improve bootstrap
This commit is contained in:
parent
24c41eea08
commit
878248cef5
3 changed files with 23 additions and 90 deletions
12
Readme.md
12
Readme.md
|
|
@ -54,9 +54,7 @@ Other targets:
|
||||||
rbenv exec bundle exec bake mudge
|
rbenv exec bundle exec bake mudge
|
||||||
rbenv exec bundle exec bake beta
|
rbenv exec bundle exec bake beta
|
||||||
rbenv exec bundle exec bake release
|
rbenv exec bundle exec bake release
|
||||||
rbenv exec bundle exec bake generate . www https://samhuri.net
|
rbenv exec bundle exec bake watch
|
||||||
rbenv exec bundle exec bake watch target=debug
|
|
||||||
rbenv exec bundle exec bake deploy --test true --delete true
|
|
||||||
rbenv exec bundle exec bake publish_beta
|
rbenv exec bundle exec bake publish_beta
|
||||||
rbenv exec bundle exec bake publish
|
rbenv exec bundle exec bake publish
|
||||||
```
|
```
|
||||||
|
|
@ -82,14 +80,6 @@ rbenv exec bundle exec bake test
|
||||||
rbenv exec bundle exec bake lint
|
rbenv exec bundle exec bake lint
|
||||||
```
|
```
|
||||||
|
|
||||||
## Site Generation
|
|
||||||
|
|
||||||
```bash
|
|
||||||
rbenv exec bundle exec bake generate SOURCE TARGET [URL]
|
|
||||||
# example:
|
|
||||||
rbenv exec bundle exec bake generate . www https://samhuri.net
|
|
||||||
```
|
|
||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
- `bake watch` is Linux-only and requires `inotifywait`.
|
- `bake watch` is Linux-only and requires `inotifywait`.
|
||||||
|
|
|
||||||
95
bake.rb
95
bake.rb
|
|
@ -2,7 +2,6 @@
|
||||||
|
|
||||||
require 'etc'
|
require 'etc'
|
||||||
require 'fileutils'
|
require 'fileutils'
|
||||||
require 'shellwords'
|
|
||||||
|
|
||||||
DRAFTS_DIR = 'public/drafts'.freeze
|
DRAFTS_DIR = 'public/drafts'.freeze
|
||||||
PUBLISH_HOST = 'mudge'.freeze
|
PUBLISH_HOST = 'mudge'.freeze
|
||||||
|
|
@ -40,49 +39,6 @@ def serve
|
||||||
server.start
|
server.start
|
||||||
end
|
end
|
||||||
|
|
||||||
# Generate a site from an arbitrary source directory into a target directory.
|
|
||||||
# @parameter source_path [String] Directory containing site sources.
|
|
||||||
# @parameter target_path [String] Directory to write generated site.
|
|
||||||
# @parameter url [String] Optional site URL override.
|
|
||||||
def generate(source_path = '.', target_path = 'www', url = nil)
|
|
||||||
require_relative 'lib/pressa'
|
|
||||||
|
|
||||||
site = Pressa.create_site(source_path:, url_override: url)
|
|
||||||
generator = Pressa::SiteGenerator.new(site:)
|
|
||||||
generator.generate(source_path:, target_path:)
|
|
||||||
puts "Site built successfully in #{target_path}"
|
|
||||||
end
|
|
||||||
|
|
||||||
# Install local prerequisites and gem dependencies.
|
|
||||||
def setup
|
|
||||||
ruby_version = File.read('.ruby-version').strip
|
|
||||||
|
|
||||||
if RUBY_PLATFORM.include?('linux')
|
|
||||||
puts '*** installing Linux prerequisites'
|
|
||||||
unless system('sudo', 'apt', 'install', '-y',
|
|
||||||
'build-essential',
|
|
||||||
'git',
|
|
||||||
'inotify-tools',
|
|
||||||
'libffi-dev',
|
|
||||||
'libyaml-dev',
|
|
||||||
'pkg-config',
|
|
||||||
'zlib1g-dev')
|
|
||||||
abort 'Error: failed to install Linux prerequisites.'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if command_available?('rbenv')
|
|
||||||
puts "*** using rbenv (ruby #{ruby_version})"
|
|
||||||
abort 'Error: rbenv install failed.' unless system('rbenv', 'install', '-s', ruby_version)
|
|
||||||
abort 'Error: bundle install failed.' unless system('rbenv', 'exec', 'bundle', 'install')
|
|
||||||
else
|
|
||||||
puts '*** rbenv not found, using system Ruby'
|
|
||||||
abort 'Error: bundle install failed.' unless system('bundle', 'install')
|
|
||||||
end
|
|
||||||
|
|
||||||
puts '*** done'
|
|
||||||
end
|
|
||||||
|
|
||||||
# Create a new draft in public/drafts/.
|
# Create a new draft in public/drafts/.
|
||||||
# @parameter title_parts [Array] Optional title words; defaults to Untitled.
|
# @parameter title_parts [Array] Optional title words; defaults to Untitled.
|
||||||
def new_draft(*title_parts)
|
def new_draft(*title_parts)
|
||||||
|
|
@ -148,7 +104,7 @@ end
|
||||||
|
|
||||||
# Watch content directories and rebuild on every change.
|
# Watch content directories and rebuild on every change.
|
||||||
# @parameter target [String] One of debug, mudge, beta, or release.
|
# @parameter target [String] One of debug, mudge, beta, or release.
|
||||||
def watch(target: 'mudge')
|
def watch(target: 'debug')
|
||||||
unless command_available?('inotifywait')
|
unless command_available?('inotifywait')
|
||||||
abort 'inotifywait is required (install inotify-tools).'
|
abort 'inotifywait is required (install inotify-tools).'
|
||||||
end
|
end
|
||||||
|
|
@ -161,17 +117,6 @@ def watch(target: 'mudge')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Deploy files via rsync without building first.
|
|
||||||
# @parameter beta [Boolean] Deploy to beta host path.
|
|
||||||
# @parameter test [Boolean] Enable rsync --dry-run.
|
|
||||||
# @parameter delete [Boolean] Enable rsync --delete.
|
|
||||||
# @parameter paths [Array] Optional local paths; defaults to www/.
|
|
||||||
def deploy(*paths, beta: false, test: false, delete: false)
|
|
||||||
publish_dir = truthy?(beta) ? BETA_PUBLISH_DIR : PRODUCTION_PUBLISH_DIR
|
|
||||||
local_paths = paths.empty? ? ['www/'] : paths
|
|
||||||
run_rsync(local_paths:, publish_dir:, dry_run: test, delete:)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Publish to beta/staging server
|
# Publish to beta/staging server
|
||||||
def publish_beta
|
def publish_beta
|
||||||
beta
|
beta
|
||||||
|
|
@ -222,19 +167,13 @@ private
|
||||||
# Build the site with specified URL
|
# Build the site with specified URL
|
||||||
# @parameter url [String] The site URL to use
|
# @parameter url [String] The site URL to use
|
||||||
def build(url)
|
def build(url)
|
||||||
|
require_relative 'lib/pressa'
|
||||||
|
|
||||||
puts "Building site for #{url}..."
|
puts "Building site for #{url}..."
|
||||||
generate('.', 'www', url)
|
site = Pressa.create_site(source_path: '.', url_override: url)
|
||||||
end
|
generator = Pressa::SiteGenerator.new(site:)
|
||||||
|
generator.generate(source_path: '.', target_path: 'www')
|
||||||
def run_rsync(local_paths:, publish_dir:, dry_run:, delete:)
|
puts 'Site built successfully in www/'
|
||||||
command = ['rsync', '-aKv', '-e', 'ssh -4']
|
|
||||||
command << '--dry-run' if truthy?(dry_run)
|
|
||||||
command << '--delete' if truthy?(delete)
|
|
||||||
command.concat(local_paths)
|
|
||||||
command << "#{PUBLISH_HOST}:#{publish_dir}"
|
|
||||||
|
|
||||||
puts "Running: #{Shellwords.join(command)}"
|
|
||||||
abort 'Error: rsync failed.' unless system(*command)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def run_build_target(target)
|
def run_build_target(target)
|
||||||
|
|
@ -250,6 +189,15 @@ def watch_paths
|
||||||
WATCHABLE_DIRECTORIES.flat_map { |path| ['-r', path] }
|
WATCHABLE_DIRECTORIES.flat_map { |path| ['-r', path] }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def run_rsync(local_paths:, publish_dir:, dry_run:, delete:)
|
||||||
|
command = ['rsync', '-aKv', '-e', 'ssh -4']
|
||||||
|
command << '--dry-run' if dry_run
|
||||||
|
command << '--delete' if delete
|
||||||
|
command.concat(local_paths)
|
||||||
|
command << "#{PUBLISH_HOST}:#{publish_dir}"
|
||||||
|
abort 'Error: rsync failed.' unless system(*command)
|
||||||
|
end
|
||||||
|
|
||||||
def resolve_draft_input(input_path)
|
def resolve_draft_input(input_path)
|
||||||
if input_path.include?('/')
|
if input_path.include?('/')
|
||||||
if input_path.start_with?('posts/')
|
if input_path.start_with?('posts/')
|
||||||
|
|
@ -329,14 +277,3 @@ end
|
||||||
def command_available?(command)
|
def command_available?(command)
|
||||||
system('which', command, out: File::NULL, err: File::NULL)
|
system('which', command, out: File::NULL, err: File::NULL)
|
||||||
end
|
end
|
||||||
|
|
||||||
def truthy?(value)
|
|
||||||
case value
|
|
||||||
when true
|
|
||||||
true
|
|
||||||
when false, nil
|
|
||||||
false
|
|
||||||
else
|
|
||||||
%w[1 true yes on].include?(value.to_s.downcase)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
|
||||||
|
|
@ -22,9 +22,15 @@ cd "$ROOT_DIR"
|
||||||
if command -v rbenv >/dev/null 2>/dev/null; then
|
if command -v rbenv >/dev/null 2>/dev/null; then
|
||||||
echo "*** using rbenv (ruby $RUBY_VERSION)"
|
echo "*** using rbenv (ruby $RUBY_VERSION)"
|
||||||
rbenv install -s "$RUBY_VERSION"
|
rbenv install -s "$RUBY_VERSION"
|
||||||
|
if ! rbenv exec gem list -i bundler >/dev/null 2>/dev/null; then
|
||||||
|
rbenv exec gem install bundler
|
||||||
|
fi
|
||||||
rbenv exec bundle install
|
rbenv exec bundle install
|
||||||
else
|
else
|
||||||
echo "*** rbenv not found, using system Ruby"
|
echo "*** rbenv not found, using system Ruby"
|
||||||
|
if ! gem list -i bundler >/dev/null 2>/dev/null; then
|
||||||
|
gem install bundler
|
||||||
|
fi
|
||||||
bundle install
|
bundle install
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue