timecop-rspec 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data/.devcontainer/devcontainer.json +26 -0
  4. data/.env.local.example +3 -0
  5. data/.envrc +41 -0
  6. data/.github/FUNDING.yml +13 -0
  7. data/.github/dependabot.yml +12 -0
  8. data/.github/workflows/ancient.yml +77 -0
  9. data/.github/workflows/auto-assign.yml +21 -0
  10. data/.github/workflows/codeql-analysis.yml +70 -0
  11. data/.github/workflows/coverage.yml +126 -0
  12. data/.github/workflows/current.yml +85 -0
  13. data/.github/workflows/dependency-review.yml +20 -0
  14. data/.github/workflows/deps_locked.yml +75 -0
  15. data/.github/workflows/deps_unlocked.yml +84 -0
  16. data/.github/workflows/discord-notifier.yml +38 -0
  17. data/.github/workflows/heads.yml +84 -0
  18. data/.github/workflows/jruby.yml +75 -0
  19. data/.github/workflows/legacy.yml +67 -0
  20. data/.github/workflows/style.yml +64 -0
  21. data/.github/workflows/supported.yml +82 -0
  22. data/.github/workflows/truffle.yml +75 -0
  23. data/.github/workflows/unsupported.yml +75 -0
  24. data/.gitignore +45 -0
  25. data/.gitlab-ci.yml +44 -0
  26. data/.idea/.gitignore +8 -0
  27. data/.idea/GitLink.xml +6 -0
  28. data/.idea/misc.xml +4 -0
  29. data/.idea/modules.xml +8 -0
  30. data/.idea/timecop-rspec.iml +120 -0
  31. data/.idea/vcs.xml +6 -0
  32. data/.junie/TASK_NOTE.md +1 -0
  33. data/.junie/guidelines.md +139 -0
  34. data/.qlty/qlty.toml +79 -0
  35. data/.rspec +8 -0
  36. data/.rubocop.yml +15 -0
  37. data/.rubocop_gradual.lock +76 -0
  38. data/.simplecov +11 -0
  39. data/.tool-versions +1 -0
  40. data/.yard_gfm_support.rb +22 -0
  41. data/.yardopts +11 -0
  42. data/Appraisal.root.gemfile +12 -0
  43. data/Appraisals +104 -0
  44. data/CHANGELOG.md +27 -0
  45. data/CITATION.cff +20 -0
  46. data/CNAME +1 -0
  47. data/CODE_OF_CONDUCT.md +134 -0
  48. data/CONTRIBUTING.md +145 -0
  49. data/Gemfile +38 -0
  50. data/Gemfile.lock +315 -0
  51. data/LICENSE.txt +22 -0
  52. data/README.md +563 -0
  53. data/REEK +0 -0
  54. data/RUBOCOP.md +71 -0
  55. data/Rakefile +287 -0
  56. data/SECURITY.md +21 -0
  57. data/bin/appraisal +16 -0
  58. data/bin/bundle-audit +16 -0
  59. data/bin/bundler-audit +16 -0
  60. data/bin/code_climate_reek +16 -0
  61. data/bin/coderay +16 -0
  62. data/bin/console +38 -0
  63. data/bin/erb +16 -0
  64. data/bin/gem_checksums +16 -0
  65. data/bin/htmldiff +16 -0
  66. data/bin/irb +16 -0
  67. data/bin/kramdown +16 -0
  68. data/bin/ldiff +16 -0
  69. data/bin/nokogiri +16 -0
  70. data/bin/pry +16 -0
  71. data/bin/racc +16 -0
  72. data/bin/rake +16 -0
  73. data/bin/rdbg +16 -0
  74. data/bin/rdoc +16 -0
  75. data/bin/reek +16 -0
  76. data/bin/ri +16 -0
  77. data/bin/rspec +16 -0
  78. data/bin/rubocop +16 -0
  79. data/bin/rubocop-gradual +16 -0
  80. data/bin/ruby-parse +16 -0
  81. data/bin/ruby-rewrite +16 -0
  82. data/bin/setup +33 -0
  83. data/bin/standardrb +16 -0
  84. data/bin/thor +16 -0
  85. data/bin/yard +16 -0
  86. data/bin/yard-junk +16 -0
  87. data/bin/yardoc +16 -0
  88. data/bin/yri +16 -0
  89. data/certs/pboling.pem +27 -0
  90. data/checksums/timecop-rspec-1.0.0.gem.sha256 +1 -0
  91. data/checksums/timecop-rspec-1.0.0.gem.sha512 +1 -0
  92. data/docs/Timecop/Rspec/ExampleDecorator.html +626 -0
  93. data/docs/Timecop/Rspec/SequentialTimeMachine.html +338 -0
  94. data/docs/Timecop/Rspec/TimeMachine.html +357 -0
  95. data/docs/Timecop/Rspec/TravelLog.html +440 -0
  96. data/docs/Timecop/Rspec/Traveler.html +353 -0
  97. data/docs/Timecop/Rspec/Version.html +154 -0
  98. data/docs/Timecop/Rspec.html +474 -0
  99. data/docs/Timecop.html +149 -0
  100. data/docs/_index.html +218 -0
  101. data/docs/class_list.html +54 -0
  102. data/docs/css/common.css +1 -0
  103. data/docs/css/full_list.css +58 -0
  104. data/docs/css/style.css +503 -0
  105. data/docs/file.CHANGELOG.html +99 -0
  106. data/docs/file.CITATION.html +92 -0
  107. data/docs/file.CODE_OF_CONDUCT.html +201 -0
  108. data/docs/file.CONTRIBUTING.html +220 -0
  109. data/docs/file.LICENSE.html +70 -0
  110. data/docs/file.README.html +523 -0
  111. data/docs/file.REEK.html +71 -0
  112. data/docs/file.RUBOCOP.html +171 -0
  113. data/docs/file.SECURITY.html +101 -0
  114. data/docs/file.rspec.html +109 -0
  115. data/docs/file.timecop.html +72 -0
  116. data/docs/file_list.html +109 -0
  117. data/docs/frames.html +22 -0
  118. data/docs/index.html +523 -0
  119. data/docs/js/app.js +344 -0
  120. data/docs/js/full_list.js +242 -0
  121. data/docs/js/jquery.js +4 -0
  122. data/docs/method_list.html +198 -0
  123. data/docs/top-level-namespace.html +110 -0
  124. data/gemfiles/audit.gemfile +10 -0
  125. data/gemfiles/coverage.gemfile +10 -0
  126. data/gemfiles/current.gemfile +8 -0
  127. data/gemfiles/deps_unlocked.gemfile +13 -0
  128. data/gemfiles/head.gemfile +9 -0
  129. data/gemfiles/modular/audit.gemfile +5 -0
  130. data/gemfiles/modular/coverage.gemfile +6 -0
  131. data/gemfiles/modular/documentation.gemfile +11 -0
  132. data/gemfiles/modular/style.gemfile +14 -0
  133. data/gemfiles/ruby_2_3.gemfile +5 -0
  134. data/gemfiles/ruby_2_4.gemfile +5 -0
  135. data/gemfiles/ruby_2_5.gemfile +5 -0
  136. data/gemfiles/ruby_2_6.gemfile +8 -0
  137. data/gemfiles/ruby_2_7.gemfile +8 -0
  138. data/gemfiles/ruby_3_0.gemfile +8 -0
  139. data/gemfiles/ruby_3_1.gemfile +8 -0
  140. data/gemfiles/ruby_3_2.gemfile +8 -0
  141. data/gemfiles/ruby_3_3.gemfile +8 -0
  142. data/gemfiles/style.gemfile +10 -0
  143. data/lib/timecop/rspec/example_decorator.rb +100 -0
  144. data/lib/timecop/rspec/sequential_time_machine.rb +80 -0
  145. data/lib/timecop/rspec/time_machine.rb +58 -0
  146. data/lib/timecop/rspec/travel_log.rb +103 -0
  147. data/lib/timecop/rspec/traveler.rb +68 -0
  148. data/lib/timecop/rspec/version.rb +37 -0
  149. data/lib/timecop/rspec.rb +78 -0
  150. data/sig/timecop/rspec.rbs +40 -0
  151. data/sig/timecop.rbs +2 -0
  152. data/timecop-rspec.gemspec +146 -0
  153. data.tar.gz.sig +2 -0
  154. metadata +434 -0
  155. metadata.gz.sig +0 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: b0b99b69676557af87435fb8012c3feb93de4352513ff78599b70827258d2578
