danger-dangermattic 1.1.2 → 1.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3e67bce42d784090d66f708da30837272d7ba007361e0ca5e8a3112934f7662c
4
- data.tar.gz: b52fd5c635ff28d370d19cbbcb5ce0149e947fdb7f6f2fd10b8e7e00543adf7d
3
+ metadata.gz: '094bf199c42dcc05762611116e76958dd679f4fd528aee911a0f2e56cef7ec1e'
4
+ data.tar.gz: 0ea8f18010582cf5d91d0f75a5e7aeadf677fce8bf46fe9d006f0b2cb5985c15
5
5
  SHA512:
6
- metadata.gz: 4e9316d9415127bfef3be854d7ef5662f15df950f623123f1c325ef282e520f0f75d229d6955ec5980cc4286e7c67a5f4738c76486a7a68f316cdc467da7f812
7
- data.tar.gz: 58f1deea10b0c92e769de341fee2e918c04321b8bff563bf872e60cd4c8dba30d6b4dd0caf99c7ccdd2cec0e6c309ff5af17ad069ec2e9c27f194c74c061ec8d
6
+ metadata.gz: 477a907cde572da9e3c5a76eee541e38b82a240a12b8691dec4c2a1697ebb7a664b80836d5eca45513d26a95e270e67b9cbcde08562f9abb691684fa47a21b93
7
+ data.tar.gz: cc0e1a03b5ddb87b3a7961665f7318feceaff2efe437d261b484c5fad1455a78872c719baee93642d0698dc24314bbc4a22cdb9218c8bc80c7ae6997bfbf55f3
@@ -0,0 +1,71 @@
1
+ # Dangermattic GitHub Workflows Documentation
2
+
3
+ We provide reusable GitHub workflows to be used with Dangermattic.
4
+ Each workflow is designed to be called from other workflows using the `workflow_call` event and input parameters.
5
+ All jobs are run on `ubuntu-latest`.
6
+
7
+ ## Check Labels on Issues
8
+
9
+ **File:** `workflows/reusable-check-labels-on-issues.yml`
10
+
11
+ This workflow is an independent check (not using Danger) to verify if the labels on an issue match specified regex patterns.
12
+
13
+ ### Inputs:
14
+ - `label-format-list`: JSON list of regex formats expected for the labels (default: `[".*"]`)
15
+ - `label-error-message`: Error message when labels don't match
16
+ - `label-success-message`: Success message when labels match
17
+ - `cancel-running-jobs`: Cancel in-progress jobs when new ones are created (default: `true`)
18
+
19
+ ### Secrets:
20
+ - `github-token`: Required GitHub token
21
+
22
+ ### Job: `check-issue-labels`
23
+ - Permissions: `issues: write`
24
+ - Main step: "🏷️ Check Issue Labels"
25
+ - Checks if issue labels match the specified regex patterns
26
+ - Posts a comment on the issue with success or error message
27
+
28
+ ## Retry Buildkite Step on Pull Request Events
29
+
30
+ **File:** `workflows/reusable-retry-buildkite-step-on-events.yml`
31
+
32
+ This workflow retries a specific job in a Buildkite pipeline.
33
+
34
+ ### Inputs:
35
+ - `org-slug`: Buildkite organization slug
36
+ - `pipeline-slug`: Slug of the Buildkite pipeline to be run
37
+ - `retry-step-key`: Key of the Buildkite job to be retried
38
+ - `build-commit-sha`: Commit to check for running Buildkite Builds
39
+ - `cancel-running-github-jobs`: Cancel in-progress GitHub jobs when new ones are created (default: `true`)
40
+
41
+ ### Secrets:
42
+ - `buildkite-api-token`: Required Buildkite API token
43
+
44
+ ### Job: `retry-buildkite-job`
45
+ - Main step: "🔄 Retry job on the latest Buildkite Build"
46
+ - Retrieves the latest Buildkite build for the specified commit
47
+ - Identifies the job to retry based on the provided step key
48
+ - Retries the job if it's in an appropriate state (passed, failed, canceled, or finished)
49
+
50
+ ## Run Danger on GitHub
51
+
52
+ **File:** `workflows/reusable-run-danger.yml`
53
+
54
+ This workflow runs Danger directly on GitHub Actions.
55
+
56
+ ### Inputs:
57
+ - `remove-previous-comments`: Remove previous Danger comments and add a new one (default: `false`)
58
+ - `cancel-running-jobs`: Cancel in-progress jobs when new ones are created (default: `true`)
59
+
60
+ ### Secrets:
61
+ - `github-token`: Required GitHub token
62
+
63
+ ### Job: `dangermattic`
64
+ - Steps:
65
+ 1. Checkout repository
66
+ 2. Set up Ruby
67
+ 3. Run Danger PR Check
68
+ - Executes Danger in read-only mode for forks and Dependabot PRs
69
+ - Runs Danger with full functionality for PRs where the configured token has access to the repo
70
+
71
+ These reusable workflows can be incorporated into other workflows in your repository to perform specific tasks related to issue labeling, Buildkite job management, and pull request checks using Danger.
@@ -1,30 +1,38 @@
1
+ # yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
2
+
1
3
  on:
