bitwarden_workflow_linter 0.2.0__py3-none-any.whl → 0.3.0__py3-none-any.whl

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.
@@ -1,3 +1,3 @@
1
1
  """Metadata for Workflow Linter."""
2
2
 
3
- __version__ = "0.2.0"
3
+ __version__ = "0.3.0"
@@ -209,6 +209,11 @@
209
209
  "sha": "445c42390d790569d938f9068d01af39ca030feb",
210
210
  "version": "v1.0.0"
211
211
  },
212
+ "maxim-lobanov/setup-xcode" : {
213
+ "name": "maxim-lobanov/setup-xcode",
214
+ "sha": "60606e260d2fc5762a71e64e74b2174e8ea3c8bd",
215
+ "version": "v1.6.0"
216
+ },
212
217
  "microsoft/setup-msbuild": {
213
218
  "name": "microsoft/setup-msbuild",
214
219
  "sha": "1ff57057b5cfdc39105cd07a01d78e9b0ea0c14c",
@@ -3,6 +3,7 @@ enabled_rules:
3
3
  - bitwarden_workflow_linter.rules.name_capitalized.RuleNameCapitalized
4
4
  - bitwarden_workflow_linter.rules.pinned_job_runner.RuleJobRunnerVersionPinned
5
5
  - bitwarden_workflow_linter.rules.job_environment_prefix.RuleJobEnvironmentPrefix
6
+ - bitwarden_workflow_linter.rules.step_approved.RuleStepUsesApproved
6
7
  - bitwarden_workflow_linter.rules.step_pinned.RuleStepUsesPinned
7
8
  - bitwarden_workflow_linter.rules.underscore_outputs.RuleUnderscoreOutputs
8
9
 
@@ -54,6 +54,7 @@ class LinterCmd:
54
54
  )
55
55
  parser_lint.add_argument("-f", "--files", action="append", help="files to lint")
56
56
  parser_lint.add_argument(
57
+ "-o",
57
58
  "--output",
58
59
  action="store",
59
60
  help="output format: [stdout|json|md]",
@@ -137,9 +138,10 @@ class LinterCmd:
137
138
  if os.path.isfile(path):
138
139
  workflow_files.append(path)
139
140
  elif os.path.isdir(path):
140
- for subdir, _, files in os.walk(path):
141
- for filename in files:
142
- filepath = subdir + os.sep + filename
141
+ for dirpath, dirnames, filenames in os.walk(path):
142
+ dirnames[:] = []
143
+ for file in filenames:
144
+ filepath = dirpath + os.sep + file
143
145
  if filepath.endswith((".yml", ".yaml")):
144
146
  workflow_files.append(filepath)
145
147
 
@@ -58,11 +58,12 @@ class RuleJobEnvironmentPrefix(Rule):
58
58
  incorrectly named environment variables.
59
59
  """
60
60
  correct = True
61
+ allowed_envs = {"NODE_OPTION", "NUGET_PACKAGES", "MINT_PATH", "MINT_LINK_PATH"}
61
62
 
62
63
  if obj.env:
63
64
  offending_keys = []
64
65
  for key in obj.env.keys():
65
- if key[0] != "_":
66
+ if key not in allowed_envs and key[0] != "_":
66
67
  offending_keys.append(key)
67
68
  correct = False
68
69
 
@@ -41,8 +41,8 @@ class RuleStepUsesApproved(Rule):
41
41
  if "@" not in obj.uses:
42
42
  return True
43
43
 
44
- ## Force pass for any bitwarden/gh-actions
45
- if obj.uses.startswith("bitwarden/gh-actions"):
44
+ ## Force pass for any bitwarden/
45
+ if obj.uses.startswith("bitwarden/"):
46
46
  return True
47
47
 
48
48
  return False
@@ -82,7 +82,7 @@ class RuleStepUsesApproved(Rule):
82
82
  if self.skip(obj):
83
83
  return True, ""
84
84
 
85
- # Actions in bitwarden/gh-actions are auto-approved
85
+ # Actions in bitwarden/ are auto-approved
86
86
  if obj.uses and not obj.uses_path in self.settings.approved_actions:
87
87
  return False, (
88
88
  f"New Action detected: {obj.uses_path}\nFor security purposes, "
@@ -82,7 +82,7 @@ class RuleStepUsesPinned(Rule):
82
82
 
83
83
  path, ref = obj.uses.split("@")
84
84
 
85
- if path.startswith("bitwarden/gh-actions"):
85
+ if path.startswith("bitwarden/"):
86
86
  if ref == "main":
87
87
  return True, ""
88
88
  return False, "Please pin to main"
@@ -25,7 +25,7 @@ class RuleUnderscoreOutputs(Rule):
25
25
  A Settings object that contains any default, overridden, or custom settings
26
26
  required anywhere in the application.
27
27
  """
28
- self.message = "outputs with more than one word must use an underscore"
28
+ self.message = "outputs with more than one word should use an underscore"
29
29
  self.on_fail = LintLevels.WARNING
30
30
  self.compatibility = [Workflow, Job, Step]
31
31
  self.settings = settings
@@ -90,15 +90,18 @@ class RuleUnderscoreOutputs(Rule):
90
90
  if isinstance(obj, Workflow):
91
91
  if obj.on.get("workflow_dispatch"):
92
92
  if obj.on["workflow_dispatch"].get("outputs"):
93
- outputs.extend(obj.on["workflow_dispatch"]["outputs"].keys())
93
+ for output, _ in obj.on["workflow_dispatch"]["outputs"].items():
94
+ outputs.append(output)
94
95
 
95
96
  if obj.on.get("workflow_call"):
96
97
  if obj.on["workflow_call"].get("outputs"):
97
- outputs.extend(obj.on["workflow_call"]["outputs"].keys())
98
+ for output, _ in obj.on["workflow_call"]["outputs"].items():
99
+ outputs.append(output)
98
100
 
99
101
  if isinstance(obj, Job):
100
102
  if obj.outputs:
101
- outputs.extend(obj.outputs.keys())
103
+ for output in obj.outputs.keys():
104
+ outputs.append(output)
102
105
 
103
106
  if isinstance(obj, Step):
104
107
  if obj.run:
@@ -108,10 +111,18 @@ class RuleUnderscoreOutputs(Rule):
108
111
  )