4
+ data.tar.gz: 5bd14a0372b799d03e5abb3036bb8e640b8c7fde4b18799916eea7c448ef940c
5
+ SHA512:
6
+ metadata.gz: fcfd7f24ad4936b9fa66c7d872a3a9aab716047f7b6b645a9459ee1c29ea2078173bfb6569e77107f084a76441765bb2b2c881c0edbe45fb0002c715373015a5
7
+ data.tar.gz: 7c7cb35639fb218509c069eadcf073fc3730295d6009f996b0808a3afaea905957f356150655288cd753af46c87cee4513529ff735939d99a36138f22df8c8cd
checksums.yaml.gz.sig ADDED
Binary file
@@ -0,0 +1,26 @@
1
+ // For format details, see https://aka.ms/devcontainer.json. For config options, see the
2
+ // README at: https://github.com/devcontainers/templates/tree/main/src/ruby
3
+ {
4
+ "name": "Ruby",
5
+ // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
6
+ "image": "mcr.microsoft.com/devcontainers/ruby:1-3-bookworm",
7
+
8
+ // Features to add to the dev container. More info: https://containers.dev/features.
9
+ // "features": {},
10
+
11
+ // Use 'forwardPorts' to make a list of ports inside the container available locally.
12
+ // "forwardPorts": [],
13
+
14
+ // Use 'postCreateCommand' to run commands after the container is created.
15
+ // "postCreateCommand": "ruby --version",
16
+
17
+ // Configure tool-specific properties.
18
+ "customizations" : {
19
+ "jetbrains" : {
20
+ "backend" : "RubyMine"
21
+ }
22
+ },
23
+
24
+ // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
25
+ // "remoteUser": "root"
26
+ }
@@ -0,0 +1,3 @@
1
+ export DEBUG=false # do not allow byebug statements (override in .env.local)
2
+ export FLOSS_FUNDING_DEBUG=false # extra logging to help diagnose issues (override in .env.local)
3
+ export AUTOGEN_FIXTURE_CLEANUP=false # autogenerated gem fixture cleanup after every RSpec run
data/.envrc ADDED
@@ -0,0 +1,41 @@
1
+ # Run any command in this library's bin/ without the bin/ prefix!
2
+ PATH_add bin
3
+
4
+ # Only add things to this file that should be shared with the team.
5
+
6
+ # **dotenv** (See end of file for .env.local integration)
7
+ # .env would override anything in this file, if enabled.
8
+ # .env is a DOCKER standard, and if we use it, it would be in deployed, or DOCKER, environments.
9
+ # Override and customize anything below in your own .env.local
10
+ # If you are using dotenv and not direnv,
11
+ # copy the following `export` statements to your own .env file.
12
+
13
+ ### General Ruby ###
14
+ # Turn off Ruby Warnings about deprecated code
15
+ # export RUBYOPT="-W0"
16
+
17
+ ### External Testing Controls
18
+ export K_SOUP_COV_DO=true # Means you want code coverage
19
+ # Available formats are html, xml, rcov, lcov, json, tty
20
+ export K_SOUP_COV_COMMAND_NAME="Test Coverage"
21
+ export K_SOUP_COV_FORMATTERS="html,xml,rcov,lcov,json,tty"
22
+ export K_SOUP_COV_MIN_BRANCH=92 # Means you want to enforce X% branch coverage
23
+ export K_SOUP_COV_MIN_LINE=100 # Means you want to enforce X% line coverage
24
+ export K_SOUP_COV_MIN_HARD=true # Means you want the build to fail if the coverage thresholds are not met
25
+ export K_SOUP_COV_MULTI_FORMATTERS=true
26
+ export K_SOUP_COV_OPEN_BIN= # Means don't try to open coverage results in browser
27
+ export MAX_ROWS=1 # Setting for simplecov-console gem for tty output, limits to the worst N rows of bad coverage
28
+
29
+ # Internal Debugging Controls
30
+ export DEBUG=false # do not allow byebug statements (override in .env.local)
31
+ export FLOSS_FUNDING_DEBUG=false # extra logging to help diagnose issues (override in .env.local)
32
+ export AUTOGEN_FIXTURE_CLEANUP=false # autogenerated gem fixture cleanup after every RSpec run
33
+ export FLOSS_CFG_FUNDING_LOGFILE=tmp/log/debug.log
34
+
35
+ # .env would override anything in this file, if `dotenv` is uncommented below.
36
+ # .env is a DOCKER standard, and if we use it, it would be in deployed, or DOCKER, environments,
37
+ # and that is why we generally want to leave it commented out.
38
+ # dotenv
39
+
40
+ # .env.local will override anything in this file.
41
+ dotenv_if_exists .env.local
@@ -0,0 +1,13 @@
1
+ # These are supported funding model platforms
2
+
3
+ buy_me_a_coffee: pboling
4
+ community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
5
+ github: [pboling] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
6
+ issuehunt: pboling # Replace with a single IssueHunt username
7
+ ko_fi: pboling # Replace with a single Ko-fi username
8
+ liberapay: pboling # Replace with a single Liberapay username
9
+ open_collective: # Replace with a single Open Collective username
10
+ patreon: galtzo # Replace with a single Patreon username
11
+ polar: pboling
12
+ thanks_dev: u/gh/pboling
13
+ tidelift: rubygems/timecop-rspec # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
@@ -0,0 +1,12 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: bundler
4
+ directory: "/"
5
+ schedule:
6
+ interval: daily
7
+ time: "04:34"
8
+ open-pull-requests-limit: 10
9
+ - package-ecosystem: "github-actions"
10
+ directory: "/"
11
+ schedule:
12
+ interval: "daily"
@@ -0,0 +1,77 @@
1
+ name: MRI 2.3, 2.4, 2.5 (EOL)
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - 'main'
7
+ tags:
8
+ - '!*' # Do not execute on tags
9
+ pull_request:
10
+ branches:
11
+ - '*'
12
+ # Allow manually triggering the workflow.
13
+ workflow_dispatch:
14
+
15
+ # Cancels all previous workflow runs for the same branch that have not yet completed.
16
+ concurrency:
17
+ # The concurrency group contains the workflow name and the branch name.
18
+ group: "${{ github.workflow }}-${{ github.ref }}"
19
+ cancel-in-progress: true
20
+
21
+ jobs:
22
+ test:
23
+ name: Specs ${{ matrix.ruby }} ${{ matrix.appraisal }}${{ matrix.name_extra || '' }}
24
+ if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')"
25
+ runs-on: ubuntu-22.04
26
+ continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
27
+ env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
28
+ BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }}.gemfile
29
+ strategy:
30
+ fail-fast: false
31
+ matrix:
32
+ include:
33
+ # Ruby 2.3
34
+ - ruby: "ruby-2.3"
35
+ appraisal: "ruby-2-3"
36
+ exec_cmd: "rake test"
37
+ gemfile: "Appraisal.root"
38
+ rubygems: "3.3.27"
39
+ bundler: "2.3.27"
40
+
41
+ # Ruby 2.4
42
+ - ruby: "ruby-2.4"
43
+ appraisal: "ruby-2-4"
44
+ exec_cmd: "rake test"
45
+ gemfile: "Appraisal.root"
46
+ rubygems: "3.3.27"
47
+ bundler: "2.3.27"
48
+
49
+ # Ruby 2.5
50
+ - ruby: "ruby-2.5"
51
+ appraisal: "ruby-2-5"
52
+ exec_cmd: "rake test"
53
+ gemfile: "Appraisal.root"
54
+ rubygems: "3.3.27"
55
+ bundler: "2.3.27"
56
+
57
+ steps:
58
+ - name: Checkout
59
+ uses: actions/checkout@v5
60
+
61
+ - name: Setup Ruby & RubyGems
62
+ uses: ruby/setup-ruby@v1
63
+ with:
64
+ ruby-version: ${{ matrix.ruby }}
65
+ rubygems: ${{ matrix.rubygems }}
66
+ bundler: ${{ matrix.bundler }}
67
+ bundler-cache: false
68
+
69
+ # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root)
70
+ # We need to do this first to get appraisal installed.
71
+ # NOTE: This does not use the main Gemfile at all.
72
+ - name: Install Root Appraisal
73
+ run: bundle
74
+ - name: Appraisal for ${{ matrix.appraisal }}
75
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle
76
+ - name: Tests for ${{ matrix.ruby }} via ${{ matrix.exec_cmd }}
77
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
@@ -0,0 +1,21 @@
1
+ name: Auto Assign
2
+ on:
3
+ issues:
4
+ types: [opened]
5
+ pull_request:
6
+ types: [opened]
7
+ jobs:
8
+ run:
9
+ runs-on: ubuntu-latest
10
+ permissions:
11
+ issues: write
12
+ pull-requests: write
13
+ steps:
14
+ - name: 'Auto-assign issue'
15
+ uses: pozil/auto-assign-issue@v2
16
+ with:
17
+ repo-token: ${{ secrets.GITHUB_TOKEN }}
18
+ assignees: pboling
19
+ abortIfPreviousAssignees: true
20
+ allowSelfAssign: true
21
+ numOfAssignee: 1
@@ -0,0 +1,70 @@
1
+ # For most projects, this workflow file will not need changing; you simply need
2
+ # to commit it to your repository.
3
+ #
4
+ # You may wish to alter this file to override the set of languages analyzed,
5
+ # or to provide custom queries or build logic.
6
+ #
7
+ # ******** NOTE ********
8
+ # We have attempted to detect the languages in your repository. Please check
9
+ # the `language` matrix defined below to confirm you have the correct set of
10
+ # supported CodeQL languages.
11
+ #
12
+ name: "CodeQL"
13
+
14
+ on:
15
+ push:
16
+ branches: [ main, "*-stable" ]
17
+ pull_request:
18
+ # The branches below must be a subset of the branches above
19
+ branches: [ main, "*-stable" ]
20
+ schedule:
21
+ - cron: '35 1 * * 5'
22
+
23
+ jobs:
24
+ analyze:
25
+ name: Analyze
26
+ runs-on: ubuntu-latest
27
+ permissions:
28
+ actions: read
29
+ contents: read
30
+ security-events: write
31
+
32
+ strategy:
33
+ fail-fast: false
34
+ matrix:
35
+ language: [ 'ruby' ]
36
+ # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
37
+ # Learn more about CodeQL language support at https://git.io/codeql-language-support
38
+
39
+ steps:
40
+ - name: Checkout repository
41
+ uses: actions/checkout@v5
42
+
43
+ # Initializes the CodeQL tools for scanning.
44
+ - name: Initialize CodeQL
45
+ uses: github/codeql-action/init@v3
46
+ with:
47
+ languages: ${{ matrix.language }}
48
+ # If you wish to specify custom queries, you can do so here or in a config file.
49
+ # By default, queries listed here will override any specified in a config file.
50
+ # Prefix the list here with "+" to use these queries and those in the config file.
51
+ # queries: ./path/to/local/query, your-org/your-repo/queries@main
52
+
53
+ # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
54
+ # If this step fails, then you should remove it and run the build manually (see below)
55
+ - name: Autobuild
56
+ uses: github/codeql-action/autobuild@v3
57
+
58
+ # ℹ️ Command-line programs to run using the OS shell.
59
+ # 📚 https://git.io/JvXDl
60
+
61
+ # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
62
+ # and modify them (or add more) to build your code if your project
63
+ # uses a compiled language
64
+
65
+ #- run: |
66
+ # make bootstrap
67
+ # make release
68
+
69
+ - name: Perform CodeQL Analysis
70
+ uses: github/codeql-action/analyze@v3
@@ -0,0 +1,126 @@
1
+ name: Test Coverage
2
+
3
+ permissions:
4
+ contents: read
5
+ pull-requests: write
6
+ id-token: write
7
+
8
+ env:
9
+ K_SOUP_COV_MIN_BRANCH: 92
10
+ K_SOUP_COV_MIN_LINE: 100
11
+ K_SOUP_COV_MIN_HARD: true
12
+ K_SOUP_COV_FORMATTERS: "xml,rcov,lcov,tty"
13
+ K_SOUP_COV_DO: true
14
+ K_SOUP_COV_MULTI_FORMATTERS: true
15
+ K_SOUP_COV_COMMAND_NAME: "Test Coverage"
16
+
17
+ on:
18
+ push:
19
+ branches:
20
+ - 'main'
21
+ tags:
22
+ - '!*' # Do not execute on tags
23
+ pull_request:
24
+ branches:
25
+ - '*'
26
+ # Allow manually triggering the workflow.
27
+ workflow_dispatch:
28
+
29
+ # Cancels all previous workflow runs for the same branch that have not yet completed.
30
+ concurrency:
31
+ # The concurrency group contains the workflow name and the branch name.
32
+ group: "${{ github.workflow }}-${{ github.ref }}"
33
+ cancel-in-progress: true
34
+
35
+ jobs:
36
+ coverage:
37
+ name: Code Coverage on ${{ matrix.ruby }}@current
38
+ if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')"
39
+ runs-on: ubuntu-latest
40
+ continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
41
+ env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
42
+ BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }}.gemfile
43
+ strategy:
44
+ fail-fast: false
45
+ matrix:
46
+ include:
47
+ # Coverage
48
+ - ruby: "ruby"
49
+ appraisal: "coverage"
50
+ exec_cmd: "rake test"
51
+ gemfile: "Appraisal.root"
52
+ rubygems: latest
53
+ bundler: latest
54
+
55
+ steps:
56
+ - name: Checkout
57
+ uses: actions/checkout@v5
58
+
59
+ - name: Setup Ruby & RubyGems
60
+ uses: ruby/setup-ruby@v1
61
+ with:
62
+ ruby-version: "${{ matrix.ruby }}"
63
+ rubygems: "${{ matrix.rubygems }}"
64
+ bundler: "${{ matrix.bundler }}"
65
+ bundler-cache: false
66
+
67
+ # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root)
68
+ # We need to do this first to get appraisal installed.
69
+ # NOTE: This does not use the main Gemfile at all.
70
+ - name: Install Root Appraisal
71
+ run: bundle
72
+ - name: Appraisal for ${{ matrix.appraisal }}
73
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle
74
+ - name: Tests for ${{ matrix.ruby }}@current via ${{ matrix.exec_cmd }}
75
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
76
+
77
+ # Do SaaS coverage uploads first
78
+ - name: Upload coverage to Coveralls
79
+ if: ${{ !env.ACT }}
80
+ uses: coverallsapp/github-action@master
81
+ with:
82
+ github-token: ${{ secrets.GITHUB_TOKEN }}
83
+ continue-on-error: ${{ matrix.experimental != 'false' }}
84
+
85
+ - name: Upload coverage to QLTY
86
+ if: ${{ !env.ACT }}
87
+ uses: qltysh/qlty-action/coverage@main
88
+ with:
89
+ token: ${{secrets.QLTY_COVERAGE_TOKEN}}
90
+ files: coverage/.resultset.json
91
+ continue-on-error: ${{ matrix.experimental != 'false' }}
92
+
93
+ # Build will fail here if coverage upload fails
94
+ # which will hopefully be noticed for the lack of code coverage comments
95
+ - name: Upload coverage to CodeCov
96
+ if: ${{ !env.ACT }}
97
+ uses: codecov/codecov-action@v5
98
+ with:
99
+ use_oidc: true
100
+ fail_ci_if_error: true # optional (default = false)
101
+ files: coverage/lcov.info,coverage/coverage.xml
102
+ verbose: true # optional (default = false)
103
+
104
+ # Then PR comments
105
+ - name: Code Coverage Summary Report
106
+ if: ${{ !env.ACT && github.event_name == 'pull_request' }}
107
+ uses: irongut/CodeCoverageSummary@v1.3.0
108
+ with:
109
+ filename: ./coverage/coverage.xml
110
+ badge: true
111
+ fail_below_min: true
112
+ format: markdown
113
+ hide_branch_rate: false
114
+ hide_complexity: true
115
+ indicators: true
116
+ output: both
117
+ thresholds: '100 92'
118
+ continue-on-error: ${{ matrix.experimental != 'false' }}
119
+
120
+ - name: Add Coverage PR Comment
121
+ uses: marocchino/sticky-pull-request-comment@v2
122
+ if: ${{ !env.ACT && github.event_name == 'pull_request' }}
123
+ with:
124
+ recreate: true
125
+ path: code-coverage-results.md
126
+ continue-on-error: ${{ matrix.experimental != 'false' }}
@@ -0,0 +1,85 @@
1
+ # Targets the evergreen latest release of ruby, truffleruby, and jruby
2
+ name: Current
3
+
4
+ env:
5
+ K_SOUP_COV_DO: false
6
+
7
+ on:
8
+ push:
9
+ branches:
10
+ - 'main'
11
+ tags:
12
+ - '!*' # Do not execute on tags
13
+ pull_request:
14
+ branches:
15
+ - '*'
16
+ # Allow manually triggering the workflow.
17
+ workflow_dispatch:
18
+
19
+ permissions:
20
+ contents: read
21
+
22
+ # Cancels all previous workflow runs for the same branch that have not yet completed.
23
+ concurrency:
24
+ # The concurrency group contains the workflow name and the branch name.
25
+ group: "${{ github.workflow }}-${{ github.ref }}"
26
+ cancel-in-progress: true
27
+
28
+ jobs:
29
+ test:
30
+ name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }}
31
+ if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')"
32
+ runs-on: ubuntu-latest
33
+ continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
34
+ env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
35
+ BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }}.gemfile
36
+ strategy:
37
+ matrix:
38
+ include:
39
+ # Ruby 3.4
40
+ - ruby: "ruby"
41
+ appraisal: "current"
42
+ exec_cmd: "rake test"
43
+ gemfile: "Appraisal.root"
44
+ rubygems: latest
45
+ bundler: latest
46
+
47
+ # truffleruby-24.1
48
+ # (according to documentation: targets Ruby 3.3 compatibility)
49
+ # (according to runtime: targets Ruby 3.2 compatibility)
50
+ - ruby: "truffleruby"
51
+ appraisal: "current"
52
+ exec_cmd: "rake test"
53
+ gemfile: "Appraisal.root"
54
+ rubygems: default
55
+ bundler: default
56
+
57
+ # jruby-10.0 (targets Ruby 3.4 compatibility)
58
+ - ruby: "jruby"
59
+ appraisal: "current"
60
+ exec_cmd: "rake test"
61
+ gemfile: "Appraisal.root"
62
+ rubygems: default
63
+ bundler: default
64
+
65
+ steps:
66
+ - name: Checkout
67
+ uses: actions/checkout@v5
68
+
69
+ - name: Setup Ruby & RubyGems
70
+ uses: ruby/setup-ruby@v1
71
+ with:
72
+ ruby-version: ${{ matrix.ruby }}
73
+ rubygems: ${{ matrix.rubygems }}
74
+ bundler: ${{ matrix.bundler }}
75
+ bundler-cache: false
76
+
77
+ # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root)
78
+ # We need to do this first to get appraisal installed.
79
+ # NOTE: This does not use the main Gemfile at all.
80
+ - name: Install Root Appraisal
81
+ run: bundle
82
+ - name: Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}
83
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle
84
+ - name: Tests for ${{ matrix.ruby }}@${{ matrix.appraisal }} via ${{ matrix.exec_cmd }}
85
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
@@ -0,0 +1,20 @@
1
+ # Dependency Review Action
2
+ #
3
+ # This Action will scan dependency manifest files that change as part of a Pull Request, surfacing known-vulnerable versions of the packages declared or updated in the PR. Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable packages will be blocked from merging.
4
+ #
5
+ # Source repository: https://github.com/actions/dependency-review-action
6
+ # Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement
7
+ name: 'Dependency Review'
8
+ on: [pull_request]
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ dependency-review:
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - name: 'Checkout Repository'
18
+ uses: actions/checkout@v5
19
+ - name: 'Dependency Review'
20
+ uses: actions/dependency-review-action@v4
@@ -0,0 +1,75 @@
1
+ ---
2
+ # Lock/Unlock Deps Pattern
3
+ #
4
+ # Two often conflicting goals resolved!
5
+ #
6
+ # - deps_unlocked.yml
7
+ # - All runtime & dev dependencies, but does not have a `gemfiles/*.gemfile.lock` committed
8
+ # - Uses an Appraisal2 "deps_unlocked" gemfile, and the current MRI Ruby release
9
+ # - Know when new dependency releases will break local dev with unlocked dependencies
10
+ # - Broken workflow indicates that new releases of dependencies may not work
11
+ #
12
+ # - deps_locked.yml
13
+ # - All runtime & dev dependencies, and has a `Gemfile.lock` committed
14
+ # - Uses the project's main Gemfile, and the current MRI Ruby release
15
+ # - Matches what contributors and maintainers use locally for development
16
+ # - Broken workflow indicates that a new contributor will have a bad time
17
+ #
18
+ name: Deps Locked
19
+
20
+ permissions:
21
+ contents: read
22
+
23
+ env:
24
+ KITCHEN_SINK: true
25
+
26
+ on:
27
+ push:
28
+ branches:
29
+ - 'main'
30
+ - '*-stable'
31
+ tags:
32
+ - '!*' # Do not execute on tags
33
+ pull_request:
34
+ branches:
35
+ - '*'
36
+ # Allow manually triggering the workflow.
37
+ workflow_dispatch:
38
+
39
+ # Cancels all previous workflow runs for the same branch that have not yet completed.
40
+ concurrency:
41
+ # The concurrency group contains the workflow name and the branch name.
42
+ group: "${{ github.workflow }}-${{ github.ref }}"
43
+ cancel-in-progress: true
44
+
45
+ jobs:
46
+ test:
47
+ name: Default rake task w/ main Gemfile.lock ${{ matrix.name_extra || '' }}
48
+ if: ${{ !contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]') }}
49
+ runs-on: ubuntu-latest
50
+ continue-on-error: ${{ matrix.experimental }}
51
+ strategy:
52
+ fail-fast: false
53
+ matrix:
54
+ include:
55
+ # Ruby <whichever version is current, e.g., 3.4 as of 2025-07-12>
56
+ - ruby: "ruby"
57
+ exec_cmd: "rake"
58
+ rubygems: latest
59
+ bundler: latest
60
+ experimental: false
61
+
62
+ steps:
63
+ - name: Checkout
64
+ uses: actions/checkout@v5
65
+
66
+ - name: Setup Ruby & RubyGems
67
+ uses: ruby/setup-ruby@v1
68
+ with:
69
+ ruby-version: ${{ matrix.ruby }}
70
+ rubygems: ${{ matrix.rubygems }}
71
+ bundler: ${{ matrix.bundler }}
72
+ bundler-cache: true
73
+
74
+ - name: Checks the kitchen sink via ${{ matrix.exec_cmd }}
75
+ run: bundle exec ${{ matrix.exec_cmd }}
@@ -0,0 +1,84 @@
1
+ ---
2
+ # Lock/Unlock Deps Pattern
3
+ #
4
+ # Two often conflicting goals resolved!
5
+ #
6
+ # - deps_unlocked.yml
7
+ # - All runtime & dev dependencies, but does not have a `gemfiles/*.gemfile.lock` committed
8
+ # - Uses an Appraisal2 "deps_unlocked" gemfile, and the current MRI Ruby release
9
+ # - Know when new dependency releases will break local dev with unlocked dependencies
10
+ # - Broken workflow indicates that new releases of dependencies may not work
11
+ #
12
+ # - deps_locked.yml
13
+ # - All runtime & dev dependencies, and has a `Gemfile.lock` committed
14
+ # - Uses the project's main Gemfile, and the current MRI Ruby release
15
+ # - Matches what contributors and maintainers use locally for development
16
+ # - Broken workflow indicates that a new contributor will have a bad time
17
+ #
18
+ name: Deps Unlocked
19
+
20
+ permissions:
21
+ contents: read
22
+
23
+ env:
24
+ K_SOUP_COV_DO: false
25
+
26
+ on:
27
+ push:
28
+ branches:
29
+ - 'main'
30
+ - "*-stable"
31
+ tags:
32
+ - '!*' # Do not execute on tags
33
+ pull_request:
34
+ branches:
35
+ - '*'
36
+ # Allow manually triggering the workflow.
37
+ workflow_dispatch:
38
+
39
+ # Cancels all previous workflow runs for the same branch that have not yet completed.
40
+ concurrency:
41
+ # The concurrency group contains the workflow name and the branch name.
42
+ group: "${{ github.workflow }}-${{ github.ref }}"
43
+ cancel-in-progress: true
44
+
45
+ jobs:
46
+ test:
47
+ name: Default rake task w/ unlocked deps ${{ matrix.name_extra || '' }}
48
+ if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')"
49
+ runs-on: ubuntu-latest
50
+ continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
51
+ env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
52
+ BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }}.gemfile
53
+ strategy:
54
+ matrix:
55
+ include:
56
+ # Ruby <whichever version is current, e.g., 3.4 as of 2025-07-12>
57
+ - ruby: "ruby"
58
+ appraisal_name: "deps_unlocked"
59
+ exec_cmd: "rake"
60
+ gemfile: "Appraisal.root"
61
+ rubygems: latest
62
+ bundler: latest
63
+
64
+ steps:
65
+ - name: Checkout
66
+ uses: actions/checkout@v5
67
+
68
+ - name: Setup Ruby & RubyGems
69
+ uses: ruby/setup-ruby@v1
70
+ with:
71
+ ruby-version: ${{ matrix.ruby }}
72
+ rubygems: ${{ matrix.rubygems }}
73
+ bundler: ${{ matrix.bundler }}
74
+ bundler-cache: false
75
+
76
+ # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root)
77
+ # We need to do this first to get appraisal installed.
78
+ # NOTE: This does not use the main Gemfile at all.
79
+ - name: Install Root Appraisal
80
+ run: bundle
81
+ - name: Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal_name }}
82
+ run: bundle exec appraisal ${{ matrix.appraisal_name }} bundle
83
+ - name: Run ${{ matrix.exec_cmd }} on ${{ matrix.ruby }}@${{ matrix.appraisal_name }}
84
+ run: bundle exec appraisal ${{ matrix.appraisal_name }} bundle exec ${{ matrix.exec_cmd }}