2
4
  workflow_call:
3
5
  inputs:
4
6
  label-format-list:
5
- description: 'The Regex formats expected for the labels; must be a JSON list'
6
- default: '[
7
- ".*"
8
- ]'
7
+ description: The Regex formats expected for the labels; must be a JSON list
8
+ default: |
9
+ [
10
+ ".*"
11
+ ]
9
12
  type: string
10
13
  required: false
11
14
  label-error-message:
12
- description: 'Error message to be posted when the labels set don''t match the required list of formats.'
13
- default: 'At least one label is required.'
15
+ description: Error message to be posted when the labels set don't match the required list of formats.
16
+ default: At least one label is required.
14
17
  type: string
15
18
  required: false
16
19
  label-success-message:
17
- description: 'Message to be posted when the labels set fulfill the entire list of expected formats.'
18
- default: '✅ Yay, issue looks great!'
20
+ description: Message to be posted when the labels set fulfill the entire list of expected formats.
21
+ default: ✅ Yay, issue looks great!
19
22
  type: string
20
23
  required: false
24
+ cancel-running-jobs:
25
+ description: Cancel currently in progress jobs when new ones are added.
26
+ default: true
27
+ type: boolean
28
+ required: false
21
29
  secrets:
22
30
  github-token:
23
31
  required: true
24
32
 
25
33
  concurrency:
26
- group: danger-${{ github.event.issue.number }}
27
- cancel-in-progress: true
34
+ group: ${{ github.workflow }}-${{ github.event.issue.number }}
35
+ cancel-in-progress: ${{ inputs.cancel-running-jobs }}
28
36
 
29
37
  jobs:
30
38
  check-issue-labels:
@@ -32,7 +40,7 @@ jobs:
32
40
  permissions:
33
41
  issues: write
34
42
  steps:
35
- - name: "🏷️ Check Issue Labels"
43
+ - name: 🏷️ Check Issue Labels
36
44
  env:
37
45
  GITHUB_TOKEN: ${{ secrets.github-token }}
38
46
  GH_REPO: ${{ github.repository }}
@@ -1,24 +1,26 @@
1
+ # yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
2
+
1
3
  on:
2
4
  workflow_call:
3
5
  inputs:
4
6
  org-slug:
5
- description: 'Buildkite organization slug'
7
+ description: Buildkite organization slug
6
8
  required: true
7
9
  type: string
8
10
  pipeline-slug:
9
- description: 'Slug of the Buildkite pipeline to be run'
11
+ description: Slug of the Buildkite pipeline to be run
10
12
  required: true
11
13
  type: string
12
14
  retry-step-key:
13
- description: 'Key of the Buildkite job to be retried'
15
+ description: Key of the Buildkite job to be retried
14
16
  required: true
15
17
  type: string
16
18
  build-commit-sha:
17
- description: 'Commit to check for running Buildkite Builds on. Usually github.event.pull_request.head.sha .'
19
+ description: Commit to check for running Buildkite Builds on. Usually github.event.pull_request.head.sha .
18
20
  required: true
19
21
  type: string
20
22
  cancel-running-github-jobs:
21
- description: 'Cancel currently in progress Github jobs when new ones are added.'
23
+ description: Cancel currently in progress Github jobs when new ones are added.
22
24
  default: true
23
25
  type: boolean
24
26
  required: false
@@ -27,14 +29,14 @@ on:
27
29
  required: true
28
30
 
29
31
  concurrency:
30
- group: danger-buildkite-retry-${{ github.ref }}
32
+ group: ${{ github.workflow }}-${{ github.ref }}
31
33
  cancel-in-progress: ${{ inputs.cancel-running-github-jobs }}
32
34
 
33
35
  jobs:
34
36
  retry-buildkite-job:
35
37
  runs-on: ubuntu-latest
36
38
  steps:
37
- - name: "🔄 Retry job on the latest Buildkite Build"
39
+ - name: 🔄 Retry job on the latest Buildkite Build
38
40
  env:
39
41
  READ_ONLY_MODE: ${{ github.event.pull_request.head.repo.fork || github.actor == 'dependabot[bot]' }}
40
42
  run: |
@@ -1,13 +1,15 @@
1
+ # yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
2
+
1
3
  on:
2
4
  workflow_call:
3
5
  inputs:
4
6
  remove-previous-comments:
5
- description: 'Configures Danger to always remove previous comments and add a new one instead of editing the same comment.'
7
+ description: Configures Danger to always remove previous comments and add a new one instead of editing the same comment.
6
8
  default: false
7
9
  type: boolean
8
10
  required: false
9
11
  cancel-running-jobs:
10
- description: 'Cancel currently in progress jobs when new ones are added.'
12
+ description: Cancel currently in progress jobs when new ones are added.
11
13
  default: true