109
112
  )
110
113
 
111
- for output_name in outputs:
112
- if "-" in output_name:
113
- return False, (
114
- f"Hyphen found in {obj.__class__.__name__} output: {output_name}"
115
- )
114
+ correct = True
115
+ offending_keys = []
116
+
117
+ for name in outputs:
118
+ if "-" in name:
119
+ offending_keys.append(name)
120
+ correct = False
121
+
122
+ if correct:
123
+ return True, ""
116
124
 
117
- return True, ""
125
+ return (
126
+ False,
127
+ f"{obj.__class__.__name__} {self.message}: ({' ,'.join(offending_keys)})",
128
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bitwarden_workflow_linter
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Summary: Custom GitHub Action Workflow Linter
5
5
  Project-URL: Homepage, https://github.com/bitwarden/workflow-linter
6
6
  Project-URL: Issues, https://github.com/bitwarden/workflow-linter/issues
@@ -1,10 +1,10 @@
1
- bitwarden_workflow_linter/__about__.py,sha256=si3RgiuWR12lqpriKwtC4ny_xoVAWdz9oa4DWW-3QuY,59
1
+ bitwarden_workflow_linter/__about__.py,sha256=6Jd6E8G5LxFTHCS3y8PQUh6kFPFKcdPKIowraU_efEY,59
2
2
  bitwarden_workflow_linter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  bitwarden_workflow_linter/actions.py,sha256=daob3be2Y22gfsAmGhTgBRCgGk18mlGduqc5Zn1Onz4,7897
4
4
  bitwarden_workflow_linter/cli.py,sha256=wgkK1MlVbo6Zx3f2CZZ_tkSWq_hdsGciHJA1knX6Yuw,1699
5
- bitwarden_workflow_linter/default_actions.json,sha256=BeFllnAu9v6cX6eeGeNoQf3rXs7ZOjAtjTNBQuAZ8-k,8087
6
- bitwarden_workflow_linter/default_settings.yaml,sha256=EMKRFPFlbgkWtZGUA10Y758RJfAjuI8IUDeqRnRTTs8,505
7
- bitwarden_workflow_linter/lint.py,sha256=z83h7XOnULngPqTwlo5LKCK2ciUu4oalwixKVcFLWac,5461
5
+ bitwarden_workflow_linter/default_actions.json,sha256=Xfg6TMtNRnPYlD_pM2fLtCmXJZ1BYTAKfne-9Uon53E,8246
6
+ bitwarden_workflow_linter/default_settings.yaml,sha256=2VwOcB0g3v4A2Kt2UgGFM0TSpfd6S0oNA0SkTa5tGJA,576
7
+ bitwarden_workflow_linter/lint.py,sha256=RDHv5jGeGCf5XIHE8jyqQET3-cFykl7223SQVS4Q3pg,5525
8
8
  bitwarden_workflow_linter/load.py,sha256=Ece2bwSSYeQ1xQQEjjqY6DlCkwznFYLG56VW_VTxU4E,4472
9
9
  bitwarden_workflow_linter/rule.py,sha256=Qb60JiUDAWN3ayrMGoSbbDCSFmw-ql8djzAkxISaob4,3250
10
10
  bitwarden_workflow_linter/utils.py,sha256=9WO3T9w9vKAow_xR6JDz2MvdMXKExV18AzucF0vh67s,4695
@@ -13,15 +13,15 @@ bitwarden_workflow_linter/models/job.py,sha256=nBK7_VYu6RRST7WLtdLsoRErl5j4Er8W9
13
13
  bitwarden_workflow_linter/models/step.py,sha256=1bKAtKZmHcO8O1e_HuoXxR1bwHDEXUssYo7EHOjY7QI,1711
14
14
  bitwarden_workflow_linter/models/workflow.py,sha256=MkqvIY4JX2eWFODNTodS_l4I8uUq08WCHy3C4kYcL0s,1395
15
15
  bitwarden_workflow_linter/rules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- bitwarden_workflow_linter/rules/job_environment_prefix.py,sha256=QCYNj-sX5VB5v49OkBdmFGDkm1E2ebcfiAvlkDVNx7g,2415
16
+ bitwarden_workflow_linter/rules/job_environment_prefix.py,sha256=HJeZhw1JVk4PTYZUY8C2j9wG5x5SqaNy_6WHHlZ_iM4,2531
17
17
  bitwarden_workflow_linter/rules/name_capitalized.py,sha256=XwRZ33OeQv_i7z_2Yf7TEgJNodOl5byXfegqfmhaTYQ,1914
18
18
  bitwarden_workflow_linter/rules/name_exists.py,sha256=MxcaNQz64JXeHRPiOip9BxJNgPdpKQa7Z51mDoNw2hU,1681
19
19
  bitwarden_workflow_linter/rules/pinned_job_runner.py,sha256=Dm6_sdPX0yFMji_y2LMFj4gWFaToEgauyBVpNRP2qiI,1606
20
- bitwarden_workflow_linter/rules/step_approved.py,sha256=UIi9_z9j75SpQUmo29MLDhjLklqd4h0D-UYqkdcaju0,3307
21
- bitwarden_workflow_linter/rules/step_pinned.py,sha256=e9yhbo9wsz7CDj1s4fGEsktA8B9YarzE26R_zmNLs7M,3400
22
- bitwarden_workflow_linter/rules/underscore_outputs.py,sha256=s1tySiVCAQOd0-GbKan-bfR6g75WYhf-kiGHin6Iecc,4101
23
- bitwarden_workflow_linter-0.2.0.dist-info/METADATA,sha256=Ngdn_7McvWBsZdScPnK0oIDaFvq_I9vjw-RCIa1_Sgo,6146
24
- bitwarden_workflow_linter-0.2.0.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
25
- bitwarden_workflow_linter-0.2.0.dist-info/entry_points.txt,sha256=SA_yF9CwL4VMUvdcmCd7k9rjsQNzfeOUBuDnMnaO8QQ,60
26
- bitwarden_workflow_linter-0.2.0.dist-info/licenses/LICENSE.txt,sha256=uY-7N9tbI7xc_c0WeTIGpacSCnsB91N05eCIg3bkaRw,35140
27
- bitwarden_workflow_linter-0.2.0.dist-info/RECORD,,
20
+ bitwarden_workflow_linter/rules/step_approved.py,sha256=MZN423Dsk_1DRDuLz7TE9BE0YbLmZbFEHgcoF1MrFGM,3277
21
+ bitwarden_workflow_linter/rules/step_pinned.py,sha256=CSHbyeLx1uT8exRzOgFVc1dzMJGnbXhTHiteaoOLWUk,3390
22
+ bitwarden_workflow_linter/rules/underscore_outputs.py,sha256=johfE2Qwb_ww4xbW5u-ug37wNZbHZgKdRYg339cxUR8,4381
23
+ bitwarden_workflow_linter-0.3.0.dist-info/METADATA,sha256=Z6PQeT42vZx_emiBmPcharErkbda5qqbzpXyGFLfUlU,6146
24
+ bitwarden_workflow_linter-0.3.0.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
25
+ bitwarden_workflow_linter-0.3.0.dist-info/entry_points.txt,sha256=SA_yF9CwL4VMUvdcmCd7k9rjsQNzfeOUBuDnMnaO8QQ,60
26
+ bitwarden_workflow_linter-0.3.0.dist-info/licenses/LICENSE.txt,sha256=uY-7N9tbI7xc_c0WeTIGpacSCnsB91N05eCIg3bkaRw,35140
27
+ bitwarden_workflow_linter-0.3.0.dist-info/RECORD,,