← Extractions

How To Package A Rails Engine — Generation To Automation (wroclove.rb 2022)

Adrian Marin, author of Avo, walks through the full lifecycle of packaging a Rails engine: generating a mountable engine, writing a gemspec, building gems in isolation with Docker, publishing to RubyGems, versioning with the bump gem, automating tests, linting, PR labeling, release notes and releases via GitHub Actions, and pre-compiling engine assets with esbuild/Tailwind behind a Rack::Static middleware. Q&A covers engines vs namespaces in monoliths, Webpacker-based engines, and avoiding model duplication across engines.

Model
claude-opus-4-7
Ingestion
b3cca4fd
Input tokens
420,903
fresh
291,363
cached
116,586
cache write
12,954
Output tokens
17,654
Duration
272.9s
Roundtrips
10
Tool calls
26
Cost
$0.00
Nodes/edges extracted
38 / 60
Read set (nodes/edges)
129 / 5

Nodes (38)

create jsbundling-rails tool
kind (empty) → tool
name (empty) → jsbundling-rails
slug (empty) → jsbundling-rails
attrs (empty) → {"category" => "library"}
description (empty) → Rails gem that standardizes the integration between Rails and JavaScript bundlers such as esbuild. Used in the engine...
short_description (empty) → Rails gem integrating esbuild/rollup/webpack bundlers via npm scripts.
update Adrian Marin person
attrs (empty) → {"handle" => "adrianthedev", "website" => "adrianthedev.com", "nationality" => "Romanian"}
description Conference speaker. → Romanian Ruby on Rails developer and entrepreneur, creator of Avo — an application-building framework on top of Rails...
short_description Conference speaker. → Romanian Ruby developer, creator of the Avo admin framework.
update How To Package A Rails Engine Generation To Automation talk
attrs {"type" => "talk"} → {"date" => "2022-03-11", "type" => "talk"}
description Talk at wroclove.rb 2022. → Adrian Marin's wroclove.rb 2022 talk walking end-to-end through packaging a Rails engine as a distributable gem. Cove...
short_description Talk at wroclove.rb 2022. → Adrian Marin's wroclove.rb 2022 talk on building, releasing, and automating Rails engine gems.
update Avo tool
attrs {"category" => "library"} → {"author" => "Adrian Marin", "website" => "avohq.io", "category" => "library"}
description Rails admin panel gem mentioned alongside Active Admin. Magic-heavy: it tries to discover models and auto-generate a ... → Application-building framework built on top of Ruby on Rails, authored by Adrian Marin, that helps developers build a...
create Rails Engine concept
kind (empty) → concept
name (empty) → Rails Engine
slug (empty) → rails-engine
attrs (empty) → {"category" => "architecture"}
description (empty) → Rails feature providing a miniature Rails application — with its own routes, models, controllers, views, helpers and ...
short_description (empty) → Miniature Rails application mountable inside a host Rails app.
create RubyGems tool
kind (empty) → tool
name (empty) → RubyGems
slug (empty) → rubygems
attrs (empty) → {"category" => "service"}
description (empty) → Official Ruby package hosting and distribution system. Gems are built via the `gem` utility, configured through a `.g...
short_description (empty) → Official package registry and distribution system for Ruby libraries.
create gemspec concept
kind (empty) → concept
name (empty) → gemspec
slug (empty) → gemspec
attrs (empty) → {"category" => "practice"}
description (empty) → Manifest file shipped with every Ruby gem. Describes package identity (name, version, author, summary, description), ...
short_description (empty) → Ruby gem manifest file declaring metadata, files and dependencies.
create bump gem tool
kind (empty) → tool
name (empty) → bump gem
slug (empty) → bump-gem
attrs (empty) → {"category" => "library"}
description (empty) → Ruby utility that increments the version in an engine/gem's `version.rb` (pre-release, minor, major, or patch), updat...
short_description (empty) → Ruby gem that automates semantic version bumps, commits and tags.
create Pundit tool
kind (empty) → tool
name (empty) → Pundit
slug (empty) → pundit
attrs (empty) → {"category" => "library"}
description (empty) → Popular Ruby authorization gem; used in Adrian's talk as the example runtime dependency declared in an engine's gemsp...
short_description (empty) → Minimal authorization Ruby gem using policy classes.
create esbuild tool
kind (empty) → tool
name (empty) → esbuild
slug (empty) → esbuild
attrs (empty) → {"category" => "tool"}
description (empty) → JavaScript bundler used in the talk via the jsbundling-for-rails script pattern. A `build.js` invokes esbuild to bund...
short_description (empty) → Extremely fast JavaScript/TypeScript bundler.
create Tailwind CSS tool
kind (empty) → tool
name (empty) → Tailwind CSS
slug (empty) → tailwind-css
attrs (empty) → {"category" => "framework"}
description (empty) → Utility-first CSS framework used in the talk to compile a single `admin.tailwind.css` entry file into `public/admin-a...
short_description (empty) → Utility-first CSS framework.
create Rack::Static tool
kind (empty) → tool
name (empty) → Rack::Static
slug (empty) → rack-static
attrs (empty) → {"category" => "library"}
description (empty) → Rack middleware added to a Rails Engine class (`config.app_middleware.use Rack::Static, ...`) to map requests for `/a...
short_description (empty) → Rack middleware serving static files from a given directory.
create reviewdog tool
kind (empty) → tool
name (empty) → reviewdog
slug (empty) → reviewdog
attrs (empty) → {"category" => "tool"}
description (empty) → Automated code-review tool, available as a GitHub Action, that runs linters/analyzers and reports findings as inline ...
short_description (empty) → Automated code-review tool posting linter output as PR comments/suggestions.
create Standard RB tool
kind (empty) → tool
name (empty) → Standard RB
slug (empty) → standard-rb
attrs (empty) → {"category" => "tool"}
description (empty) → Ruby linter/formatter with a single, opinionated style and zero configuration. Used in Adrian's engine CI via reviewd...
short_description (empty) → Opinionated Ruby style checker with zero configuration.
create ESLint tool
kind (empty) → tool
name (empty) → ESLint
slug (empty) → eslint
attrs (empty) → {"category" => "tool"}
description (empty) → JavaScript/TypeScript linter. Used in the engine's CI via reviewdog's eslint action to enforce JS style and catch err...
short_description (empty) → JavaScript linter with configurable rule sets.
create Release Drafter tool
kind (empty) → tool
name (empty) → Release Drafter
slug (empty) → release-drafter
attrs (empty) → {"category" => "tool"}
description (empty) → GitHub Action that, on every merge to main, diffs commits since the last release, collects merged pull requests, and ...
short_description (empty) → GitHub Action that auto-generates categorized release notes from merged PRs.
create PR Labeler tool
kind (empty) → tool
name (empty) → PR Labeler
slug (empty) → pr-labeler
attrs (empty) → {"category" => "tool"}
description (empty) → GitHub Action that runs on pull-request open events and applies labels (feature, chore, fix, refactor, style, test, d...
short_description (empty) → GitHub Action that auto-labels pull requests from branch names.
create Codecov tool
kind (empty) → tool
name (empty) → Codecov
slug (empty) → codecov
attrs (empty) → {"category" => "service"}
description (empty) → Hosted code-coverage reporting service. Integrated into Adrian's engine CI via the codecov GitHub Action, which uploa...
short_description (empty) → Hosted code-coverage reporting service with GitHub integration.
create actions/checkout tool
kind (empty) → tool
name (empty) → actions/checkout
slug (empty) → actions-checkout
attrs (empty) → {"category" => "tool"}
description (empty) → Pre-made GitHub Action used at the start of most workflows; knows which ref/PR/commit triggered the run and checks ou...
short_description (empty) → Pre-made GitHub Action that checks out the repository at the triggering commit.
create ruby/setup-ruby tool
kind (empty) → tool
name (empty) → ruby/setup-ruby
slug (empty) → ruby-setup-ruby
attrs (empty) → {"category" => "tool"}
description (empty) → Pre-made GitHub Action that installs Ruby at a version typically provided by the workflow's matrix strategy (e.g. Rub...
short_description (empty) → GitHub Action that installs a Ruby version and configures bundler caching.
create actions/upload-artifact tool
kind (empty) → tool
name (empty) → actions/upload-artifact
slug (empty) → actions-upload-artifact
attrs (empty) → {"category" => "tool"}
description (empty) → Pre-made GitHub Action that packages a given directory (e.g. `spec/dummy/tmp/screenshots`) into an archive attached t...
short_description (empty) → GitHub Action archiving files from a job for post-run download.
create GitHub Releases tool
kind (empty) → tool
name (empty) → GitHub Releases
slug (empty) → github-releases
attrs (empty) → {"category" => "service"}
description (empty) → GitHub feature allowing a release object — with title, body, and uploadable binary assets — to be attached to a git t...
short_description (empty) → GitHub feature attaching release notes and assets to git tags.
create CI Matrix Strategy concept
kind (empty) → concept
name (empty) → CI Matrix Strategy
slug (empty) → ci-matrix-strategy
attrs (empty) → {"category" => "practice"}
description (empty) → GitHub Actions pattern where a job is fanned out across combinations of parameters — e.g. Ruby 3.0/3.1 × Rails 6/7 — ...
short_description (empty) → Running CI jobs across combinations of parameters like language/framework versions.
create Build Gems in Docker Isolation concept
kind (empty) → concept
name (empty) → Build Gems in Docker Isolation
slug (empty) → build-gems-in-docker-isolation
attrs (empty) → {"category" => "practice"}
description (empty) → Practice of running `bundle exec rails build` inside a Docker image built from a clean Ruby base (plus cached heavy n...
short_description (empty) → Packaging a Ruby gem inside a Docker build to avoid host-environment contamination.
create Pre-Compile Engine Assets at Build Time concept
kind (empty) → concept
name (empty) → Pre-Compile Engine Assets at Build Time
slug (empty) → pre-compile-engine-assets-at-build-time
attrs (empty) → {"category" => "pattern"}
description (empty) → Asset-pipeline strategy for packaged Rails engines. Instead of hooking into the host app's asset pipeline (which forc...
short_description (empty) → Bundling a Rails engine's CSS/JS at gem build time and serving via Rack::Static.
create Changelog concept
kind (empty) → concept
name (empty) → Changelog
slug (empty) → changelog
attrs (empty) → {"category" => "practice"}
description (empty) → Record of notable changes published with each release. Options covered in the talk: a `CHANGELOG.md` file committed t...
short_description (empty) → Human-readable record of notable changes between releases.
create Short Ruby Newsletter resource
kind (empty) → resource
name (empty) → Short Ruby Newsletter
slug (empty) → short-ruby-newsletter
attrs (empty) → {"type" => "blog-post"}
description (empty) → Weekly newsletter by Lucian Ghinda summarizing what's happening in the Ruby community on Twitter and elsewhere — deba...
short_description (empty) → Weekly roundup of Ruby community activity on Twitter and beyond.
create Lucian Ghinda person
kind (empty) → person
name (empty) → Lucian Ghinda
slug (empty) → lucian-ghinda
description (empty) → Ruby developer and author of the Short Ruby Newsletter, a weekly roundup of Ruby community activity. Described as Adr...
short_description (empty) → Ruby developer, author of the Short Ruby Newsletter.
create Ruby Romania project
kind (empty) → project
name (empty) → Ruby Romania
slug (empty) → ruby-romania
attrs (empty) → {"status" => "active"}
description (empty) → Community initiative for Romanian Ruby developers, promoted by Adrian Marin at the end of his wroclove.rb 2022 talk a...
short_description (empty) → Community initiative for Romanian Ruby developers.
create Xavier Noria person
kind (empty) → person
name (empty) → Xavier Noria
slug (empty) → xavier-noria
description (empty) → Ruby on Rails core contributor, known for his work on autoloading (e.g. Zeitwerk). Referenced by Adrian Marin as a no...
short_description (empty) → Ruby on Rails core contributor known for work on autoloading.
create Pre-compile engine assets to shield host apps takeaway
kind (empty) → takeaway
name (empty) → Pre-compile engine assets to shield host apps
slug (empty) → pre-compile-engine-assets-to-shield-host-apps
attrs (empty) → {"type" => "recommendation"}
description (empty) → Recommendation from Adrian Marin's wroclove.rb 2022 talk: pre-compile your Rails engine's CSS and JavaScript at gem b...
short_description (empty) → Ship compiled CSS/JS in the engine so the host app doesn't need your toolchain.
create Build your gem in a Docker container takeaway
kind (empty) → takeaway
name (empty) → Build your gem in a Docker container
slug (empty) → build-your-gem-in-a-docker-container
attrs (empty) → {"type" => "recommendation"}
description (empty) → Takeaway: running `rails build` inside a Docker image guarantees consistent RAILS_ENV/NODE_ENV and asset versions, av...
short_description (empty) → Packaging in Docker isolates the build from your local environment.
create Declare gem runtime dependencies in the gemspec takeaway
kind (empty) → takeaway
name (empty) → Declare gem runtime dependencies in the gemspec
slug (empty) → declare-gem-runtime-dependencies-in-the-gemspec
attrs (empty) → {"type" => "recommendation"}
description (empty) → Takeaway: if your engine depends on another gem (e.g. Pundit) at runtime, declare it with `spec.add_dependency` in th...
short_description (empty) → Don't rely on a README — add required gems via spec.add_dependency.
create Automate the whole release workflow takeaway
kind (empty) → takeaway
name (empty) → Automate the whole release workflow
slug (empty) → automate-the-whole-release-workflow
attrs (empty) → {"type" => "recommendation"}
description (empty) → Takeaway: the manual flow (branch → PR → merge → pull main → bump → build → push → publish → update changelog) is tir...
short_description (empty) → Use GitHub Actions to test, lint, label, draft notes, and publish gems.
create Be kind and build useful things takeaway
kind (empty) → takeaway
name (empty) → Be kind and build useful things
slug (empty) → be-kind-and-build-useful-things
attrs (empty) → {"type" => "insight"}
description (empty) → Adrian Marin's closing call to action at wroclove.rb 2022: be awesome — go build useful things, share them with other...
short_description (empty) → Adrian's closing call to build useful software, share it, and be kind.
create Engines vs namespaces for splitting a growing monolith question
kind (empty) → question
name (empty) → Engines vs namespaces for splitting a growing monolith
slug (empty) → engines-vs-namespaces-for-splitting-a-growing-monolith
attrs (empty) → {"answer_summary" => "It depends. Use engines for clearly first-class domains; start with namespaces otherwise, but a...
description (empty) → Audience question: when building another application inside an existing Rails monolith that may grow and need to be e...
short_description (empty) → Q&A on when to use a Rails engine instead of a namespace for a new app inside a monolith.
create Packaging a Rails engine that uses Webpacker question
kind (empty) → question
name (empty) → Packaging a Rails engine that uses Webpacker
slug (empty) → packaging-a-rails-engine-that-uses-webpacker
attrs (empty) → {"answer_summary" => "Yes — Avo did it. Use the same dual approach (hook into host pipeline for dev, pre-compile at b...
description (empty) → Audience question: can you package a Rails engine that uses Webpacker, and can the host app also have Webpacker? Adri...
short_description (empty) → Q&A on having Webpacker both in a host app and in a packaged engine.
create Avoiding model duplication across engines question
kind (empty) → question
name (empty) → Avoiding model duplication across engines
slug (empty) → avoiding-model-duplication-across-engines
attrs (empty) → {"answer_summary" => "Extract shared code into modules/concerns and include it across engines, or skip engine-owned m...
description (empty) → Audience question: in the marketplace example with buyer and seller engines, how do you avoid duplicating models? Adr...
short_description (empty) → Q&A on sharing models between buyer and seller engines.

Edges (60)

create Adrian Marin → attended → wroclove.rb 2022
context (empty) → Speaker at the conference.
relation (empty) → attended
source_node_id (empty) → 3e489e95-e01d-45cd-882c-6153cf56f911
target_node_id (empty) → cfc5cfd3-25a6-46c2-8b5d-626986c71c24
create Packaging a Rails engine that uses Webpacker → asked_at → How To Package A Rails Engine Generation To Automation
context (empty) → Asked during the Q&A of this talk.
relation (empty) → asked_at
source_node_id (empty) → fa735322-95bc-4b5c-9aa7-6a194cb31afd
target_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
update Adrian Marin → authored → How To Package A Rails Engine Generation To Automation
context (empty) → Adrian Marin delivered this talk at wroclove.rb 2022.
update How To Package A Rails Engine Generation To Automation → presented_at → wroclove.rb 2022
context (empty) → Talk presented at wroclove.rb 2022.
create Adrian Marin → works_on → Avo
attrs (empty) → {"role" => "author"}
context (empty) → Adrian is the author of Avo.
relation (empty) → works_on
source_node_id (empty) → 3e489e95-e01d-45cd-882c-6153cf56f911
target_node_id (empty) → f523171f-5f61-4e47-a115-b99aed7b7b99
create Adrian Marin → works_on → Ruby Romania
attrs (empty) → {"role" => "organizer"}
context (empty) → Adrian promotes Ruby Romania as a new Romanian Ruby community he is helping set up.
relation (empty) → works_on
source_node_id (empty) → 3e489e95-e01d-45cd-882c-6153cf56f911
target_node_id (empty) → cd2395dc-424f-4084-9741-516354db48bc
create Adrian Marin → recommends → Short Ruby Newsletter
context (empty) → Adrian shouts out the Short Ruby Newsletter at the end of his talk.
relation (empty) → recommends
source_node_id (empty) → 3e489e95-e01d-45cd-882c-6153cf56f911
target_node_id (empty) → 2edf12bc-72b7-4f48-8716-80eccabe564d
create Adrian Marin → recommends → Ruby Romania
context (empty) → Adrian invites Romanian Ruby developers watching the talk to join Ruby Romania.
relation (empty) → recommends
source_node_id (empty) → 3e489e95-e01d-45cd-882c-6153cf56f911
target_node_id (empty) → cd2395dc-424f-4084-9741-516354db48bc
create Lucian Ghinda → authored → Short Ruby Newsletter
context (empty) → Lucian Ghinda writes the Short Ruby Newsletter.
relation (empty) → authored
source_node_id (empty) → 147aedda-80f5-4e57-8dd7-806a57977193
target_node_id (empty) → 2edf12bc-72b7-4f48-8716-80eccabe564d
create How To Package A Rails Engine Generation To Automation → about → Rails Engine
context (empty) → The talk's core subject is how to build, ship, and maintain Rails engines.
relation (empty) → about
source_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) → f14fb5ec-30aa-4243-a312-a7379e8e9f1e
create How To Package A Rails Engine Generation To Automation → about → Avo
context (empty) → Avo is the running example throughout the talk.
relation (empty) → about
source_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) → f523171f-5f61-4e47-a115-b99aed7b7b99
create How To Package A Rails Engine Generation To Automation → about → RubyGems
context (empty) → Talk covers publishing engines as gems on RubyGems.
relation (empty) → about
source_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) → c7ef9d2b-d24d-4674-9ffa-b77e122c7044
create How To Package A Rails Engine Generation To Automation → about → gemspec
context (empty) → Talk walks through the gemspec as the gem's manifest.
relation (empty) → about
source_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) → fc4368bd-58d0-484f-ac2e-2a406d12d977
create How To Package A Rails Engine Generation To Automation → about → GitHub Actions
context (empty) → Entire automation section uses GitHub Actions.
relation (empty) → about
source_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) → cab3bb4f-ed74-4df5-8a84-0caa6f55601c
create How To Package A Rails Engine Generation To Automation → about → Docker
context (empty) → Docker is used to build gems in isolation.
relation (empty) → about
source_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) → f4375c6b-4dbe-421e-bf0a-fe1240fd8152
create How To Package A Rails Engine Generation To Automation → about → bump gem
context (empty) → The bump gem is recommended for automating version bumps, commits, and tags.
relation (empty) → about
source_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) → 673ab608-b90f-4dbe-8f7b-5840cd16348c
create How To Package A Rails Engine Generation To Automation → about → Pre-Compile Engine Assets at Build Time
context (empty) → Final section of the talk explains compiling engine assets at build time.
relation (empty) → about
source_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) → e460ab45-aaf0-48fb-9bea-7adf0415dc48
create How To Package A Rails Engine Generation To Automation → about → Build Gems in Docker Isolation
context (empty) → Talk explains building gems in Docker for isolation.
relation (empty) → about
source_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) → d9e04374-7fc6-476b-84a4-9b7d043214c9
create How To Package A Rails Engine Generation To Automation → about → CI Matrix Strategy
context (empty) → Talk demonstrates a Ruby × Rails matrix for the test workflow.
relation (empty) → about
source_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) → c81f0d75-787c-4116-8976-0fc2ab98965c
create How To Package A Rails Engine Generation To Automation → about → Changelog
context (empty) → Talk discusses changelog options for gem releases.
relation (empty) → about
source_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) → 9aa0a495-fc92-48c0-a4c6-37b23fa87594
create Avo → uses → Ruby on Rails
context (empty) → Avo is an application-building framework built on top of Rails.
relation (empty) → uses
source_node_id (empty) → f523171f-5f61-4e47-a115-b99aed7b7b99
target_node_id (empty) → 7aac705a-0987-49f2-b665-9d4e08a6acee
create Avo → uses → Rails Engine
context (empty) → Avo is distributed as a mountable Rails engine.
relation (empty) → uses
source_node_id (empty) → f523171f-5f61-4e47-a115-b99aed7b7b99
target_node_id (empty) → f14fb5ec-30aa-4243-a312-a7379e8e9f1e
create Avo → uses → esbuild
context (empty) → Avo's engine uses esbuild to pre-compile JavaScript at gem build time.
relation (empty) → uses
source_node_id (empty) → f523171f-5f61-4e47-a115-b99aed7b7b99
target_node_id (empty) → 1a1e75c2-83e5-45a5-b860-0bede4e80b8e
create Avo → uses → Tailwind CSS
context (empty) → Avo's engine uses Tailwind to compile CSS at gem build time.
relation (empty) → uses
source_node_id (empty) → f523171f-5f61-4e47-a115-b99aed7b7b99
target_node_id (empty) → ec73c2f6-5a41-41a5-8bc3-17addcf6fa0f
create Avo → uses → Rack::Static
context (empty) → Avo's engine registers Rack::Static to expose its pre-compiled assets to the host app.
relation (empty) → uses
source_node_id (empty) → f523171f-5f61-4e47-a115-b99aed7b7b99
target_node_id (empty) → 412558a2-d146-4e05-8ce7-55ad8577821f
create Avo → uses → jsbundling-rails
context (empty) → Avo's package.json scripts use jsbundling with esbuild for Rails.
relation (empty) → uses
source_node_id (empty) → f523171f-5f61-4e47-a115-b99aed7b7b99
target_node_id (empty) → 7953f328-bfd7-45a3-9e50-231782b6dfb5
create Pre-Compile Engine Assets at Build Time → related_to → Rack::Static
context (empty) → The pattern uses Rack::Static middleware to serve the pre-compiled asset directory from the engine.
relation (empty) → related_to
source_node_id (empty) → e460ab45-aaf0-48fb-9bea-7adf0415dc48
target_node_id (empty) → 412558a2-d146-4e05-8ce7-55ad8577821f
create Pre-Compile Engine Assets at Build Time → related_to → esbuild
context (empty) → esbuild compiles JavaScript as part of the build-time asset pipeline.
relation (empty) → related_to
source_node_id (empty) → e460ab45-aaf0-48fb-9bea-7adf0415dc48
target_node_id (empty) → 1a1e75c2-83e5-45a5-b860-0bede4e80b8e
create Pre-Compile Engine Assets at Build Time → related_to → Tailwind CSS
context (empty) → Tailwind compiles CSS as part of the build-time asset pipeline.
relation (empty) → related_to
source_node_id (empty) → e460ab45-aaf0-48fb-9bea-7adf0415dc48
target_node_id (empty) → ec73c2f6-5a41-41a5-8bc3-17addcf6fa0f
create Build Gems in Docker Isolation → related_to → Docker
context (empty) → The isolation pattern is implemented with Docker.
relation (empty) → related_to
source_node_id (empty) → d9e04374-7fc6-476b-84a4-9b7d043214c9
target_node_id (empty) → f4375c6b-4dbe-421e-bf0a-fe1240fd8152
create CI Matrix Strategy → related_to → GitHub Actions
context (empty) → Matrix strategy is a GitHub Actions workflow feature.
relation (empty) → related_to
source_node_id (empty) → c81f0d75-787c-4116-8976-0fc2ab98965c
target_node_id (empty) → cab3bb4f-ed74-4df5-8a84-0caa6f55601c
create Pre-compile engine assets to shield host apps → from_talk → How To Package A Rails Engine Generation To Automation
context (empty) → Key recommendation from the talk's asset-pipeline section.
relation (empty) → from_talk
source_node_id (empty) → a1162307-c7ee-4ed0-8041-fa438de05ddb
target_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
create Build your gem in a Docker container → from_talk → How To Package A Rails Engine Generation To Automation
context (empty) → Recommendation from the build-isolation section.
relation (empty) → from_talk
source_node_id (empty) → 5b801b74-0f0b-4fee-a6f8-e9ef79c6b01f
target_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
create Declare gem runtime dependencies in the gemspec → from_talk → How To Package A Rails Engine Generation To Automation
context (empty) → Recommendation from the gemspec walkthrough.
relation (empty) → from_talk
source_node_id (empty) → 52cdf60f-1a5f-4b17-a5e1-14e7c905a93a
target_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
create Automate the whole release workflow → from_talk → How To Package A Rails Engine Generation To Automation
context (empty) → Central recommendation of the talk.
relation (empty) → from_talk
source_node_id (empty) → eb92c566-27c7-4e48-b9bb-288877af2c60
target_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
create Be kind and build useful things → from_talk → How To Package A Rails Engine Generation To Automation
context (empty) → Closing call to action of the talk.
relation (empty) → from_talk
source_node_id (empty) → 73b7048a-8df0-404b-be58-7ee6b7eea998
target_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
create Pre-compile engine assets to shield host apps → about → Pre-Compile Engine Assets at Build Time
context (empty) → The takeaway names and recommends this pattern.
relation (empty) → about
source_node_id (empty) → a1162307-c7ee-4ed0-8041-fa438de05ddb
target_node_id (empty) → e460ab45-aaf0-48fb-9bea-7adf0415dc48
create Build your gem in a Docker container → about → Build Gems in Docker Isolation
context (empty) → The takeaway names the pattern it recommends.
relation (empty) → about
source_node_id (empty) → 5b801b74-0f0b-4fee-a6f8-e9ef79c6b01f
target_node_id (empty) → d9e04374-7fc6-476b-84a4-9b7d043214c9
create Declare gem runtime dependencies in the gemspec → about → gemspec
context (empty) → Takeaway about correctly using the gemspec file.
relation (empty) → about
source_node_id (empty) → 52cdf60f-1a5f-4b17-a5e1-14e7c905a93a
target_node_id (empty) → fc4368bd-58d0-484f-ac2e-2a406d12d977
create Declare gem runtime dependencies in the gemspec → about → Pundit
context (empty) → Pundit is used as the example runtime dependency.
relation (empty) → about
source_node_id (empty) → 52cdf60f-1a5f-4b17-a5e1-14e7c905a93a
target_node_id (empty) → 1ebb50fc-98ba-48a0-8720-cbf7138c2eed
create Automate the whole release workflow → about → GitHub Actions
context (empty) → Automation is done with GitHub Actions workflows.
relation (empty) → about
source_node_id (empty) → eb92c566-27c7-4e48-b9bb-288877af2c60
target_node_id (empty) → cab3bb4f-ed74-4df5-8a84-0caa6f55601c
create Engines vs namespaces for splitting a growing monolith → asked_at → How To Package A Rails Engine Generation To Automation
context (empty) → Asked during the Q&A of this talk.
relation (empty) → asked_at
source_node_id (empty) → 5f276da9-2716-4f35-9b30-3611e9552bb7
target_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
create Avoiding model duplication across engines → asked_at → How To Package A Rails Engine Generation To Automation
context (empty) → Asked during the Q&A of this talk.
relation (empty) → asked_at
source_node_id (empty) → a0eaeb65-401a-4c7c-91ac-f8193d695453
target_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
create Engines vs namespaces for splitting a growing monolith → about → Rails Engine
context (empty) → Question compares engines to simple namespaces.
relation (empty) → about
source_node_id (empty) → 5f276da9-2716-4f35-9b30-3611e9552bb7
target_node_id (empty) → f14fb5ec-30aa-4243-a312-a7379e8e9f1e
create Packaging a Rails engine that uses Webpacker → about → Rails Engine
context (empty) → Question concerns engines specifically.
relation (empty) → about
source_node_id (empty) → fa735322-95bc-4b5c-9aa7-6a194cb31afd
target_node_id (empty) → f14fb5ec-30aa-4243-a312-a7379e8e9f1e
create Avoiding model duplication across engines → about → Rails Engine
context (empty) → Question concerns sharing data across engines.
relation (empty) → about
source_node_id (empty) → a0eaeb65-401a-4c7c-91ac-f8193d695453
target_node_id (empty) → f14fb5ec-30aa-4243-a312-a7379e8e9f1e
create Avoiding model duplication across engines → about → Avo
context (empty) → Adrian's answer references how Avo avoids the issue entirely.
relation (empty) → about
source_node_id (empty) → a0eaeb65-401a-4c7c-91ac-f8193d695453
target_node_id (empty) → f523171f-5f61-4e47-a115-b99aed7b7b99
create How To Package A Rails Engine Generation To Automation → related_to → 18 months of using hotwire and viewcomponent in production
context (empty) → Adrian opens by praising Yaroslav's earlier wroclove.rb 2022 talk on ViewComponent and Hotwire.
relation (empty) → related_to
source_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) → 5d7d6506-60ed-44e3-a6f1-62858b836822
create Adrian Marin → recommends → Hotwire
context (empty) → Adrian praises Hotwire as one of the right tools in the Rails toolkit, contrasted with React.
relation (empty) → recommends
source_node_id (empty) → 3e489e95-e01d-45cd-882c-6153cf56f911
target_node_id (empty) → a0a8a415-bd9e-46ed-8ee3-8448312af347
create Adrian Marin → recommends → React
context (empty) → Adrian argues there are many tools in the toolkit — React is valid where it fits, distinct from Hotwire.
relation (empty) → recommends
source_node_id (empty) → 3e489e95-e01d-45cd-882c-6153cf56f911
target_node_id (empty) → 5026a4fc-0c6e-49d7-bb7d-29be23b72b24
create How To Package A Rails Engine Generation To Automation → about → reviewdog
context (empty) → Lint workflow uses reviewdog to post inline suggestions on PRs.
relation (empty) → about
source_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) → a35378bf-8930-4fa9-9f17-347eb0e65efb
create How To Package A Rails Engine Generation To Automation → about → Standard RB
context (empty) → Ruby linting in the engine's CI uses Standard RB via reviewdog.
relation (empty) → about
source_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) → a9fac9ee-00c0-44c0-9410-f675f13d2532
create How To Package A Rails Engine Generation To Automation → about → ESLint
context (empty) → JavaScript linting in the engine's CI uses ESLint via reviewdog.
relation (empty) → about
source_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) → 36b5493a-7fe7-4859-a03f-b185bde78260
create How To Package A Rails Engine Generation To Automation → about → Release Drafter
context (empty) → Release notes are auto-drafted using the Release Drafter action.
relation (empty) → about
source_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) → 874d545e-dbc3-452c-8ea9-130c4d72d51f
create How To Package A Rails Engine Generation To Automation → about → PR Labeler
context (empty) → Pull requests are auto-labeled using the PR Labeler action by branch prefix.
relation (empty) → about
source_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) → 29c6bc21-fcc5-4069-96b7-2e7847e79dbd
create How To Package A Rails Engine Generation To Automation → about → Codecov
context (empty) → Coverage is uploaded to Codecov via its GitHub Action.
relation (empty) → about
source_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) → 2201c788-328e-428b-9fa8-154213d7c517
create How To Package A Rails Engine Generation To Automation → about → actions/checkout
context (empty) → Used at the start of each workflow to check out the code.
relation (empty) → about
source_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) → d1bdcc04-412d-4052-b6d0-30df57ea29a1
create How To Package A Rails Engine Generation To Automation → about → ruby/setup-ruby
context (empty) → Used in the test workflow to install the matrix's Ruby version.
relation (empty) → about
source_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) → 019f78d7-9a0a-49c9-9e17-93b4b4b3a11f
create How To Package A Rails Engine Generation To Automation → about → actions/upload-artifact
context (empty) → Used to upload RSpec screenshots/html dumps from failing CI runs.
relation (empty) → about
source_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) → dc42d50d-338f-4e4c-9164-f9a25bb5a90c
create How To Package A Rails Engine Generation To Automation → about → GitHub Releases
context (empty) → Release workflow creates a GitHub Release with the gem attached.
relation (empty) → about
source_node_id (empty) → fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) → 8f18a0bd-3225-4b7c-920e-a8aed642f4a6

Read set

129 nodes

person Adrian Marin search_nodes+get_node_edges tool Avo search_nodes tool Browserslist search_nodes concept Live Reload search_nodes tool Preact search_nodes talk No-build Utopia: Modern User Experiences with Rails & Web Standards search_nodes tool Docker search_nodes takeaway Dockerize Exotic Dependencies search_nodes company Transloadit search_nodes tool dry-container search_nodes concept Direct Upload to Cloud search_nodes talk 18 months of using hotwire and viewcomponent in production search_nodes+get_node_edges talk Component Driven UI with ViewComponent search_nodes tool Hotwire search_nodes tool React search_nodes concept Virtual DOM search_nodes tool Rack search_nodes talk Towards the post framework future search_nodes tool Ember.js search_nodes tool Trailblazer search_nodes tool Hanami search_nodes tool Active Admin search_nodes person Adam Okoń search_nodes tool Rails 5.2 search_nodes tool interactor search_nodes talk When REST is Not Enough: Implementing Alternative Protocols in Ruby on Rails search_nodes tool Devise search_nodes tool Action Cable search_nodes talk Counterintuitive Rails pt. 1 search_nodes talk How To Package A Rails Engine Generation To Automation search_nodes+get_node_edges takeaway Don't modularise with microservices or engines search_nodes concept Static Page Caching via nginx search_nodes takeaway Keep Project Setup Simple search_nodes takeaway Prefer a simple top-to-bottom worker search_nodes concept Rails Reload-Safe ES Configuration search_nodes tool Heroku search_nodes concept Namespace-Based Folder Hierarchy search_nodes question What is an enterprise Rails application? search_nodes tool rails_event_store search_nodes tool GitHub Actions search_nodes concept GitHub Self-Hosted Runner search_nodes tool CircleCI search_nodes takeaway Buy Faster Hardware search_nodes takeaway Sign serverlessforruby.org petition search_nodes takeaway Stable commits enable bisect search_nodes takeaway Shared Hardware Is a 1970s Feedback Loop search_nodes talk Ever shorter feedback loop search_nodes takeaway Contribute to Arkency aggregates repository search_nodes event wroclove.rb 2022 search_nodes event wroclove.rb 2023 search_nodes event wroclove.rb 2024 search_nodes event wroclove.rb 2019 search_nodes event wroclove.rb 2018 search_nodes event wroclove.rb 2026 search_nodes event wroclove.rb 2025 search_nodes talk Building LLM powered applications in Ruby search_nodes talk Data Management With Ruby search_nodes talk Fix Production Bugs 20x Faster search_nodes project gemcheck search_nodes talk Methods Gem for Ruby Method References search_nodes talk Rubyana Gems and the Ractorous Rubetta Stones! search_nodes project granite search_nodes takeaway Stop delegating decisions to popular library authors search_nodes tool image_processing gem search_nodes tool TruffleRuby search_nodes talk Scientific Ruby Lightning Talk search_nodes talk Ruby Standard Library Hidden Gems Lightning Talk search_nodes tool Ruby search_nodes person Emiliano Della Casa search_nodes talk To Refine or Not to Refine search_nodes takeaway Adopt CSS-in-JS for modern component-based frontends search_nodes takeaway Watch WebAssembly for real performance wins search_nodes concept CSS-in-JS search_nodes tool Babel search_nodes takeaway Share Browser-Support Config Across Front-End And Back-End search_nodes project AnyCable search_nodes tool Workspaces search_nodes concept Commit Transformations search_nodes concept Push Often Behind Feature Flags search_nodes question Phrases to avoid in code review search_nodes tool git bisect search_nodes takeaway Act as a perfect tool on reviews search_nodes project Scientific Ruby Community search_nodes talk Events events events search_nodes talk International cooperation in IT teams search_nodes tool RealtimeBoard search_nodes tool Discourse search_nodes tool Crystal Ball search_nodes question Has Mutant been run against popular Ruby libraries? search_nodes tool test-prof search_nodes takeaway Cache Clear Hook Killed a Test Suite search_nodes concept Rails Testing Pyramid (Ivan's version) search_nodes concept Aggregate Test Failures search_nodes tool knapsack_pro search_nodes tool parallel_tests search_nodes question Experience with mutation testing in other ecosystems? search_nodes talk Mutant on steroids search_nodes tool Tyrant search_nodes question Isn't asking password confirmation business logic? search_nodes person Yaroslav Shmarov search_nodes talk On the tasteful journey to Yippee search_nodes talk It is not so bad, after all search_nodes talk No 'Pundit' Intended search_nodes takeaway Name Things To Find Their Properties search_nodes talk Ruby on a $4 Computer search_nodes tool mruby search_nodes talk Better WebPerformance with Rails search_nodes tool CarrierWave search_nodes talk Orchestrating video transcoding in ruby search_nodes tool carrierwave_backgrounder search_nodes tool Active Storage search_nodes tool carrierwave-video search_nodes project monolith framework search_nodes talk Nightmare neighbours caveats of Rails based mutlitenancy search_nodes question Can parts of Eventide, Rails Event Store and Trailblazer be combined in one project? search_nodes tool Apartment search_nodes concept Majestic Monolith search_nodes takeaway Read the Ruby standard library search_nodes tool ruby-contracts search_nodes takeaway Use Refinements for Coordinated Modernization search_nodes person Akira Matsuda search_nodes talk Configuration Again Lightning Talk search_nodes person Joel Drapper search_nodes tool Faker search_nodes talk Forms Are Dead: Building Agentic Workflows in Ruby search_nodes tool Plezi search_nodes tool PureScript search_nodes tool Ruby on Rails search_nodes concept Cynefin Framework search_nodes

5 edges