12
14
  type: boolean
13
15
  required: false
@@ -16,22 +18,22 @@ on:
16
18
  required: true
17
19
 
18
20
  concurrency:
19
- group: danger-${{ github.ref }}
21
+ group: ${{ github.workflow }}-${{ github.ref }}
20
22
  cancel-in-progress: ${{ inputs.cancel-running-jobs }}
21
23
 
22
24
  jobs:
23
25
  dangermattic:
24
26
  runs-on: ubuntu-latest
25
27
  steps:
26
- - name: "📥 Checkout Repo"
28
+ - name: 📥 Checkout Repo
27
29
  uses: actions/checkout@v4
28
30
  with:
29
31
  fetch-depth: 100
30
- - name: "💎 Ruby Setup"
32
+ - name: 💎 Ruby Setup
31
33
  uses: ruby/setup-ruby@v1
32
34
  with:
33
35
  bundler-cache: true
34
- - name: "☢️ Danger PR Check"
36
+ - name: ☢️ Danger PR Check
35
37
  env:
36
38
  PR_URL: ${{ github.event.pull_request.html_url }}
37
39
  READ_ONLY_MODE: ${{ github.event.pull_request.head.repo.fork || github.actor == 'dependabot[bot]' }}
data/CHANGELOG.md CHANGED
@@ -20,11 +20,21 @@ _None_
20
20
 
21
21
  _None_
22
22
 
