We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Signer client does not support files with '.' in filenames
Many of our artifacts contain '.' in the artifact names.

`client-benchmarks-1.0.0-javadoc.jar`

These files need to be signed properly.

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `bundle-workflow/src/sign.py`
Content:
```
1 #!/usr/bin/env python
2 
3 # SPDX-License-Identifier: Apache-2.0
4 #
5 # The OpenSearch Contributors require contributions made to
6 # this file be licensed under the Apache-2.0 license or a
7 # compatible open source license.
8 
9 import argparse
10 
11 from manifests.build_manifest import BuildManifest
12 from signing_workflow.signer import Signer
13 
14 parser = argparse.ArgumentParser(description="Sign artifacts")
15 parser.add_argument(
16     "manifest", type=argparse.FileType("r"), help="Path to local manifest file."
17 )
18 parser.add_argument("--component", nargs="?", help="Component name")
19 parser.add_argument("--type", nargs="?", help="Artifact type")
20 args = parser.parse_args()
21 
22 manifest = BuildManifest.from_file(args.manifest)
23 signer = Signer()
24 
25 for component in manifest.components:
26 
27     if args.component and args.component != component.name:
28         print(f"\nSkipping {component.name}")
29         continue
30 
31     print(f"\nSigning {component.name}")
32     for artifact_type in component.artifacts:
33 
34         if args.type and args.type != artifact_type:
35             continue
36 
37         signer.sign(component.artifacts[artifact_type])
38 
39 print("Done.")
40
```

