René's URL Explorer Experiment


Title: Provide config option to resolve duplicate model names · Issue #783 · openapi-generators/openapi-python-client · GitHub

Open Graph Title: Provide config option to resolve duplicate model names · Issue #783 · openapi-generators/openapi-python-client

X Title: Provide config option to resolve duplicate model names · Issue #783 · openapi-generators/openapi-python-client

Description: I have an OpenAPI spec that has two endpoints with the same operationId ("raw-data"). Their paths are ".../node3/raw-data" and ".../node4/raw-data". The generator doesn't create a model for the Node 3 200 response, because of a name coll...

Open Graph Description: I have an OpenAPI spec that has two endpoints with the same operationId ("raw-data"). Their paths are ".../node3/raw-data" and ".../node4/raw-data". The generator doesn't create a model for the Nod...

X Description: I have an OpenAPI spec that has two endpoints with the same operationId ("raw-data"). Their paths are ".../node3/raw-data" and ".../node4/raw-data". The generator does...

Opengraph URL: https://github.com/openapi-generators/openapi-python-client/issues/783

X: @github

direct link

Domain: github.com


Hey, it has json ld scripts:
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Provide config option to resolve duplicate model names","articleBody":"I have an OpenAPI spec that has two endpoints with the same operationId (\"raw-data\"). Their paths are \".../node3/raw-data\" and \".../node4/raw-data\". The generator doesn't create a model for the Node 3 200 response, because of a name collision with the Node 4 200 response. \r\n\r\nWhat I want is a a config option to resolve this issue.\r\n\r\nAs a suggestion, the option could be to include the first tag in the class name to create unique model class names. The grouping within the \"api\" module into separate folders based on the first tag (\"node3/raw_data.py\" and \"node4/raw_data.py\", respectively) prevents name collisions there. I want something similar for the models. \r\n\r\nUsing \"class_override\" in the config doesn't work, because both of the RawDataResponse200 model classes are renamed and the issue persists. \r\n\r\nWhat I'm doing currently is manually editing my OpenAPI spec before running the generator. I don't have any detailed control of how my OpenAPI spec is generated, it comes from a third party program. It would be great to not have to do this manually, since the generator output becomes inconsistent (suddenly there's an endpoint method in the client library with a name different from the API endpoint) and it's harder to maintain. \r\n\r\nHere is the relevant warning message:\r\n```\r\nWarning(s) encountered while generating. Client was generated, but some pieces may be missing\r\n\r\nWARNING parsing GET /v0/node3/raw-data within node3.\r\n\r\nCannot parse response for status code 200 (Attempted to generate duplicate models with name \"RawDataResponse200\"), response will be ommitted from generated client\r\n\r\nSchema(title=None, multipleOf=None, maximum=None, exclusiveMaximum=None, minimum=None, exclusiveMinimum=None, maxLength=None, minLength=None, pattern=None, maxItems=None, minItems=None, uniqueItems=None, maxProperties=None, minProperties=None, required=None, enum=None, type=None, allOf=[], oneOf=[], anyOf=[], schema_not=None, items=None, properties={'node3.raw-dataResponse': Schema(title=None, multipleOf=None, maximum=None, exclusiveMaximum=None, minimum=None, exclusiveMinimum=None, maxLength=None, minLength=None, pattern=None, maxItems=None, minItems=None, uniqueItems=None, maxProperties=None, minProperties=None, required=None, enum=None, type=\u003cDataType.OBJECT: 'object'\u003e, allOf=[], oneOf=[], anyOf=[], schema_not=None, items=None, properties={'node3.VARCHAR': Schema(title=None, multipleOf=None, maximum=None, exclusiveMaximum=None, minimum=None, exclusiveMinimum=None, maxLength=None, minLength=None, pattern=None, maxItems=None, minItems=None, uniqueItems=None, maxProperties=None, minProperties=None, required=None, enum=None, type=\u003cDataType.STRING: 'string'\u003e, allOf=[], oneOf=[], anyOf=[], schema_not=None, items=None, properties=None, additionalProperties=None, description=None, schema_format=None, default=None, nullable=False, discriminator=None, readOnly=None, writeOnly=None, xml=None, externalDocs=None, example=None, deprecated=None), 'node3.raw-dataResult': Schema(title=None, multipleOf=None, maximum=None, exclusiveMaximum=None, minimum=None, exclusiveMinimum=None, maxLength=None, minLength=None, pattern=None, maxItems=None, minItems=None, uniqueItems=None, maxProperties=None, minProperties=None, required=None, enum=None, type=\u003cDataType.OBJECT: 'object'\u003e, allOf=[], oneOf=[], anyOf=[], schema_not=None, items=None, properties={'node3.row': Schema(title=None, multipleOf=None, maximum=None, exclusiveMaximum=None, minimum=None, exclusiveMinimum=None, maxLength=None, minLength=None, pattern=None, maxItems=None, minItems=None, uniqueItems=None, maxProperties=None, minProperties=None, required=None, enum=None, type=\u003cDataType.ARRAY: 'array'\u003e, allOf=[], oneOf=[], anyOf=[], schema_not=None, items=Schema(title=None, multipleOf=None, maximum=None, exclusiveMaximum=None, minimum=None, exclusiveMinimum=None, maxLength=None, minLength=None, pattern=None, maxItems=None, minItems=None, uniqueItems=None, maxProperties=None, minProperties=None, required=None, enum=None, type=\u003cDataType.OBJECT: 'object'\u003e, allOf=[], oneOf=[], anyOf=[], schema_not=None, items=None, properties={'node3.datetime': Schema(title=None, multipleOf=None, maximum=None, exclusiveMaximum=None, minimum=None, exclusiveMinimum=None, maxLength=None, minLength=None, pattern=None, maxItems=None, minItems=None, uniqueItems=None, maxProperties=None, minProperties=None, required=None, enum=None, type=\u003cDataType.STRING: 'string'\u003e, allOf=[], oneOf=[], anyOf=[], schema_not=None, items=None, properties=None, additionalProperties=None, description=None, schema_format='date-time', default=None, nullable=False, discriminator=None, readOnly=None, writeOnly=None, xml=None, externalDocs=None, example=None, deprecated=None), 'node3.value': Schema(title=None, multipleOf=None, maximum=None, exclusiveMaximum=None, minimum=None, exclusiveMinimum=None, maxLength=None, minLength=None, pattern=None, maxItems=None, minItems=None, uniqueItems=None, maxProperties=None, minProperties=None, required=None, enum=None, type=\u003cDataType.NUMBER: 'number'\u003e, allOf=[], oneOf=[], anyOf=[], schema_not=None, items=None, properties=None, additionalProperties=None, description=None, schema_format='float', default=None, nullable=False, discriminator=None, readOnly=None, writeOnly=None, xml=None, externalDocs=None, example=None, deprecated=None)}, additionalProperties=None, description=None, schema_format=None, default=None, nullable=False, discriminator=None, readOnly=None, writeOnly=None, xml=None, externalDocs=None, example=None, deprecated=None), properties=None, additionalProperties=None, description=None, schema_format=None, default=None, nullable=False, discriminator=None, readOnly=None, writeOnly=None, xml=None, externalDocs=None, example=None, deprecated=None)}, additionalProperties=None, description=None, schema_format=None, default=None, nullable=False, discriminator=None, readOnly=None, writeOnly=None, xml=None, externalDocs=None, example=None, deprecated=None)}, additionalProperties=None, description=None, schema_format=None, default=None, nullable=False, discriminator=None, readOnly=None, writeOnly=None, xml=None, externalDocs=None, example=None, deprecated=None)}, additionalProperties=None, description=None, schema_format=None, default=None, nullable=False, discriminator=None, readOnly=None, writeOnly=None, xml=None, externalDocs=None, example=None, deprecated=None)\r\n\r\nIf you believe this was a mistake or this tool is missing a feature you need, please open an issue at https://github.com/openapi-generators/openapi-python-client/issues/new/choose\r\n```\r\n\r\n\r\nand here are the relevant parts of my OpenAPI spec that can be used to recreate the issue\r\n\r\n```json\r\n{\r\n    \"openapi\": \"3.0.1\",\r\n    \"info\": {\r\n        \"title\": \"redacted\",\r\n        \"description\": \"redacted\",\r\n        \"version\": \"redacted\"\r\n    },\r\n    \"servers\": [\r\n        {\r\n            \"url\": \"https://example.com\",\r\n            \"description\": \"redacted\"\r\n        }\r\n    ],\r\n    \"tags\": [\r\n        {\r\n            \"name\": \"node4\"\r\n        },\r\n        {\r\n            \"name\": \"node3\"\r\n        }\r\n    ],\r\n    \"paths\": {\r\n        \"/v0/node4/raw-data\": {\r\n            \"get\": {\r\n                \"tags\": [\r\n                    \"node4\"\r\n                ],\r\n                \"summary\": \"raw-data\",\r\n                \"description\": \"\",\r\n                \"operationId\": \"raw-data\",\r\n                \"parameters\": [\r\n                    {\r\n                        \"name\": \"i_bucket\",\r\n                        \"in\": \"query\",\r\n                        \"required\": false,\r\n                        \"schema\": {\r\n                            \"type\": \"string\"\r\n                        }\r\n                    },\r\n                    {\r\n                        \"name\": \"i_range\",\r\n                        \"in\": \"query\",\r\n                        \"required\": false,\r\n                        \"schema\": {\r\n                            \"type\": \"string\"\r\n                        }\r\n                    },\r\n                    {\r\n                        \"name\": \"i_measurement\",\r\n                        \"in\": \"query\",\r\n                        \"required\": false,\r\n                        \"schema\": {\r\n                            \"type\": \"string\"\r\n                        }\r\n                    },\r\n                    {\r\n                        \"name\": \"i_filter\",\r\n                        \"in\": \"query\",\r\n                        \"required\": false,\r\n                        \"schema\": {\r\n                            \"type\": \"string\"\r\n                        }\r\n                    }\r\n                ],\r\n                \"responses\": {\r\n                    \"200\": {\r\n                        \"description\": \"Successful response\",\r\n                        \"content\": {\r\n                            \"application/json\": {\r\n                                \"schema\": {\r\n                                    \"properties\": {\r\n                                        \"node4.raw-dataResponse\": {\r\n                                            \"type\": \"object\",\r\n                                            \"properties\": {\r\n                                                \"node4.VARCHAR\": {\r\n                                                    \"type\": \"string\"\r\n                                                },\r\n                                                \"node4.raw-dataResult\": {\r\n                                                    \"type\": \"object\",\r\n                                                    \"properties\": {\r\n                                                        \"node4.row\": {\r\n                                                            \"type\": \"array\",\r\n                                                            \"items\": {\r\n                                                                \"type\": \"object\",\r\n                                                                \"properties\": {\r\n                                                                    \"node4.datetime\": {\r\n                                                                        \"type\": \"string\",\r\n                                                                        \"format\": \"date-time\"\r\n                                                                    },\r\n                                                                    \"node4.value\": {\r\n                                                                        \"type\": \"string\"\r\n                                                                    },\r\n                                                                    \"node4.field\": {\r\n                                                                        \"type\": \"string\"\r\n                                                                    }\r\n                                                                }\r\n                                                            }\r\n                                                        }\r\n                                                    }\r\n                                                }\r\n                                            }\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        },\r\n        \"/v0/node3/raw-data\": {\r\n            \"get\": {\r\n                \"tags\": [\r\n                    \"node3\"\r\n                ],\r\n                \"summary\": \"raw-data\",\r\n                \"description\": \"\",\r\n                \"operationId\": \"raw-data\",\r\n                \"parameters\": [\r\n                    {\r\n                        \"name\": \"i_measurement\",\r\n                        \"in\": \"query\",\r\n                        \"required\": false,\r\n                        \"schema\": {\r\n                            \"type\": \"string\"\r\n                        }\r\n                    },\r\n                    {\r\n                        \"name\": \"i_from\",\r\n                        \"in\": \"query\",\r\n                        \"required\": false,\r\n                        \"schema\": {\r\n                            \"type\": \"string\"\r\n                        }\r\n                    },\r\n                    {\r\n                        \"name\": \"i_to\",\r\n                        \"in\": \"query\",\r\n                        \"required\": false,\r\n                        \"schema\": {\r\n                            \"type\": \"string\"\r\n                        }\r\n                    }\r\n                ],\r\n                \"responses\": {\r\n                    \"200\": {\r\n                        \"description\": \"Successful response\",\r\n                        \"content\": {\r\n                            \"application/json\": {\r\n                                \"schema\": {\r\n                                    \"properties\": {\r\n                                        \"node3.raw-dataResponse\": {\r\n                                            \"type\": \"object\",\r\n                                            \"properties\": {\r\n                                                \"node3.VARCHAR\": {\r\n                                                    \"type\": \"string\"\r\n                                                },\r\n                                                \"node3.raw-dataResult\": {\r\n                                                    \"type\": \"object\",\r\n                                                    \"properties\": {\r\n                                                        \"node3.row\": {\r\n                                                            \"type\": \"array\",\r\n                                                            \"items\": {\r\n                                                                \"type\": \"object\",\r\n                                                                \"properties\": {\r\n                                                                    \"node3.datetime\": {\r\n                                                                        \"type\": \"string\",\r\n                                                                        \"format\": \"date-time\"\r\n                                                                    },\r\n                                                                    \"node3.value\": {\r\n                                                                        \"type\": \"number\",\r\n                                                                        \"format\": \"float\"\r\n                                                                    }\r\n                                                                }\r\n                                                            }\r\n                                                        }\r\n                                                    }\r\n                                                }\r\n                                            }\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n```","author":{"url":"https://github.com/odaom","@type":"Person","name":"odaom"},"datePublished":"2023-07-31T12:29:59.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/783/openapi-python-client/issues/783"}