23
+ ## 1.2.0
24
+
25
+ ### New Features
26
+
27
+ - `manifest_pr_checker`: add check for `Package.resolved` using full paths [#86]
28
+
29
+ ### Bug Fixes
30
+
31
+ - `view_changes_checker`: update GitHub assets URL regex to be less strict [#89]
32
+
23
33
  ## 1.1.2
24
34
 
25
35
  ### Internal Changes
26
36
 
27
- - Bump Ruby dependencies (#76)
37
+ - Bump Ruby dependencies [#76]
28
38
 
29
39
  ## 1.1.1
30
40
 
@@ -36,19 +46,19 @@ _None_
36
46
 
37
47
  ### New Features
38
48
 
39
- - Reusable GitHub Workflow for retrying Buildkite jobs (#64)
49
+ - Reusable GitHub Workflow for retrying Buildkite jobs [#64]
40
50
 
41
51
  ## 1.0.2
42
52
 
43
53
  ### Bug Fixes
44
54
 
45
- - Clean up and update dependencies. (#62)
55
+ - Clean up and update dependencies. [#62]
46
56
 
47
57
  ## 1.0.1
48
58
 
49
59
  ### Bug Fixes
50
60
 
51
- - Fix `tracks_checker` plugin so that only additions / removals in a diff are considered in the check, therefore not including the context parts of the diff. (#58)
61
+ - Fix `tracks_checker` plugin so that only additions / removals in a diff are considered in the check, therefore not including the context parts of the diff. [#58]
52
62
 
53
63
  ## 1.0.0
54
64
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- danger-dangermattic (1.1.2)
4
+ danger-dangermattic (1.2.0)
5
5
  danger (~> 9.4)
6
6
  danger-plugin-api (~> 1.0)
7
7
  danger-rubocop (~> 0.13)
@@ -13,6 +13,7 @@ GEM
13
13
  addressable (2.8.7)
14
14
  public_suffix (>= 2.0.2, < 7.0)
15
15
  ast (2.4.2)
16
+ base64 (0.2.0)
16
17
  claide (1.1.0)
17
18
  claide-plugins (0.9.2)
18
19
  cork
@@ -22,7 +23,8 @@ GEM
22
23
  colored2 (3.1.2)
23
24
  cork (0.3.0)
24
25
  colored2 (~> 3.1)
25
- danger (9.5.0)
26
+ danger (9.5.1)
27
+ base64 (~> 0.2)
26
28
  claide (~> 1.0)
27
29
  claide-plugins (>= 0.9.2)
28
30
  colored2 (~> 3.1)
@@ -33,6 +35,7 @@ GEM
33
35
  kramdown (~> 2.3)
34
36
  kramdown-parser-gfm (~> 1.0)
35
37
  octokit (>= 4.0)
38
+ pstore (~> 0.1)
36
39
  terminal-table (>= 1, < 4)
37
40
  danger-plugin-api (1.0.0)
38
41
  danger (> 2.0)
@@ -40,12 +43,13 @@ GEM
40
43
  danger
41
44
  rubocop (~> 1.0)
42
45
  diff-lcs (1.5.1)
43
- faraday (2.10.1)
44
- faraday-net_http (>= 2.0, < 3.2)
46
+ faraday (2.12.0)
47
+ faraday-net_http (>= 2.0, < 3.4)
48
+ json
45
49
  logger
46
50
  faraday-http-cache (2.5.1)
47
51
  faraday (>= 0.8)
48
- faraday-net_http (3.1.1)
52
+ faraday-net_http (3.3.0)
49
53
  net-http
50
54
  ffi (1.17.0)
51
55
  ffi (1.17.0-arm64-darwin)
@@ -53,7 +57,7 @@ GEM
53
57
  git (1.19.1)
54
58
  addressable (~> 2.8)
55
59
  rchardet (~> 1.8)
56
- guard (2.18.1)
60
+ guard (2.19.0)
57
61
  formatador (>= 0.2.4)
58
62
  listen (>= 2.7, < 4.0)
59
63
  lumberjack (>= 1.0.12, < 2.0)
@@ -67,7 +71,7 @@ GEM
67
71
  guard (~> 2.1)
68
72
  guard-compat (~> 1.1)
69
73
  rspec (>= 2.99.0, < 4.0)
70
- json (2.7.2)
74
+ json (2.7.5)
71
75
  kramdown (2.4.0)
72
76
  rexml
73
77
  kramdown-parser-gfm (1.1.0)
@@ -76,7 +80,7 @@ GEM
76
80
  listen (3.9.0)
77
81
  rb-fsevent (~> 0.10, >= 0.10.3)
78
82
  rb-inotify (~> 0.9, >= 0.9.10)
79
- logger (1.6.0)
83
+ logger (1.6.1)
80
84
  lumberjack (1.2.10)
81
85
  method_source (1.1.0)
82
86
  nap (1.1.0)
@@ -86,17 +90,18 @@ GEM
86
90
  notiffany (0.1.3)
87
91
  nenv (~> 0.1)
88
92
  shellany (~> 0.0)
89
- octokit (9.1.0)
93
+ octokit (9.2.0)
90
94
  faraday (>= 1, < 3)
91
95
  sawyer (~> 0.9)
92
96
  open4 (1.3.4)
93
- parallel (1.25.1)
94
- parser (3.3.4.0)
97
+ parallel (1.26.3)
98
+ parser (3.3.5.1)
95
99
  ast (~> 2.4.1)
96
100
  racc
97
101
  pry (0.14.2)
98
102
  coderay (~> 1.1)
99
103
  method_source (~> 1.0)
104
+ pstore (0.1.3)
100
105
  public_suffix (6.0.1)
101
106
  racc (1.8.1)
102
107
  rainbow (3.1.1)
@@ -106,50 +111,47 @@ GEM
106
111
  ffi (~> 1.0)
107
112
  rchardet (1.8.0)
108
113
  regexp_parser (2.9.2)
109
- rexml (3.3.4)
110
- strscan
114
+ rexml (3.3.9)
111
115
  rspec (3.13.0)
112
116
  rspec-core (~> 3.13.0)
113
117
  rspec-expectations (~> 3.13.0)
114
118
  rspec-mocks (~> 3.13.0)
115
- rspec-core (3.13.0)
119
+ rspec-core (3.13.2)
116
120
  rspec-support (~> 3.13.0)
117
- rspec-expectations (3.13.1)
121
+ rspec-expectations (3.13.3)
118
122
  diff-lcs (>= 1.2.0, < 2.0)
119
123
  rspec-support (~> 3.13.0)
120
- rspec-mocks (3.13.1)
124
+ rspec-mocks (3.13.2)
121
125
  diff-lcs (>= 1.2.0, < 2.0)
122
126
  rspec-support (~> 3.13.0)
123
127
  rspec-support (3.13.1)
124
- rubocop (1.65.1)
128
+ rubocop (1.68.0)
125
129
  json (~> 2.3)
126
130
  language_server-protocol (>= 3.17.0)
127
131
  parallel (~> 1.10)
128
132
  parser (>= 3.3.0.2)
129
133
  rainbow (>= 2.2.2, < 4.0)
130
134
  regexp_parser (>= 2.4, < 3.0)
131
- rexml (>= 3.2.5, < 4.0)
132
- rubocop-ast (>= 1.31.1, < 2.0)
135
+ rubocop-ast (>= 1.32.2, < 2.0)
133
136
  ruby-progressbar (~> 1.7)
134
137
  unicode-display_width (>= 2.4.0, < 3.0)
135
- rubocop-ast (1.31.3)
138
+ rubocop-ast (1.33.0)
136
139
  parser (>= 3.3.1.0)
137
140
  rubocop-rake (0.6.0)
138
141
  rubocop (~> 1.0)
139
- rubocop-rspec (3.0.3)
142
+ rubocop-rspec (3.2.0)
140
143
  rubocop (~> 1.61)
141
144
  ruby-progressbar (1.13.0)
142
145
  sawyer (0.9.2)
143
146
  addressable (>= 2.3.5)
144
147
  faraday (>= 0.17.3, < 3)
145
148
  shellany (0.0.1)
146
- strscan (3.1.0)
147
149
  terminal-table (3.0.2)
148
150
  unicode-display_width (>= 1.1.1, < 3)
149
- thor (1.3.1)
150
- unicode-display_width (2.5.0)
151
- uri (0.13.0)
152
- yard (0.9.36)
151
+ thor (1.3.2)
152
+ unicode-display_width (2.6.0)
153
+ uri (0.13.1)
154
+ yard (0.9.37)
153
155
 
154
156
  PLATFORMS
155
157
  arm64-darwin-22
data/README.md CHANGED
@@ -35,6 +35,10 @@ Once the main Gem is installed, all Dangermattic plugins are available in your `
35
35
 
36
36
  All available plugins are defined here: https://github.com/Automattic/dangermattic/tree/trunk/lib/dangermattic/plugins
37
37
 
38
+ ## GitHub Workflows
39
+
40
+ Dangermattic also provides some useful reusable GitHub workflows. For more information on available workflows and how to use them, please refer to the [Workflows README](.github/workflows/README.md).
41
+
38
42
  ## Development
39
43
 
40
44
  - Clone the repo and run `bundle install` to setup dependencies
@@ -66,3 +70,26 @@ my_new_plugin_checker.check_method(param: my_param_value)
66
70
  ```
67
71
 
68
72
  Please follow the existing naming convention for validation and check plugins: classes end with a `*Checker` suffix and the main validation methods are named with a `check_*` prefix.
73
+
74
+ ## Releasing a new version
75
+
76
+ To create a new release of the Dangermattic gem, use the `new_release` Rake task:
77
+
78
+ ```
79
+ bundle exec rake new_release
80
+ ```
81
+
82
+ This task will:
83
+
84
+ 1. Parse the `CHANGELOG.md` file to get the latest version and pending changes.
85
+ 1. Prompt for the new version number.
86
+ 1. Update the `VERSION` constant in the `gem_version.rb` file.
87
+ 1. Update the `CHANGELOG.md` file with the new version.
88
+ 1. Create a new branch, commit the changes, and push to GitHub.
89
+ 1. Open a draft Pull Request for the release.
90
+
91
+ After running the task, follow the instructions provided to complete the release process:
92
+
93
+ 1. Review and merge the Pull Request.
94
+ 1. Create a GitHub release targeting the `trunk` branch, using the changelog content provided.
95
+ 1. Publishing the GitHub release with a tag will trigger a CI workflow to publish the new gem version to RubyGems.
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dangermattic
4
- VERSION = '1.1.2'
4
+ VERSION = '1.2.0'
5
5
  end
@@ -29,6 +29,7 @@ module Danger
29
29
  #
30
30
  class ManifestPRChecker < Plugin
31
31
  MESSAGE = '`%s` was changed without updating its corresponding `%s`. %s.'
32
+ SWIFT_INSTRUCTION = 'Please resolve the Swift packages as appropriate to your project setup (e.g. in Xcode or by running `swift package resolve`)'
32
33
 
33
34
  # Performs all the checks, asserting that changes on `Gemfile`, `Podfile` and `Package.swift` must have corresponding
34
35
  # lock file changes.
@@ -46,7 +47,6 @@ module Danger
46
47
  #
47
48
  # @param report_type [Symbol] (optional) The type of report for the message. Types: :error, :warning (default), :message.
48
49
  #
49
- #
50
50
  # @return [void]
51
51
  def check_gemfile_lock_updated(report_type: :warning)
52
52
  check_manifest_lock_updated(
@@ -61,7 +61,6 @@ module Danger
61
61
  #
62
62
  # @param report_type [Symbol] (optional) The type of report for the message. Types: :error, :warning (default), :message.
63
63
  #
64
- #
65
64
  # @return [void]
66
65
  def check_podfile_lock_updated(report_type: :warning)
67
66
  check_manifest_lock_updated(
@@ -76,13 +75,27 @@ module Danger
76
75
  #
77
76
  # @param report_type [Symbol] (optional) The type of report for the message. Types: :error, :warning (default), :message.
78
77
  #
79
- #
80
78
  # @return [void]
81
79
  def check_swift_package_resolved_updated(report_type: :warning)
82
80
  check_manifest_lock_updated(
83
81
  file_name: 'Package.swift',
84
82
  lock_file_name: 'Package.resolved',
85
- instruction: 'Please resolve the Swift packages in Xcode',
83
+ instruction: SWIFT_INSTRUCTION,
84
+ report_type: report_type
85
+ )
86
+ end
87
+
88
+ # Check if the `Package.swift` file was modified without a corresponding `Package.resolved` update,
89
+ # checking for exact path matches
90
+ #
91
+ # @param report_type [Symbol] (optional) The type of report for the message. Types: :error, :warning (default), :message.
92
+ #
93
+ # @return [void]
94
+ def check_swift_package_resolved_updated_strict(manifest_path:, manifest_lock_path:, report_type: :warning)
95
+ check_manifest_lock_updated_strict(
96
+ manifest_path: manifest_path,
97
+ manifest_lock_path: manifest_lock_path,
98
+ instruction: SWIFT_INSTRUCTION,
86
99
  report_type: report_type
87
100
  )
88
101
  end
@@ -91,16 +104,27 @@ module Danger
91
104
 
92
105
  def check_manifest_lock_updated(file_name:, lock_file_name:, instruction:, report_type: :warning)
93
106
  # Find all the modified manifest files
94
- manifest_modified_files = git.modified_files.select { |f| File.basename(f) == file_name }
107
+ manifest_modified_files = git_utils.all_changed_files.select { |f| File.basename(f) == file_name }
95
108
 
96
109
  # For each manifest file, check if the corresponding lockfile (in the same dir) was also modified
97
110
  manifest_modified_files.each do |manifest_file|
98
- lockfile_modified = git.modified_files.any? { |f| File.dirname(f) == File.dirname(manifest_file) && File.basename(f) == lock_file_name }
111
+ lockfile_modified = git_utils.all_changed_files.any? { |f| File.dirname(f) == File.dirname(manifest_file) && File.basename(f) == lock_file_name }
99
112
  next if lockfile_modified
100
113
 
101
114
  message = format(MESSAGE, manifest_file, lock_file_name, instruction)
102
115
  reporter.report(message: message, type: report_type)
103
116
  end
104
117
  end
118
+
119
+ def check_manifest_lock_updated_strict(manifest_path:, manifest_lock_path:, instruction:, report_type: :warning)
120
+ manifest_modified = git_utils.all_changed_files.include?(manifest_path)
121
+ return unless manifest_modified
122
+
123
+ lockfile_modified = git_utils.all_changed_files.include?(manifest_lock_path)
124
+ return if lockfile_modified
125
+
126
+ message = format(MESSAGE, manifest_path, File.basename(manifest_lock_path), instruction)
127
+ reporter.report(message: message, type: report_type)
128
+ end
105
129
  end
106
130
  end
@@ -18,7 +18,7 @@ module Danger
18
18
  MEDIA_IN_PR_BODY_PATTERNS = [
19
19
  %r{https?://\S*\.(gif|jpg|jpeg|png|svg)},
20
20
  %r{https?://\S*\.(mp4|avi|mov|mkv)},
21
- %r{https?://\S*github\S+/\S+/assets/\d+/},
21
+ %r{https?://\S*github\S+/\S+/assets/},
22
22
  /!\[(.*?)\]\((.*?)\)/,
23
23
  /<img\s+[^>]*src\s*=\s*[^>]*>/,
24
24
  /<video\s+[^>]*src\s*=\s*[^>]*>/
@@ -31,7 +31,7 @@ module Danger
31
31
  # displaying a warning if view files have been modified but no screenshot or video is included.
32
32
  #
33
33
  # @return [void]
34
- def check
34
+ def check(report_type: :warning)
35
35
  view_files_modified = git.modified_files.any? do |file|
36
36
  VIEW_EXTENSIONS_IOS =~ file || VIEW_EXTENSIONS_ANDROID =~ file
37
37
  end
@@ -40,7 +40,7 @@ module Danger
40
40
  github.pr_body =~ pattern
41
41
  end
42
42
 
43
- warn(MESSAGE) if view_files_modified && !pr_has_media
43
+ reporter.report(message: MESSAGE, type: report_type) if view_files_modified && !pr_has_media
44
44
  end
45
45
  end
46
46
  end
@@ -17,7 +17,7 @@ module Danger
17
17
  describe 'Bundler' do
18
18
  it 'reports a warning when a PR changed the Gemfile but not the Gemfile.lock' do
19
19
  modified_files = ['Gemfile']
20
- allow(@plugin.git).to receive(:modified_files).and_return(modified_files)
20
+ allow(@plugin.git_utils).to receive(:all_changed_files).and_return(modified_files)
21
21
 
22
22
  @plugin.check_gemfile_lock_updated
23
23
 
@@ -27,7 +27,7 @@ module Danger
27
27
 
28
28
  it 'reports no warnings when both the Gemfile and the Gemfile.lock were updated' do
29
29
  modified_files = ['Gemfile', 'Gemfile.lock']
30
- allow(@plugin.git).to receive(:modified_files).and_return(modified_files)
30
+ allow(@plugin.git_utils).to receive(:all_changed_files).and_return(modified_files)
31
31
 
32
32
  @plugin.check_gemfile_lock_updated
33
33
 
@@ -36,7 +36,7 @@ module Danger
36
36
 
37
37
  it 'reports no warnings when only the Gemfile.lock was updated' do
38
38
  modified_files = ['Gemfile.lock']
39
- allow(@plugin.git).to receive(:modified_files).and_return(modified_files)
39
+ allow(@plugin.git_utils).to receive(:all_changed_files).and_return(modified_files)
40
40
 
41
41
  @plugin.check_gemfile_lock_updated
42
42
 
@@ -47,7 +47,7 @@ module Danger
47
47
  describe 'CocoaPods' do
48
48
  it 'reports a warning when a PR changed the Podfile but not the Podfile.lock' do
49
49
  modified_files = ['Podfile']
50
- allow(@plugin.git).to receive(:modified_files).and_return(modified_files)
50
+ allow(@plugin.git_utils).to receive(:all_changed_files).and_return(modified_files)
51
51
 
52
52
  @plugin.check_podfile_lock_updated
53
53
 
@@ -57,7 +57,7 @@ module Danger
57
57
 
58
58
  it 'reports no warnings when both the Podfile and the Podfile.lock were updated' do
59
59
  modified_files = ['Podfile', 'Podfile.lock']
60
- allow(@plugin.git).to receive(:modified_files).and_return(modified_files)
60
+ allow(@plugin.git_utils).to receive(:all_changed_files).and_return(modified_files)
61
61
 
62
62
  @plugin.check_podfile_lock_updated
63
63
 
@@ -66,7 +66,7 @@ module Danger
66
66
 
67
67
  it 'reports a warning when a PR changed a custom located Podfile but not the corresponding Podfile.lock' do
68
68
  modified_files = ['./path/to/Podfile', './my/Podfile.lock']
69
- allow(@plugin.git).to receive(:modified_files).and_return(modified_files)
69
+ allow(@plugin.git_utils).to receive(:all_changed_files).and_return(modified_files)
70
70
 
71
71
  @plugin.check_podfile_lock_updated
72
72
 
@@ -76,7 +76,7 @@ module Danger
76
76
 
77
77
  it 'reports multiple warnings when a PR changed multiple custom located Podfiles but not the corresponding Podfile.lock' do
78
78
  modified_files = ['./dir1/Podfile', './dir2/Podfile', './dir3/Podfile', './dir1/Podfile.lock']
79
- allow(@plugin.git).to receive(:modified_files).and_return(modified_files)
79
+ allow(@plugin.git_utils).to receive(:all_changed_files).and_return(modified_files)
80
80
 
81
81
  @plugin.check_podfile_lock_updated
82
82
 
@@ -89,7 +89,7 @@ module Danger
89
89
 
90
90
  it 'reports no warnings when both custom located Podfile`s and their corresponding Podfile.lock were updated' do
91
91
  modified_files = ['./my/path/to/Podfile', './another/path/to/Podfile', './my/path/to/Podfile.lock', './another/path/to/Podfile.lock']
92
- allow(@plugin.git).to receive(:modified_files).and_return(modified_files)
92
+ allow(@plugin.git_utils).to receive(:all_changed_files).and_return(modified_files)
93
93
 
94
94
  @plugin.check_podfile_lock_updated
95
95
 
@@ -98,7 +98,7 @@ module Danger
98
98
 
99
99
  it 'reports no warnings when only the Podfile.lock was updated' do
100
100
  modified_files = ['Podfile.lock']
101
- allow(@plugin.git).to receive(:modified_files).and_return(modified_files)
101
+ allow(@plugin.git_utils).to receive(:all_changed_files).and_return(modified_files)
102
102
 
103
103
  @plugin.check_podfile_lock_updated
104
104
 
@@ -107,32 +107,73 @@ module Danger
107
107
  end
108
108
 
109
109
  describe 'Swift Package Manager' do
110
- it 'reports a warning when a PR changed the Package.swift but not the Package.resolved' do
111
- modified_files = ['Package.swift']
112
- allow(@plugin.git).to receive(:modified_files).and_return(modified_files)
110
+ describe '#check_swift_package_resolved_updated' do
111
+ it 'reports a warning when a PR changed the Package.swift but not the Package.resolved' do
112
+ modified_files = ['Package.swift']
113
+ allow(@plugin.git_utils).to receive(:all_changed_files).and_return(modified_files)
113
114
 
114
- @plugin.check_swift_package_resolved_updated
115
+ @plugin.check_swift_package_resolved_updated
115
116
 
116
- expected_warning = format(ManifestPRChecker::MESSAGE, 'Package.swift', 'Package.resolved', 'Please resolve the Swift packages in Xcode')
117
- expect(@dangerfile).to report_warnings([expected_warning])
118
- end
117
+ expected_warning = format(ManifestPRChecker::MESSAGE, 'Package.swift', 'Package.resolved', ManifestPRChecker::SWIFT_INSTRUCTION)
118
+ expect(@dangerfile).to report_warnings([expected_warning])
119
+ end
119
120
 
120
- it 'reports no warnings when both the Package.swift and the Package.resolved were updated' do
121
- modified_files = ['Package.swift', 'Package.resolved']
122
- allow(@plugin.git).to receive(:modified_files).and_return(modified_files)
121
+ it 'reports no warnings when both the Package.swift and the Package.resolved were updated' do
122
+ modified_files = ['Package.swift', 'Package.resolved']
123
+ allow(@plugin.git_utils).to receive(:all_changed_files).and_return(modified_files)
123
124
 
124
- @plugin.check_swift_package_resolved_updated
125
+ @plugin.check_swift_package_resolved_updated
125
126
 
126
- expect(@dangerfile).to not_report
127
+ expect(@dangerfile).to not_report
128
+ end
129
+
130
+ it 'reports no warnings when only the Package.resolved was updated' do
131
+ modified_files = ['Package.resolved']
132
+ allow(@plugin.git_utils).to receive(:all_changed_files).and_return(modified_files)
133
+
134
+ @plugin.check_swift_package_resolved_updated
135
+
136
+ expect(@dangerfile).to not_report
137
+ end
127
138
  end
128
139
 
129
- it 'reports no warnings when only the Package.resolved was updated' do
130
- modified_files = ['Package.resolved']
131
- allow(@plugin.git).to receive(:modified_files).and_return(modified_files)
140
+ describe '#check_swift_package_resolved_updated_strict' do
141
+ it 'reports a warning when a PR changed the specific Package.swift but not its Package.resolved' do
142
+ modified_files = ['Apps/App1/Package.swift', 'Apps/App2/Package.swift', 'Apps/App2/Package.resolved']
143
+ allow(@plugin.git_utils).to receive(:all_changed_files).and_return(modified_files)
132
144
 
133
- @plugin.check_swift_package_resolved_updated
145
+ @plugin.check_swift_package_resolved_updated_strict(
146
+ manifest_path: 'Apps/App1/Package.swift',
147
+ manifest_lock_path: 'Apps/App1/Package.resolved'
148
+ )
134
149
 
135
- expect(@dangerfile).to not_report
150
+ expected_warning = format(ManifestPRChecker::MESSAGE, 'Apps/App1/Package.swift', 'Package.resolved', ManifestPRChecker::SWIFT_INSTRUCTION)
151
+ expect(@dangerfile).to report_warnings([expected_warning])
152
+ end
153
+
154
+ it 'reports no warning when both the specific Package.swift and Package.resolved were updated' do
155
+ modified_files = ['Apps/App1/Package.swift', 'Apps/App1/Package.resolved']
156
+ allow(@plugin.git_utils).to receive(:all_changed_files).and_return(modified_files)
157
+
158
+ @plugin.check_swift_package_resolved_updated_strict(
159
+ manifest_path: 'Apps/App1/Package.swift',
160
+ manifest_lock_path: 'Apps/App1/Package.resolved'
161
+ )
162
+
163
+ expect(@dangerfile).to not_report
164
+ end
165
+
166
+ it 'reports no warning when the specific Package.swift was not modified' do
167
+ modified_files = ['Apps/App2/Package.swift', 'Apps/App2/Package.resolved']
168
+ allow(@plugin.git_utils).to receive(:all_changed_files).and_return(modified_files)
169
+
170
+ @plugin.check_swift_package_resolved_updated_strict(
171
+ manifest_path: 'Apps/App1/Package.swift',
172
+ manifest_lock_path: 'Apps/App1/Package.resolved'
173
+ )
174
+
175
+ expect(@dangerfile).to not_report
176
+ end
136
177
  end
137
178
  end
138
179
  end
@@ -75,7 +75,7 @@ module Danger
75
75
  expect(@dangerfile).to not_report
76
76
  end
77
77
 
78
- it 'does nothing when a PR with view code changes has a video defined with a simple URL' do
78
+ it 'does nothing when a PR with view code changes has a video defined with a simple repo assets URL' do
79
79
  allow(@plugin.github).to receive(:pr_body)
80
80
  .and_return("see video:\nhttps://github.com/woocommerce/woocommerce-ios/assets/1864060/0e983305-5047-40a3-8829-734e0b582b96 body body")
81
81
 
@@ -83,6 +83,15 @@ module Danger
83
83
 
84
84
  expect(@dangerfile).to not_report
85
85
  end
86
+
87
+ it 'does nothing when a PR with view code changes has a video defined with a simple GitHub assets URL' do
88
+ allow(@plugin.github).to receive(:pr_body)
89
+ .and_return("see video:\nhttps://github.com/user-attachments/assets/f3461fec-f96c-4376-9e00-f8faf65f3457 body body")
90
+
91
+ @plugin.check
92
+
93
+ expect(@dangerfile).to not_report
94
+ end
86
95
  end
87
96
 
88
97
  shared_examples 'PR without view code changes' do |modified_files|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: danger-dangermattic
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Automattic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-08-05 00:00:00.000000000 Z
11
+ date: 2024-11-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: danger
@@ -201,6 +201,7 @@ files:
201
201
  - ".buildkite/gem-push.sh"
202
202
  - ".buildkite/pipeline.yml"
203
203
  - ".bundle/config"
204
+ - ".github/workflows/README.md"
204
205
  - ".github/workflows/reusable-check-labels-on-issues.yml"
205
206
  - ".github/workflows/reusable-retry-buildkite-step-on-events.yml"
206
207
  - ".github/workflows/reusable-run-danger.yml"