Path: `bundle-workflow/src/signing_workflow/signer.py`
Content:
```
1 #!/usr/bin/env python
2 
3 # SPDX-License-Identifier: Apache-2.0
4 #
5 # The OpenSearch Contributors require contributions made to
6 # this file be licensed under the Apache-2.0 license or a
7 # compatible open source license.
8 
9 import os
10 import pathlib
11 
12 from git.git_repository import GitRepository
13 
14 """
15 This class is responsible for signing an artifact using the OpenSearch-signer-client and verifying its signature.
16 The signed artifacts will be found in the same location as the original artifacts.
17 """
18 
19 
20 class Signer:
21 
22     ACCEPTED_FILE_TYPES = [".zip", ".jar", ".war", ".pom", ".module", ".tar.gz"]
23 
24     def __init__(self):
25         self.git_repo = GitRepository(self.get_repo_url(), "HEAD")
26         self.git_repo.execute("./bootstrap", subdirname="src")
27         self.git_repo.execute("rm config.cfg", subdirname="src")
28 
29     def sign_artifacts(self, artifacts, basepath):
30         for artifact in artifacts:
31             if self.is_invalid_file_type(artifact):
32                 print(f"Skipping signing of file ${artifact}")
33                 continue
34             location = os.path.join(basepath, artifact)
35             self.sign(location)
36             self.verify(location + ".asc")
37 
38     def is_invalid_file_type(self, file_name):
39         return (
40             "".join(pathlib.Path(file_name).suffixes) not in Signer.ACCEPTED_FILE_TYPES
41         )
42 
43     def get_repo_url(self):
44         if "GITHUB_TOKEN" in os.environ:
45             return "https://${GITHUB_TOKEN}@github.com/opensearch-project/opensearch-signer-client.git"
46         return "https://github.com/opensearch-project/opensearch-signer-client.git"
47 
48     def sign(self, filename):
49         signature_file = filename + ".asc"
50         signing_cmd = [
51             "./opensearch-signer-client",
52             "-i",
53             filename,
54             "-o",
55             signature_file,
56             "-p",
57             "pgp",
58         ]
59         self.git_repo.execute(" ".join(signing_cmd), subdirname="src")
60 
61     def verify(self, filename):
62         verify_cmd = ["gpg", "--verify-files", filename]
63         self.git_repo.execute(" ".join(verify_cmd))
64
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/bundle-workflow/src/sign.py b/bundle-workflow/src/sign.py
--- a/bundle-workflow/src/sign.py
+++ b/bundle-workflow/src/sign.py
@@ -7,6 +7,7 @@
 # compatible open source license.
 
 import argparse
+import os
 
 from manifests.build_manifest import BuildManifest
 from signing_workflow.signer import Signer
@@ -20,6 +21,7 @@
 args = parser.parse_args()
 
 manifest = BuildManifest.from_file(args.manifest)
+basepath = os.path.dirname(os.path.abspath(manifest.name))
 signer = Signer()
 
 for component in manifest.components:
@@ -34,6 +36,6 @@
         if args.type and args.type != artifact_type:
             continue
 
-        signer.sign(component.artifacts[artifact_type])
+        signer.sign_artifacts(component.artifacts[artifact_type], basepath)
 
 print("Done.")
diff --git a/bundle-workflow/src/signing_workflow/signer.py b/bundle-workflow/src/signing_workflow/signer.py
--- a/bundle-workflow/src/signing_workflow/signer.py
+++ b/bundle-workflow/src/signing_workflow/signer.py
@@ -28,17 +28,15 @@
 
     def sign_artifacts(self, artifacts, basepath):
         for artifact in artifacts:
-            if self.is_invalid_file_type(artifact):
+            if not self.is_valid_file_type(artifact):
                 print(f"Skipping signing of file ${artifact}")
                 continue
             location = os.path.join(basepath, artifact)
             self.sign(location)
             self.verify(location + ".asc")
 
-    def is_invalid_file_type(self, file_name):
-        return (
-            "".join(pathlib.Path(file_name).suffixes) not in Signer.ACCEPTED_FILE_TYPES
-        )
+    def is_valid_file_type(self, file_name):
+        return any(x in [pathlib.Path(file_name).suffix, "".join(pathlib.Path(file_name).suffixes)] for x in Signer.ACCEPTED_FILE_TYPES)
 
     def get_repo_url(self):
         if "GITHUB_TOKEN" in os.environ:

{"golden_diff": "diff --git a/bundle-workflow/src/sign.py b/bundle-workflow/src/sign.py\n--- a/bundle-workflow/src/sign.py\n+++ b/bundle-workflow/src/sign.py\n@@ -7,6 +7,7 @@\n # compatible open source license.\n \n import argparse\n+import os\n \n from manifests.build_manifest import BuildManifest\n from signing_workflow.signer import Signer\n@@ -20,6 +21,7 @@\n args = parser.parse_args()\n \n manifest = BuildManifest.from_file(args.manifest)\n+basepath = os.path.dirname(os.path.abspath(manifest.name))\n signer = Signer()\n \n for component in manifest.components:\n@@ -34,6 +36,6 @@\n         if args.type and args.type != artifact_type:\n             continue\n \n-        signer.sign(component.artifacts[artifact_type])\n+        signer.sign_artifacts(component.artifacts[artifact_type], basepath)\n \n print(\"Done.\")\ndiff --git a/bundle-workflow/src/signing_workflow/signer.py b/bundle-workflow/src/signing_workflow/signer.py\n--- a/bundle-workflow/src/signing_workflow/signer.py\n+++ b/bundle-workflow/src/signing_workflow/signer.py\n@@ -28,17 +28,15 @@\n \n     def sign_artifacts(self, artifacts, basepath):\n         for artifact in artifacts:\n-            if self.is_invalid_file_type(artifact):\n+            if not self.is_valid_file_type(artifact):\n                 print(f\"Skipping signing of file ${artifact}\")\n                 continue\n             location = os.path.join(basepath, artifact)\n             self.sign(location)\n             self.verify(location + \".asc\")\n \n-    def is_invalid_file_type(self, file_name):\n-        return (\n-            \"\".join(pathlib.Path(file_name).suffixes) not in Signer.ACCEPTED_FILE_TYPES\n-        )\n+    def is_valid_file_type(self, file_name):\n+        return any(x in [pathlib.Path(file_name).suffix, \"\".join(pathlib.Path(file_name).suffixes)] for x in Signer.ACCEPTED_FILE_TYPES)\n \n     def get_repo_url(self):\n         if \"GITHUB_TOKEN\" in os.environ:\n", "issue": "Signer client does not support files with '.' in filenames\nMany of our artifacts contain '.' in the artifact names.\r\n\r\n`client-benchmarks-1.0.0-javadoc.jar`\r\n\r\nThese files need to be signed properly.\n", "before_files": [{"content": "#!/usr/bin/env python\n\n# SPDX-License-Identifier: Apache-2.0\n#\n# The OpenSearch Contributors require contributions made to\n# this file be licensed under the Apache-2.0 license or a\n# compatible open source license.\n\nimport argparse\n\nfrom manifests.build_manifest import BuildManifest\nfrom signing_workflow.signer import Signer\n\nparser = argparse.ArgumentParser(description=\"Sign artifacts\")\nparser.add_argument(\n    \"manifest\", type=argparse.FileType(\"r\"), help=\"Path to local manifest file.\"\n)\nparser.add_argument(\"--component\", nargs=\"?\", help=\"Component name\")\nparser.add_argument(\"--type\", nargs=\"?\", help=\"Artifact type\")\nargs = parser.parse_args()\n\nmanifest = BuildManifest.from_file(args.manifest)\nsigner = Signer()\n\nfor component in manifest.components:\n\n    if args.component and args.component != component.name:\n        print(f\"\\nSkipping {component.name}\")\n        continue\n\n    print(f\"\\nSigning {component.name}\")\n    for artifact_type in component.artifacts:\n\n        if args.type and args.type != artifact_type:\n            continue\n\n        signer.sign(component.artifacts[artifact_type])\n\nprint(\"Done.\")\n", "path": "bundle-workflow/src/sign.py"}, {"content": "#!/usr/bin/env python\n\n# SPDX-License-Identifier: Apache-2.0\n#\n# The OpenSearch Contributors require contributions made to\n# this file be licensed under the Apache-2.0 license or a\n# compatible open source license.\n\nimport os\nimport pathlib\n\nfrom git.git_repository import GitRepository\n\n\"\"\"\nThis class is responsible for signing an artifact using the OpenSearch-signer-client and verifying its signature.\nThe signed artifacts will be found in the same location as the original artifacts.\n\"\"\"\n\n\nclass Signer:\n\n    ACCEPTED_FILE_TYPES = [\".zip\", \".jar\", \".war\", \".pom\", \".module\", \".tar.gz\"]\n\n    def __init__(self):\n        self.git_repo = GitRepository(self.get_repo_url(), \"HEAD\")\n        self.git_repo.execute(\"./bootstrap\", subdirname=\"src\")\n        self.git_repo.execute(\"rm config.cfg\", subdirname=\"src\")\n\n    def sign_artifacts(self, artifacts, basepath):\n        for artifact in artifacts:\n            if self.is_invalid_file_type(artifact):\n                print(f\"Skipping signing of file ${artifact}\")\n                continue\n            location = os.path.join(basepath, artifact)\n            self.sign(location)\n            self.verify(location + \".asc\")\n\n    def is_invalid_file_type(self, file_name):\n        return (\n            \"\".join(pathlib.Path(file_name).suffixes) not in Signer.ACCEPTED_FILE_TYPES\n        )\n\n    def get_repo_url(self):\n        if \"GITHUB_TOKEN\" in os.environ:\n            return \"https://${GITHUB_TOKEN}@github.com/opensearch-project/opensearch-signer-client.git\"\n        return \"https://github.com/opensearch-project/opensearch-signer-client.git\"\n\n    def sign(self, filename):\n        signature_file = filename + \".asc\"\n        signing_cmd = [\n            \"./opensearch-signer-client\",\n            \"-i\",\n            filename,\n            \"-o\",\n            signature_file,\n            \"-p\",\n            \"pgp\",\n        ]\n        self.git_repo.execute(\" \".join(signing_cmd), subdirname=\"src\")\n\n    def verify(self, filename):\n        verify_cmd = [\"gpg\", \"--verify-files\", filename]\n        self.git_repo.execute(\" \".join(verify_cmd))\n", "path": "bundle-workflow/src/signing_workflow/signer.py"}], "after_files": [{"content": "#!/usr/bin/env python\n\n# SPDX-License-Identifier: Apache-2.0\n#\n# The OpenSearch Contributors require contributions made to\n# this file be licensed under the Apache-2.0 license or a\n# compatible open source license.\n\nimport argparse\nimport os\n\nfrom manifests.build_manifest import BuildManifest\nfrom signing_workflow.signer import Signer\n\nparser = argparse.ArgumentParser(description=\"Sign artifacts\")\nparser.add_argument(\n    \"manifest\", type=argparse.FileType(\"r\"), help=\"Path to local manifest file.\"\n)\nparser.add_argument(\"--component\", nargs=\"?\", help=\"Component name\")\nparser.add_argument(\"--type\", nargs=\"?\", help=\"Artifact type\")\nargs = parser.parse_args()\n\nmanifest = BuildManifest.from_file(args.manifest)\nbasepath = os.path.dirname(os.path.abspath(manifest.name))\nsigner = Signer()\n\nfor component in manifest.components:\n\n    if args.component and args.component != component.name:\n        print(f\"\\nSkipping {component.name}\")\n        continue\n\n    print(f\"\\nSigning {component.name}\")\n    for artifact_type in component.artifacts:\n\n        if args.type and args.type != artifact_type:\n            continue\n\n        signer.sign_artifacts(component.artifacts[artifact_type], basepath)\n\nprint(\"Done.\")\n", "path": "bundle-workflow/src/sign.py"}, {"content": "#!/usr/bin/env python\n\n# SPDX-License-Identifier: Apache-2.0\n#\n# The OpenSearch Contributors require contributions made to\n# this file be licensed under the Apache-2.0 license or a\n# compatible open source license.\n\nimport os\nimport pathlib\n\nfrom git.git_repository import GitRepository\n\n\"\"\"\nThis class is responsible for signing an artifact using the OpenSearch-signer-client and verifying its signature.\nThe signed artifacts will be found in the same location as the original artifacts.\n\"\"\"\n\n\nclass Signer:\n\n    ACCEPTED_FILE_TYPES = [\".zip\", \".jar\", \".war\", \".pom\", \".module\", \".tar.gz\"]\n\n    def __init__(self):\n        self.git_repo = GitRepository(self.get_repo_url(), \"HEAD\")\n        self.git_repo.execute(\"./bootstrap\", subdirname=\"src\")\n        self.git_repo.execute(\"rm config.cfg\", subdirname=\"src\")\n\n    def sign_artifacts(self, artifacts, basepath):\n        for artifact in artifacts:\n            if not self.is_valid_file_type(artifact):\n                print(f\"Skipping signing of file ${artifact}\")\n                continue\n            location = os.path.join(basepath, artifact)\n            self.sign(location)\n            self.verify(location + \".asc\")\n\n    def is_valid_file_type(self, file_name):\n        return any(x in [pathlib.Path(file_name).suffix, \"\".join(pathlib.Path(file_name).suffixes)] for x in Signer.ACCEPTED_FILE_TYPES)\n\n    def get_repo_url(self):\n        if \"GITHUB_TOKEN\" in os.environ:\n            return \"https://${GITHUB_TOKEN}@github.com/opensearch-project/opensearch-signer-client.git\"\n        return \"https://github.com/opensearch-project/opensearch-signer-client.git\"\n\n    def sign(self, filename):\n        signature_file = filename + \".asc\"\n        signing_cmd = [\n            \"./opensearch-signer-client\",\n            \"-i\",\n            filename,\n            \"-o\",\n            signature_file,\n            \"-p\",\n            \"pgp\",\n        ]\n        self.git_repo.execute(\" \".join(signing_cmd), subdirname=\"src\")\n\n    def verify(self, filename):\n        verify_cmd = [\"gpg\", \"--verify-files\", filename]\n        self.git_repo.execute(\" \".join(verify_cmd))\n", "path": "bundle-workflow/src/signing_workflow/signer.py"}]}