route-pattern/_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format)
route-controllervoltron_issues_fragments
route-actionissue_layout
fetch-noncev2:b55f5b44-bd2b-81a2-89d6-2248574c929c
current-catalog-service-hash81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114
request-idBE6A:3FE9A:B88209:E93428:697EFC06
html-safe-nonce26e7a5f7f6195e19e78aaf2fd9a1d4b1adac6e469365b5243e34d0f5f35de4fd
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCRTZBOjNGRTlBOkI4ODIwOTpFOTM0Mjg6Njk3RUZDMDYiLCJ2aXNpdG9yX2lkIjoiMjU4MjY2MTAyNzY2OTY3MDkxOCIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9
visitor-hmac627d91d4b8f18aade67e800e31073a33c2a42b1be97791e300ce709accca3cbc
hovercard-subject-tagissue:1829087406
github-keyboard-shortcutsrepository,issues,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///voltron/issues_fragments/issue_layout
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/openapi-generators/openapi-python-client/783/issue_layout
twitter:imagehttps://opengraph.githubassets.com/21c4f80b7c11e241c7080b54b67f3e061bc09ac6826f07488a6e6f16523e7e00/openapi-generators/openapi-python-client/issues/783
twitter:cardsummary_large_image
og:imagehttps://opengraph.githubassets.com/21c4f80b7c11e241c7080b54b67f3e061bc09ac6826f07488a6e6f16523e7e00/openapi-generators/openapi-python-client/issues/783
og:image:altI have an OpenAPI spec that has two endpoints with the same operationId ("raw-data"). Their paths are ".../node3/raw-data" and ".../node4/raw-data". The generator doesn't create a model for the Nod...
og:image:width1200
og:image:height600
og:site_nameGitHub
og:typeobject
og:author:usernameodaom
hostnamegithub.com
expected-hostnamegithub.com
None60279d4097367e16897439d16d6bbe4180663db828c666eeed2656988ffe59f6
turbo-cache-controlno-preview
go-importgithub.com/openapi-generators/openapi-python-client git https://github.com/openapi-generators/openapi-python-client.git
octolytics-dimension-user_id84925606
octolytics-dimension-user_loginopenapi-generators
octolytics-dimension-repository_id240776275
octolytics-dimension-repository_nwoopenapi-generators/openapi-python-client
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id240776275
octolytics-dimension-repository_network_root_nwoopenapi-generators/openapi-python-client
turbo-body-classeslogged-out env-production page-responsive
disable-turbofalse
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release7c85641c598ad130c74f7bcc27f58575cac69551
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/openapi-generators/openapi-python-client/issues/783#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenapi-generators%2Fopenapi-python-client%2Fissues%2F783
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub SparkBuild and deploy intelligent appshttps://github.com/features/spark
GitHub ModelsManage and compare promptshttps://github.com/features/models
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
GitHub SponsorsFund open source developershttps://github.com/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/accelerator
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenapi-generators%2Fopenapi-python-client%2Fissues%2F783
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fvoltron%2Fissues_fragments%2Fissue_layout&source=header-repo&source_repo=openapi-generators%2Fopenapi-python-client
Reloadhttps://github.com/openapi-generators/openapi-python-client/issues/783
Reloadhttps://github.com/openapi-generators/openapi-python-client/issues/783
Reloadhttps://github.com/openapi-generators/openapi-python-client/issues/783
openapi-generators https://github.com/openapi-generators
openapi-python-clienthttps://github.com/openapi-generators/openapi-python-client
Please reload this pagehttps://github.com/openapi-generators/openapi-python-client/issues/783
Notifications https://github.com/login?return_to=%2Fopenapi-generators%2Fopenapi-python-client
Fork 264 https://github.com/login?return_to=%2Fopenapi-generators%2Fopenapi-python-client
Star 1.9k https://github.com/login?return_to=%2Fopenapi-generators%2Fopenapi-python-client
Code https://github.com/openapi-generators/openapi-python-client
Issues 77 https://github.com/openapi-generators/openapi-python-client/issues
Pull requests 13 https://github.com/openapi-generators/openapi-python-client/pulls
Discussions https://github.com/openapi-generators/openapi-python-client/discussions
Actions https://github.com/openapi-generators/openapi-python-client/actions
Security 2 https://github.com/openapi-generators/openapi-python-client/security
Insights https://github.com/openapi-generators/openapi-python-client/pulse
Code https://github.com/openapi-generators/openapi-python-client
Issues https://github.com/openapi-generators/openapi-python-client/issues
Pull requests https://github.com/openapi-generators/openapi-python-client/pulls
Discussions https://github.com/openapi-generators/openapi-python-client/discussions
Actions https://github.com/openapi-generators/openapi-python-client/actions
Security https://github.com/openapi-generators/openapi-python-client/security
Insights https://github.com/openapi-generators/openapi-python-client/pulse
New issuehttps://github.com/login?return_to=https://github.com/openapi-generators/openapi-python-client/issues/783
New issuehttps://github.com/login?return_to=https://github.com/openapi-generators/openapi-python-client/issues/783
Provide config option to resolve duplicate model nameshttps://github.com/openapi-generators/openapi-python-client/issues/783#top
✨ enhancementNew feature or improvementhttps://github.com/openapi-generators/openapi-python-client/issues?q=state%3Aopen%20label%3A%22%E2%9C%A8%20enhancement%22
https://github.com/odaom
https://github.com/odaom
odaomhttps://github.com/odaom
on Jul 31, 2023https://github.com/openapi-generators/openapi-python-client/issues/783#issue-1829087406
✨ enhancementNew feature or improvementhttps://github.com/openapi-generators/openapi-python-client/issues?q=state%3Aopen%20label%3A%22%E2%9C%A8%20enhancement%22
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.