diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..01f8c89 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,26 @@ +name: Bug report +description: Report a reproducible problem in this public project +body: + - type: markdown + attributes: + value: "For vulnerabilities use Security → Report a vulnerability. Remove tokens, private designs and restricted files before sharing." + - type: input + id: versions + attributes: + label: Versions and environment + description: Repository/package version, DDS version if applicable, OS and runtime + validations: + required: true + - type: textarea + id: reproduction + attributes: + label: Minimal reproduction + description: Steps or a small example you are allowed to publish + validations: + required: true + - type: textarea + id: behavior + attributes: + label: Expected and actual behavior + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..588a92f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: true +contact_links: + - name: DDS developer documentation + url: https://docs.altifigence.com/developers/plugin-sdk/ + about: Installation, examples, APIs, licensing and host support + - name: Private vulnerability reporting + url: https://github.com/Altifigence/.github/blob/main/SECURITY.md + about: Find the repository's private reporting path before sharing security details diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..e9fa68a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,17 @@ +name: Feature request +description: Propose an improvement with a concrete use case +body: + - type: textarea + id: problem + attributes: + label: Problem and use case + description: Explain who needs this and the current limitation + validations: + required: true + - type: textarea + id: proposal + attributes: + label: Proposed behavior and alternatives + description: Include relevant compatibility, permissions or privacy needs + validations: + required: true diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..a30d67f --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,13 @@ +## Change + +Describe the problem and the behavior after this change. + +## Validation + +List meaningful checks and any limits on what was verified. + +## Publication scope + +- [ ] I have the right to contribute the included code and examples under this repository's license. +- [ ] No credentials, private product implementation, restricted design files or internal deployment configuration are included. +- [ ] Relevant dependency, license, documentation and compatibility changes are explained. diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml new file mode 100644 index 0000000..6743952 --- /dev/null +++ b/.github/workflows/check.yml @@ -0,0 +1,24 @@ +name: Community checks + +on: + push: + branches: [main] + pull_request: + workflow_dispatch: + +permissions: + contents: read + +jobs: + check: + name: Community files + runs-on: ubuntu-24.04 + timeout-minutes: 5 + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + with: + node-version: '24.21.0' + - run: node scripts/check.mjs diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..e6cead5 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,14 @@ +# Community conduct + +Be respectful and constructive. Critique ideas and code, explain technical +disagreements, and welcome contributors with different experience and backgrounds. +Harassment, threats, discrimination, personal attacks, spam and disclosure of +someone else's private information are not acceptable. + +Maintainers may edit or remove inappropriate content, close disruptive discussions +or restrict participation. Use GitHub's **Report abuse** action on the relevant +content for confidential conduct reports. Report software vulnerabilities through +[SECURITY.md](SECURITY.md), not through public discussions. + +These expectations apply to this organization's public repositories and their +issues, pull requests and discussions. They do not change any software license. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..0f80dc7 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,26 @@ +# Contributing to Altifigence public projects + +Read the target repository's README, license, security policy and supported +versions first. Its own guidance takes precedence over these defaults. + +1. Open a focused issue describing the problem, expected behavior and a small + example you can legally publish. Search existing issues first. +2. Make the change on a branch. Preserve compatibility or clearly explain the + migration. Add meaningful tests for changed behavior and run the project's checks. +3. Submit a pull request with the resulting behavior, validation and relevant + license or dependency changes. Keep unrelated changes separate. + +Submit only material you own or have permission to contribute under the target +repository's license. Retain copyright, license and attribution notices. Do not +copy private DDS implementation, customer projects, restricted PDKs, credentials, +service configuration or signing material into a public change. New imports from +another codebase need an explicit file-level rights and publication review. + +Contributing to an Apache-2.0 repository follows that license's contribution terms +unless separately agreed. Publishing your own independently licensed plugin does +not submit its code to Altifigence. No organization-wide license overrides a +repository or a third-party dependency's terms. + +Discuss ideas and code respectfully. Do not post security vulnerabilities publicly; +follow [SECURITY.md](SECURITY.md). A passing check is evidence for its stated scope, +not a guarantee of code safety or compatibility with every DDS release. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md index b941ba6..c58e0a9 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,15 @@ -# .github -Altifigence™ organization profile and community health files. +# Altifigence community + +This repository contains our [public organization profile](profile/README.md) +and shared contribution, support and security guidance. Repository-specific +instructions take precedence over these defaults. + +- [Start with the DDS Plugin SDK](https://github.com/Altifigence/dds-plugin-sdk) +- [Developer documentation](https://docs.altifigence.com/developers/plugin-sdk/) +- [Contributing](CONTRIBUTING.md) · [Support](SUPPORT.md) · [Security](SECURITY.md) +- [Community conduct](CODE_OF_CONDUCT.md) + +Only the community materials in this repository use [Apache-2.0](LICENSE). +This license does not apply to every Altifigence repository or to the proprietary +DDS application. Each project and third-party component states its own license. +Altifigence and third-party trademarks remain subject to their applicable rights. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..7e49427 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,20 @@ +# Security reporting + +For a vulnerability in an Altifigence public project, open that repository's +**Security** tab and select **Report a vulnerability**. Repository-specific +security policies and supported-version tables take precedence. + +Include the affected repository and version, impact, reproduction steps and a +minimal example you are allowed to share. Redact credentials, customer files and +private designs. Do not put vulnerability details in public issues or pull requests. + +If a credential is exposed, revoke or rotate it through its owning service; deleting +a Git commit or public message does not make a credential private again. Do not +test suspected credentials against systems you are not authorized to access. + +Public SDKs and integration source do not provide authorization to access hosted +services or private infrastructure. Hashes, signatures and automated scans do not +prove that arbitrary plugin code is safe. Follow the project's host, permission, +isolation and deployment requirements. + +This policy does not establish a paid support SLA or a bug-bounty program. diff --git a/SUPPORT.md b/SUPPORT.md new file mode 100644 index 0000000..b8e5178 --- /dev/null +++ b/SUPPORT.md @@ -0,0 +1,16 @@ +# Support + +- SDK usage: [developer guide](https://docs.altifigence.com/developers/plugin-sdk/), + [Korean guide](https://docs.altifigence.com/ko-kr/developers/plugin-sdk/), then + [SDK issues](https://github.com/Altifigence/dds-plugin-sdk/issues). +- Tool integrations: read the relevant repository and + [DDS plugin guide](https://docs.altifigence.com/products/digital-design-studio/plugins/). +- Public profile or documentation navigation: use this repository's issues. +- Vulnerabilities: follow [private security reporting](SECURITY.md). + +Include the exact package/product version, operating system, Node/Rust version +when relevant, expected behavior and a minimal reproducible example. SDK version, +tool version and DDS product version are different; report all applicable versions. +Remove tokens, personal data, private project files and restricted third-party +materials before sharing logs. Public repositories do not provide account access +or authorize distribution of proprietary product code. diff --git a/profile/README.md b/profile/README.md index 64527a1..e9355e7 100644 --- a/profile/README.md +++ b/profile/README.md @@ -1,8 +1,43 @@ # Altifigence -Altifigence builds and ships EDA tools for RTL and chip development, alongside -3D physical simulation software. - -Our products are Digital Design Studio and ALcad. +Tools for RTL, chip design and physical simulation. We build **Digital Design +Studio**, including **ALcad**, and publish focused developer tools and integrations. [Website](https://www.altifigence.com) · [Documentation](https://docs.altifigence.com) +· [한국어 문서](https://docs.altifigence.com/ko-kr/) + +## Build a DDS plugin + +Start with the [DDS Plugin SDK](https://github.com/Altifigence/dds-plugin-sdk) +and the [developer guide](https://docs.altifigence.com/developers/plugin-sdk/). +Create diagnostics, themes and commands, or connect a workspace with files and +tools in your own WSL, container or server environment. + +The SDK is an independent, Apache-2.0 developer package with runnable examples, +typed contracts and tests. Open-source and proprietary plugins can use it under +their own applicable licenses. The SDK is a developer preview; supported APIs and +product availability are documented separately. A plugin's license does not grant +workspace permissions, and the development host is not an OS sandbox. + +## Public projects + +| Repository | What is available | +| --- | --- | +| [dds-plugin-sdk](https://github.com/Altifigence/dds-plugin-sdk) | Plugin APIs, themes, user-owned workspace host/client, packaging and consent examples | +| [dds-verilator-plugin](https://github.com/Altifigence/dds-verilator-plugin) | Original adapter source preview and bounded lint planning; no bundled Verilator or tool execution | +| [dds-klayout-plugin](https://github.com/Altifigence/dds-klayout-plugin) | Selected KLayout integration source, package validation, upstream source and notices | +| [dds-vscode-plugin](https://github.com/Altifigence/dds-vscode-plugin) | Selected integration for a separately installed VS Code application; no Microsoft binary or VSIX | + +See [DDS plugins and external tools](https://docs.altifigence.com/products/digital-design-studio/plugins/) +for product behavior. Use each repository's release, source inventory and license +for its exact scope. These repositories do not publish the entire DDS application +or grant access to Altifigence services, signing systems or private product code. + +## Participate + +- Follow the project's README and [contribution guide](https://github.com/Altifigence/.github/blob/main/CONTRIBUTING.md). +- Report reproducible bugs or propose a focused feature in the relevant repository. +- Report vulnerabilities privately through the repository's **Security → Report a vulnerability** action; see [security reporting](https://github.com/Altifigence/.github/blob/main/SECURITY.md). +- Share only code, examples and design data you have permission to publish. Never include tokens, private customer designs or restricted PDK material in an issue or pull request. + +Third-party product names identify integrations and do not imply endorsement. diff --git a/scripts/check.mjs b/scripts/check.mjs new file mode 100644 index 0000000..9f30bd2 --- /dev/null +++ b/scripts/check.mjs @@ -0,0 +1,24 @@ +import assert from 'node:assert/strict'; +import {execFileSync} from 'node:child_process'; +import {readFileSync, statSync} from 'node:fs'; +import {dirname, resolve, relative, sep} from 'node:path'; + +const root = process.cwd(); +const files = execFileSync('git', ['ls-files', '-z'], {encoding: 'utf8'}).split('\0').filter(Boolean); +for (const file of files) { + assert(!/(^|\/)(?:\.env(?:\.|$)|\.ssh|\.aws|node_modules|dist|target)(?:\/|$)/i.test(file), `Private/generated path: ${file}`); + const content = readFileSync(file, 'utf8'); + assert(!/-----BEGIN (?:RSA |EC |OPENSSH )?PRIVATE KEY-----/.test(content), `Private key marker: ${file}`); + if (!file.endsWith('.md')) continue; + for (const match of content.matchAll(/\[[^\]]*\]\(([^\s)]+)(?:\s+"[^"]*")?\)/g)) { + const href = match[1]; + if (/^(?:https?:|mailto:|#)/.test(href)) continue; + const target = resolve(dirname(resolve(root, file)), decodeURIComponent(href.split('#')[0])); + assert(!relative(root, target).split(sep).includes('..'), `Link leaves repository: ${file}`); + assert(statSync(target).isFile(), `Broken local link: ${file}`); + } +} +for (const file of ['LICENSE', 'CONTRIBUTING.md', 'SECURITY.md', 'SUPPORT.md', 'CODE_OF_CONDUCT.md', 'profile/README.md']) { + assert(files.includes(file), `Missing community file: ${file}`); +} +console.log(`Checked ${files.length} tracked community files and local Markdown links.`);