diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..a6e7d26 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +indent_style = tab +indent_size = 2 + +[*.{yml,yaml}] +indent_style = space +indent_size = 2 diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 0000000..1de68b2 --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,20 @@ +# GitHub Copilot Instructions + +## Use Agent Context + +When working on this project, consult the `agents.md` file for project-specific guidelines, architecture decisions, and development patterns. This file contains curated information that will help you make better decisions aligned with the project's goals and standards. + +If the file does not exist, you will need to install it, by running the following command: + +```bash +$ bundle install +$ bundle exec bake agent:context:install +``` + +This command will set up the necessary context files that help you understand the project structure, dependencies, and conventions. + +## Ignoring Files + +The `.gitignore` file is split into two sections, separated by a blank line. The first section is automatically generated, while the second section is user controlled. + +While working on pull requests, you should not add unrelated changes to the `.gitignore` file as part of the pull request. diff --git a/.github/release-rules/checks.json b/.github/release-rules/checks.json index 0be6e5a..31b7ef6 100644 --- a/.github/release-rules/checks.json +++ b/.github/release-rules/checks.json @@ -25,16 +25,25 @@ "do_not_enforce_on_create": false, "required_status_checks": [ { - "context": "Test Ruby 3.3" + "context": "3.3 on ubuntu" }, { - "context": "Test Ruby 3.4" + "context": "3.3 on macos" }, { - "context": "Test Ruby 4.0" + "context": "3.4 on ubuntu" }, { - "context": "RuboCop" + "context": "3.4 on macos" + }, + { + "context": "4.0 on ubuntu" + }, + { + "context": "4.0 on macos" + }, + { + "context": "check" }, { "context": "ruby on ubuntu" diff --git a/.github/workflows/documentation.yaml b/.github/workflows/documentation.yaml new file mode 100644 index 0000000..a6013fc --- /dev/null +++ b/.github/workflows/documentation.yaml @@ -0,0 +1,58 @@ +name: Documentation + +on: + push: + branches: + - main + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages: +permissions: + contents: read + pages: write + id-token: write + +# Allow one concurrent deployment: +concurrency: + group: "pages" + cancel-in-progress: true + +env: + BUNDLE_WITH: maintenance + +jobs: + generate: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v7 + + - uses: ruby/setup-ruby@v1 + with: + ruby-version: ruby + bundler-cache: true + + - name: Installing packages + run: sudo apt-get install wget + + - name: Generate documentation + timeout-minutes: 5 + run: bundle exec bake utopia:project:static --force no + + - name: Upload documentation artifact + uses: actions/upload-pages-artifact@v5 + with: + path: docs + + deploy: + runs-on: ubuntu-latest + + environment: + name: github-pages + url: ${{steps.deployment.outputs.page_url}} + + needs: generate + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v5 diff --git a/.github/workflows/rubocop.yaml b/.github/workflows/rubocop.yaml index be83c16..03e44d5 100644 --- a/.github/workflows/rubocop.yaml +++ b/.github/workflows/rubocop.yaml @@ -7,14 +7,15 @@ permissions: jobs: check: - name: RuboCop runs-on: ubuntu-latest + steps: - - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6 - - uses: ruby/setup-ruby@a0102e0972be65f351c307e2d64b9314a57c8073 # v1 - with: - ruby-version: "3.4" - bundler-cache: true - - name: Check Ruby and documentation style - timeout-minutes: 10 - run: bundle exec rubocop + - uses: actions/checkout@v7 + - uses: ruby/setup-ruby@v1 + with: + ruby-version: ruby + bundler-cache: true + + - name: Run RuboCop + timeout-minutes: 10 + run: bundle exec rubocop diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index ddd6ab8..964a4bb 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -7,18 +7,35 @@ permissions: jobs: test: - name: Test Ruby ${{ matrix.ruby }} - runs-on: ubuntu-latest + name: ${{matrix.ruby}} on ${{matrix.os}} + runs-on: ${{matrix.os}}-latest + continue-on-error: ${{matrix.experimental}} + strategy: - fail-fast: false matrix: - ruby: ["3.3", "3.4", "4.0"] + os: + - ubuntu + - macos + + ruby: + - "3.3" + - "3.4" + - "4.0" + + experimental: [false] + + include: + - os: ubuntu + ruby: head + experimental: true + steps: - - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6 - - uses: ruby/setup-ruby@a0102e0972be65f351c307e2d64b9314a57c8073 # v1 - with: - ruby-version: ${{ matrix.ruby }} - bundler-cache: true - - name: Run tests - timeout-minutes: 10 - run: bundle exec sus-parallel + - uses: actions/checkout@v7 + - uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{matrix.ruby}} + bundler-cache: true + + - name: Run tests + timeout-minutes: 10 + run: bundle exec bake test diff --git a/.gitignore b/.gitignore index 0177f6c..937549c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,10 @@ -/.bundle/ -/.context/ -/.covered.db -/coverage/ +/agents.md +/.agents/ +/.bundle +/pkg /gems.locked -/pkg/ +/.covered.db +/external + +# Installed by ruby/setup-ruby with bundler-cache enabled: /vendor/bundle/ diff --git a/agents.md b/agents.md deleted file mode 100644 index d8ab4c9..0000000 --- a/agents.md +++ /dev/null @@ -1,437 +0,0 @@ -# Agent - -## Context - -This section provides links to documentation from installed packages. It is automatically generated and may be updated by running `bake agent:context:install`. - -**Important:** Before performing any code, documentation, or analysis tasks, always read and apply the full content of any relevant documentation referenced in the following sections. These context files contain authoritative standards and best practices for documentation, code style, and project-specific workflows. **Do not proceed with any actions until you have read and incorporated the guidance from relevant context files.** - -**Setup Instructions:** If the referenced files are not present or if dependencies have been updated, run `bake agent:context:install` to install the latest context files. - -### agent-context - -Install and manage context files from Ruby gems. - -#### [Getting Started](.context/agent-context/getting-started.md) - -This guide explains how to use `agent-context`, a tool for discovering and installing contextual information from Ruby gems to help AI agents. - -### async - -A concurrency framework for Ruby. - -#### [Getting Started](.context/async/getting-started.md) - -This guide shows how to add async to your project and run code asynchronously. - -#### [Scheduler](.context/async/scheduler.md) - -This guide gives an overview of how the scheduler is implemented. - -#### [Tasks](.context/async/tasks.md) - -This guide explains how asynchronous tasks work and how to use them. - -#### [Best Practices](.context/async/best-practices.md) - -This guide gives an overview of best practices for using Async. - -#### [Debugging](.context/async/debugging.md) - -This guide explains how to debug issues with programs that use Async. - -#### [Thread safety](.context/async/thread-safety.md) - -This guide explains thread safety in Ruby, focusing on fibers and threads, common pitfalls, and best practices to avoid problems like data corruption, race conditions, and deadlocks. - -### async-container - -Abstract container-based parallelism using threads and processes where appropriate. - -#### [Getting Started](.context/async-container/getting-started.md) - -This guide explains how to use `async-container` to build basic scalable systems. - -#### [Container Policies](.context/async-container/policies.md) - -This guide explains how to use policies to monitor container health and implement custom failure handling strategies. - -#### [Systemd Integration](.context/async-container/systemd-integration.md) - -This guide explains how to use `async-container` with systemd to manage your application as a service. - -#### [Kubernetes Integration](.context/async-container/kubernetes-integration.md) - -This guide explains how to use `async-container` with Kubernetes to manage your application as a containerized service. - -### async-http - -A HTTP client and server library. - -#### [Getting Started](.context/async-http/getting-started.md) - -This guide explains how to make HTTP requests and serve HTTP responses with `Async::HTTP`. - -#### [Choosing a Client](.context/async-http/choosing-a-client.md) - -This guide explains how to choose between ruby:`Async::HTTP::Internet`, ruby:`Async::HTTP::Client`, and higher-level interfaces for libraries. - -#### [Concurrent Requests and Connection Pooling](.context/async-http/concurrent-requests.md) - -This guide explains how to run HTTP requests concurrently while keeping request fan-out, connection usage, and resource life cycles bounded. - -#### [Testing](.context/async-http/testing.md) - -This guide explains how to test `Async::HTTP` clients and servers without depending on external HTTP services. - -### async-http-cache - -Standard-compliant cache for async-http. - -#### [Getting Started](.context/async-http-cache/getting-started.md) - -This guide explains how to get started with `async-http-cache`, a cache middleware for `Async::HTTP` clients and servers. - -### async-service - -A service layer for Async. - -#### [Getting Started](.context/async-service/getting-started.md) - -This guide explains how to get started with `async-service` to create and run services in Ruby. - -#### [Container Policies](.context/async-service/policies.md) - -This guide explains how to configure container policies for your services and understand the default failure handling behavior. - -#### [Service Architecture](.context/async-service/service-architecture.md) - -This guide explains the key architectural components of `async-service` and how they work together to provide a clean separation of concerns. - -#### [Best Practices](.context/async-service/best-practices.md) - -This guide outlines recommended patterns and practices for building robust, maintainable services with `async-service`. - -#### [Deployment](.context/async-service/deployment.md) - -This guide explains how to deploy `async-service` applications using systemd and Kubernetes. We'll use a simple example service to demonstrate deployment configurations. - -### bake - -A replacement for rake with a simpler syntax. - -#### [Getting Started](.context/bake/getting-started.md) - -This guide gives a general overview of `bake` and how to use it. - -#### [Command Line Interface](.context/bake/command-line-interface.md) - -The `bake` command is broken up into two main functions: `list` and `call`. - -#### [Project Integration](.context/bake/project-integration.md) - -This guide explains how to add `bake` to a Ruby project. - -#### [Gem Integration](.context/bake/gem-integration.md) - -This guide explains how to add `bake` to a Ruby gem and export standardised tasks for use by other gems and projects. - -#### [Input and Output](.context/bake/input-and-output.md) - -`bake` has built in tasks for reading input and writing output in different formats. While this can be useful for general processing, there are some limitations, notably that rich object representations like `json` and `yaml` often don't support stream processing. - -### bake-gem - -Release management for Ruby gems. - -#### [Getting Started](.context/bake-gem/getting-started.md) - -This guide explains how to use `bake-gem` to release gems safely and efficiently. - -### bake-releases - -Releases document management. - -#### [Getting Started](.context/bake-releases/getting-started.md) - -This guide explains how to use `bake-releases` to manage release documentation for your Ruby gem. - -### console - -Beautiful logging for Ruby. - -#### [Getting Started](.context/console/getting-started.md) - -This guide explains how to use `console` for logging. - -#### [Command Line](.context/console/command-line.md) - -This guide explains how the `console` gem can be controlled using environment variables. - -#### [Configuration](.context/console/configuration.md) - -This guide explains how to implement per-project configuration for the `console` gem. - -#### [Integration](.context/console/integration.md) - -This guide explains how to integrate the `console` output into different systems. - -#### [Events](.context/console/events.md) - -This guide explains how to log structured events with a well-defined schema. - -### decode - -Code analysis for documentation generation. - -#### [Getting Started](.context/decode/getting-started.md) - -This guide explains how to use `decode` for source code analysis. - -#### [Documentation Coverage](.context/decode/documentation-coverage.md) - -This guide explains how to test and monitor documentation coverage in your Ruby projects using the Decode gem's built-in bake tasks. - -#### [Ruby Documentation](.context/decode/ruby-documentation.md) - -This guide covers documentation practices and pragmas supported by the Decode gem for documenting Ruby code. These pragmas provide structured documentation that can be parsed and used to generate API documentation and achieve complete documentation coverage. - -### falcon - -A fast, asynchronous, rack-compatible web server. - -#### [Getting Started](.context/falcon/getting-started.md) - -This guide gives an overview of how to use Falcon for running Ruby web applications. - -#### [Rails Integration](.context/falcon/rails-integration.md) - -This guide explains how to host Rails applications with Falcon. - -#### [Deployment](.context/falcon/deployment.md) - -This guide explains how to deploy applications using the Falcon web server. It covers the recommended deployment methods, configuration options, and examples for different environments, including systemd and kubernetes. - -#### [Dynamic Clusters with Envoy](.context/falcon/cluster-deployment.md) - -This guide explains how to run Falcon workers with independently bound endpoints, publish them dynamically using xDS, and balance requests according to their current load using ORCA. - -#### [Performance Tuning](.context/falcon/performance-tuning.md) - -This guide explains the performance characteristics of Falcon. - -#### [WebSockets](.context/falcon/websockets.md) - -This guide explains how to use WebSockets with Falcon. - -#### [Interim Responses](.context/falcon/interim-responses.md) - -This guide explains how to use interim responses in Falcon to send early hints to the client. - -#### [How It Works](.context/falcon/how-it-works.md) - -This guide gives an overview of how Falcon handles an incoming web request. - -### io-endpoint - -Provides a separation of concerns interface for IO endpoints. - -#### [Getting Started](.context/io-endpoint/getting-started.md) - -This guide explains how to get started with `io-endpoint`, a library that provides a separation of concerns interface for network I/O endpoints. - -#### [Named Endpoints](.context/io-endpoint/named-endpoints.md) - -This guide explains how to use `IO::Endpoint::NamedEndpoints` to manage multiple endpoints by name, enabling scenarios like running the same application on different protocols or ports. - -### io-event - -An event loop. - -#### [Getting Started](.context/io-event/getting-started.md) - -This guide explains how to use `io-event` for non-blocking IO. - -### io-stream - -Provides a generic stream wrapper for IO instances. - -#### [Getting Started](.context/io-stream/getting-started.md) - -This guide explains how to use `io-stream` to add efficient buffering to Ruby IO objects. - -#### [High Performance IO](.context/io-stream/high-performance-io.md) - -This guide explains how to achieve optimal performance when using `io-stream` by understanding and controlling flush behavior. - -### markly - -CommonMark parser and renderer. Written in C, wrapped in Ruby. - -#### [Getting Started](.context/markly/getting-started.md) - -This guide explains now to install and use Markly. - -#### [Extensions](.context/markly/extensions.md) - -This guide explains how to enable and use Markly's Markdown extensions. - -#### [Abstract Syntax Tree](.context/markly/abstract-syntax-tree.md) - -This guide explains how to use Markly's abstract syntax tree (AST) to parse and manipulate Markdown documents. - -#### [Headings](.context/markly/headings.md) - -This guide explains how to work with headings in Markly, including extracting them for navigation and handling duplicate heading text. - -### protocol-http - -Provides abstractions to handle HTTP protocols. - -#### [Getting Started](.context/protocol-http/getting-started.md) - -This guide explains how to use `protocol-http` for building abstract HTTP interfaces. - -#### [Message Body](.context/protocol-http/message-body.md) - -This guide explains how to work with HTTP request and response message bodies using `Protocol::HTTP::Body` classes. - -#### [Headers](.context/protocol-http/headers.md) - -This guide explains how to work with HTTP headers using `protocol-http`. - -#### [Middleware](.context/protocol-http/middleware.md) - -This guide explains how to build and use HTTP middleware with `Protocol::HTTP::Middleware`. - -#### [Streaming](.context/protocol-http/streaming.md) - -This guide gives an overview of how to implement streaming requests and responses. - -#### [Design Overview](.context/protocol-http/design-overview.md) - -This guide explains the high level design of `protocol-http` in the context of wider design patterns that can be used to implement HTTP clients and servers. - -### protocol-http1 - -A low level implementation of the HTTP/1 protocol. - -#### [Getting Started](.context/protocol-http1/getting-started.md) - -This guide explains how to get started with `protocol-http1`, a low-level implementation of the HTTP/1 protocol for building HTTP clients and servers. - -### protocol-http2 - -A low level implementation of the HTTP/2 protocol. - -#### [Getting Started](.context/protocol-http2/getting-started.md) - -This guide explains how to use the `protocol-http2` gem to implement a basic HTTP/2 client. - -### protocol-rack - -An implementation of the Rack protocol/specification. - -#### [Getting Started](.context/protocol-rack/getting-started.md) - -This guide explains how to get started with `protocol-rack` and integrate Rack applications with `Protocol::HTTP` servers. - -#### [Request and Response Handling](.context/protocol-rack/request-response.md) - -This guide explains how to work with requests and responses when bridging between Rack and `Protocol::HTTP`, covering advanced use cases and edge cases. - -### samovar - -Samovar is a flexible option parser excellent support for sub-commands and help documentation. - -#### [Getting Started](.context/samovar/getting-started.md) - -This guide explains how to use `samovar` to build command-line tools and applications. - -#### [Completion](.context/samovar/completion.md) - -This guide explains how to add shell completion to commands built with `samovar`. - -### sus - -A fast and scalable test runner. - -#### [Getting Started](.context/sus/getting-started.md) - -This guide explains how to use the `sus` gem to write tests for your Ruby projects. - -#### [Mocking](.context/sus/mocking.md) - -This guide explains how to use mocking in sus to isolate dependencies and verify interactions in your tests. - -#### [Shared Test Behaviors and Fixtures](.context/sus/shared-contexts.md) - -This guide explains how to use shared test contexts and fixtures in sus to reduce duplication and ensure consistent test behavior across your test suite. - -### traces - -Application instrumentation and tracing. - -#### [Getting Started](.context/traces/getting-started.md) - -This guide explains how to use `traces` for tracing code execution. - -#### [Context Propagation](.context/traces/context-propagation.md) - -This guide explains how to propagate trace context between different execution contexts within your application using `Traces.current_context` and `Traces.with_context`. - -#### [Testing](.context/traces/testing.md) - -This guide explains how to test traces in your code. - -#### [Capture](.context/traces/capture.md) - -This guide explains how to use `traces` for exporting traces from your application. This can be used to document all possible traces. - -### utopia - -Utopia is a framework for building dynamic content-driven websites. - -#### [Getting Started](.context/utopia/getting-started.md) - -This guide explains how to set up a `utopia` website for local development and deployment. - -#### [Middleware](.context/utopia/middleware.md) - -This guide gives an overview of the different middleware used by Utopia. - -#### [Server Setup](.context/utopia/server-setup.md) - -This guide explains how to deploy a `utopia` web application. - -#### [Integrating with JavaScript](.context/utopia/integrating-with-javascript.md) - -This guide explains how to integrate JavaScript into your Utopia application. - -#### [What is XNode?](.context/utopia/what-is-xnode.md) - -This guide explains the `xnode` view layer and how it can be used to build efficient websites. - -#### [Updating Utopia](.context/utopia/updating-utopia.md) - -This guide explains how to update existing `utopia` websites. - -### utopia-project - -A project documentation tool based on Utopia. - -#### [Getting Started](.context/utopia-project/getting-started.md) - -This guide explains how to use `utopia-project` to add documentation to your project. - -#### [Documentation Guides](.context/utopia-project/documentation-guidelines.md) - -This guide explains how to create and maintain documentation for your project using `utopia-project`. - -#### [Mermaid Diagrams](.context/utopia-project/mermaid-diagrams.md) - -This guide explains how to use Mermaid diagrams in your documentation to visualize complex relationships, flows, and architectures. - -#### [GitHub Pages Integration](.context/utopia-project/github-pages-integration.md) - -This guide shows you how to use `utopia-project` with GitHub Pages to deploy documentation. diff --git a/bake-gem-github.gemspec b/bake-gem-github.gemspec index 6597c27..f5c0f80 100644 --- a/bake-gem-github.gemspec +++ b/bake-gem-github.gemspec @@ -9,6 +9,11 @@ Gem::Specification.new do |spec| spec.authors = ["Samuel Williams"] spec.license = "MIT" spec.homepage = "https://github.com/socketry/bake-gem-github" + spec.metadata = { + "bug_tracker_uri" => "https://github.com/socketry/bake-gem-github/issues", + "changelog_uri" => "https://github.com/socketry/bake-gem-github/blob/main/releases.md", + "source_code_uri" => "https://github.com/socketry/bake-gem-github.git", + } spec.cert_chain = ["release.cert"] spec.signing_key = File.expand_path("~/.gem/socketry-release.pem") spec.files = Dir.glob(["{bake,context,lib,templates}/**/*", "*.md", "release.cert"], base: __dir__) diff --git a/config/release.yaml b/config/release.yaml index 2a2fef6..c7e0244 100644 --- a/config/release.yaml +++ b/config/release.yaml @@ -3,10 +3,13 @@ schema: 1 repository: socketry/bake-gem-github branch: main checks: -- Test Ruby 3.3 -- Test Ruby 3.4 -- Test Ruby 4.0 -- RuboCop +- 3.3 on ubuntu +- 3.3 on macos +- 3.4 on ubuntu +- 3.4 on macos +- 4.0 on ubuntu +- 4.0 on macos +- check - ruby on ubuntu - ruby on macos - validate diff --git a/context/getting-started.md b/context/getting-started.md index b122062..56d1443 100644 --- a/context/getting-started.md +++ b/context/getting-started.md @@ -13,11 +13,13 @@ Use one gemspec, a stable three-part version in `lib/.../version.rb`, and repeat Run setup in each repository. It discovers the canonical repository and default branch through `gh` and generates reviewable local files. Supply the actual required CI job names, including supported matrix entries: ``` bash -bundle exec bake gem:github:setup checks="Test Ruby 3.3,Test Ruby 3.4,RuboCop" +bundle exec bake gem:github:setup checks="3.3 on ubuntu,3.3 on macos,3.4 on ubuntu,3.4 on macos,4.0 on ubuntu,4.0 on macos,check,ruby on ubuntu,ruby on macos,validate" bundle exec bake agent:context:install bundle exec bake gem:github:setup:plan ``` +This example uses the job names from the standard `bake modernize` test, RuboCop, and coverage workflows. Select the checks actually produced by your repository; experimental Ruby jobs are not required. When changing workflow job names, update `config/release.yaml` and apply the corresponding rulesets so required checks keep matching the workflows. + Setup adds three release workflows, `config/release.yaml`, and native ruleset payloads. Identical reruns do nothing; conflicting existing files stop before any file is written. Setup does not replace other publishers: remove conflicting release workflows during migration. To adopt template fixes after upgrading the gem, start from a clean working tree, edit `config/release.yaml` as needed, and regenerate: diff --git a/context/index.yaml b/context/index.yaml index fe1cab0..96daace 100644 --- a/context/index.yaml +++ b/context/index.yaml @@ -2,7 +2,10 @@ # Do not edit then files in this directory directly, instead edit the guides and then run `bake utopia:project:agent:context:update`. --- description: Reviewable GitHub releases for Ruby gems. -metadata: {} +metadata: + bug_tracker_uri: https://github.com/socketry/bake-gem-github/issues + changelog_uri: https://github.com/socketry/bake-gem-github/blob/main/releases.md + source_code_uri: https://github.com/socketry/bake-gem-github.git files: - path: getting-started.md title: GitHub Releases diff --git a/gems.rb b/gems.rb index 33a7fab..4889dba 100644 --- a/gems.rb +++ b/gems.rb @@ -15,5 +15,6 @@ group :maintenance, optional: true do gem "agent-context" + gem "decode" gem "utopia-project" end diff --git a/guides/getting-started/readme.md b/guides/getting-started/readme.md index b122062..56d1443 100644 --- a/guides/getting-started/readme.md +++ b/guides/getting-started/readme.md @@ -13,11 +13,13 @@ Use one gemspec, a stable three-part version in `lib/.../version.rb`, and repeat Run setup in each repository. It discovers the canonical repository and default branch through `gh` and generates reviewable local files. Supply the actual required CI job names, including supported matrix entries: ``` bash -bundle exec bake gem:github:setup checks="Test Ruby 3.3,Test Ruby 3.4,RuboCop" +bundle exec bake gem:github:setup checks="3.3 on ubuntu,3.3 on macos,3.4 on ubuntu,3.4 on macos,4.0 on ubuntu,4.0 on macos,check,ruby on ubuntu,ruby on macos,validate" bundle exec bake agent:context:install bundle exec bake gem:github:setup:plan ``` +This example uses the job names from the standard `bake modernize` test, RuboCop, and coverage workflows. Select the checks actually produced by your repository; experimental Ruby jobs are not required. When changing workflow job names, update `config/release.yaml` and apply the corresponding rulesets so required checks keep matching the workflows. + Setup adds three release workflows, `config/release.yaml`, and native ruleset payloads. Identical reruns do nothing; conflicting existing files stop before any file is written. Setup does not replace other publishers: remove conflicting release workflows during migration. To adopt template fixes after upgrading the gem, start from a clean working tree, edit `config/release.yaml` as needed, and regenerate: diff --git a/readme.md b/readme.md index d35268c..2764242 100644 --- a/readme.md +++ b/readme.md @@ -7,7 +7,7 @@ Reviewed GitHub releases for Ruby gems, using `bake-gem` for branch preparation, - `gem:github:setup:plan` / `apply`: inspect and apply the managed GitHub rulesets. - `gem:github:release:resume run=ID`: retry with the original artifact. -Read [the setup, release and recovery guide](guides/getting-started/readme.md) before enabling publishing. Context is distributed through `agent-context`. This initial implementation requires `bake-gem` 0.15 or later and a live pilot before wider rollout. +Read [the setup, release and recovery guide](https://github.com/socketry/bake-gem-github/blob/main/guides/getting-started/readme.md) before enabling publishing. Context is distributed through `agent-context`. This initial implementation requires `bake-gem` 0.15 or later and a live pilot before wider rollout. ## Making Releases @@ -18,3 +18,11 @@ $ bundle exec bake gem:github:release:patch # or minor or major ``` See [bake-gem-github](https://github.com/socketry/bake-gem-github) for setup, remote releases, and recovery. + +## Development + +Run `bundle exec bake test` for the test suite and `bundle exec rubocop` for style checks. The test, coverage, documentation, and RuboCop workflows follow `bake modernize` conventions. + +Install maintenance dependencies with `BUNDLE_WITH=maintenance bundle install`, then run `BUNDLE_WITH=maintenance bundle exec bake agent:context:install` for local agent guidance. Generated `agents.md` and `.agents/context/` files are ignored. + +Review modernization changes before committing them. Retain the Socketry certificate, the `~/.gem/socketry-release.pem` signing key path, and packaged release templates. Publishing is handled by `release-publish.yaml`; do not add a second publishing hook to `bake.rb`.