diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..aa8b9a08d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,13 @@ +# SPDX-License-Identifier: Apache-2.0 +# Licensed to the Ed-Fi Alliance under one or more agreements. +# The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. +# See the LICENSE and NOTICES files in the project root for more information. + +blank_issues_enabled: false +contact_links: + - name: 🏠 Ed-Fi Community Hub + url: https://community.ed-fi.org + about: For technical support, questions, and community discussions + - name: 📚 Ed-Fi Documentation + url: https://docs.ed-fi.org + about: Official Ed-Fi technical documentation and guides diff --git a/.github/ISSUE_TEMPLATE/engineering-issue.yml b/.github/ISSUE_TEMPLATE/engineering-issue.yml new file mode 100644 index 000000000..c008e2548 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/engineering-issue.yml @@ -0,0 +1,47 @@ +# SPDX-License-Identifier: Apache-2.0 +# Licensed to the Ed-Fi Alliance under one or more agreements. +# The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. +# See the LICENSE and NOTICES files in the project root for more information. + +name: "🔧 Engineering Team Issue" +description: "Internal issue for Ed-Fi engineering team members only" +title: "Feature: [Brief Description of the Issue]" +labels: [] +assignees: [] +body: + - type: markdown + attributes: + value: | + ## ⚠️ Engineering Team Only + + This template is for Ed-Fi engineering team members only. + + If you're not part of the engineering team, please use the [Ed-Fi Community Hub](https://community.ed-fi.org) for support. + + - type: textarea + id: description + attributes: + label: "Issue Description" + description: "Describe the issue or task" + placeholder: "Clear description of the issue..." + validations: + required: true + + - type: textarea + id: acceptance-criteria + attributes: + label: "Acceptance Criteria" + description: "What needs to be done to resolve this issue?" + placeholder: "- [ ] Criteria 1\n- [ ] Criteria 2" + validations: + required: false + + - type: textarea + id: additional-context + attributes: + label: "Additional Context" + description: "Any additional information, screenshots, or context" + placeholder: "Additional details..." + validations: + required: false + diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml new file mode 100644 index 000000000..e5a59a901 --- /dev/null +++ b/.github/workflows/copilot-setup-steps.yml @@ -0,0 +1,32 @@ +# SPDX-License-Identifier: Apache-2.0 +# Licensed to the Ed-Fi Alliance under one or more agreements. +# The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. +# See the LICENSE and NOTICES files in the project root for more information. + +name: Copilot Setup Steps + +on: + workflow_dispatch: + push: + paths: + - ".github/workflows/copilot-setup-steps.yml" + pull_request: + paths: + - ".github/workflows/copilot-setup-steps.yml" + +permissions: + contents: read + +jobs: + copilot-setup-steps: + name: Copilot Setup Steps + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + - name: Install DMS packages + run: dotnet restore src/dms/EdFi.DataManagementService.sln + + - name: Install Config Service packages + run: dotnet restore src/config/EdFi.DmsConfigurationService.sln diff --git a/.github/workflows/on-issue-opened.yml b/.github/workflows/on-issue-opened.yml new file mode 100644 index 000000000..938b97baf --- /dev/null +++ b/.github/workflows/on-issue-opened.yml @@ -0,0 +1,72 @@ +# SPDX-License-Identifier: Apache-2.0 +# Licensed to the Ed-Fi Alliance under one or more agreements. +# The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. +# See the LICENSE and NOTICES files in the project root for more information. + +name: "Issue Management" + +on: + issues: + types: [opened] + +permissions: + issues: write + +jobs: + manage-community-issues: + runs-on: ubuntu-latest + if: github.event.issue.user.type != 'bot' + steps: + - name: Check if user has repository access + id: check-repo-access + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + with: + script: | + try { + // Check if user has repository access (collaborator, maintainer, admin, etc.) + const { data: permission } = await github.rest.repos.getCollaboratorPermissionLevel({ + owner: context.repo.owner, + repo: context.repo.repo, + username: context.payload.issue.user.login + }); + + console.log(`User ${context.payload.issue.user.login} repository permission: ${permission.permission}`); + return ['admin', 'maintain', 'write', 'triage'].includes(permission.permission); + } catch (error) { + console.log(`User ${context.payload.issue.user.login} does not have repository access: ${error.message}`); + return false; + } + + - name: Close community issue with helpful message + if: steps.check-repo-access.outputs.result == 'false' + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + with: + script: | + const message = `Thank you for your interest in Ed-Fi! + + This GitHub repository is maintained by the Ed-Fi engineering team for internal issue tracking and development coordination. + + For technical support, questions, and community discussions, please visit the **[Ed-Fi Community Hub](https://community.ed-fi.org)** where our community and support team can better assist you. + + The Ed-Fi Community Hub provides: + - Technical support and troubleshooting + - Community discussions and best practices + - Documentation and resources + - Direct access to Ed-Fi experts + + We appreciate your understanding and look forward to helping you on the Community Hub!`; + + await github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: message + }); + + await github.rest.issues.update({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + state: 'closed', + state_reason: 'not_planned' + }); diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 000000000..79a773a93 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,41 @@ +# Data Management Service Agent Instructions + +## General + +* Make only high confidence suggestions when reviewing code changes. +* Never change NuGet.config files unless explicitly asked to. + +### Code Quality + +* **REQUIRED**: Obey the `.editorconfig` file settings at all times. The project uses: + * UTF-8 character encoding + * LF line endings + * 2-space indentation + * Spaces for indentation style + * Final newlines required + * Trailing whitespace must be trimmed +* **REQUIRED**: run the appropriate build process and correct any build errors with the following scripts: + * If modifying code in `./src/dms` then run `dotnet build --no-restore ./src/dms/EdFi.DataManagementService.sln` + * If modifying code in `./src/config` then run `dotnet build --no-restore ./src/config/EdFi.DmsConfigurationService.sln` + +## Formatting + +* Apply code-formatting style defined in `.editorconfig`. +* Prefer file-scoped namespace declarations and single-line using directives. +* Insert a newline before the opening curly brace of any code block (e.g., after `if`, `for`, `while`, `foreach`, `using`, `try`, etc.). +* Ensure that the final return statement of a method is on its own line. +* Use pattern matching and switch expressions wherever possible. +* Use `nameof` instead of string literals when referring to member names. + +### Nullable Reference Types + +* Declare variables non-nullable, and check for `null` at entry points. +* Always use `is null` or `is not null` instead of `== null` or `!= null`. +* Trust the C# null annotations and don't add null checks when the type system says a value cannot be null. + +### Testing + +* We use NUnit tests. +* We use FluentAssertions for assertions. +* Use FakeItEasy for mocking in tests. +* Copy existing style in nearby files for test method names and capitalization. diff --git a/NOTICES.md b/NOTICES.md index fef9e8d66..08d244235 100644 --- a/NOTICES.md +++ b/NOTICES.md @@ -3,7 +3,7 @@ This product includes software developed at the [Ed-Fi Alliance](https://www.ed-fi.org). -Copyright (c) 2024 Ed-Fi Alliance, LLC and contributors. +Copyright (c) 2026 Ed-Fi Alliance, LLC and contributors. This software distribution includes or contains external references to several open source packages that are attributed below in this notice. Where required, diff --git a/README.md b/README.md index 36695ce80..3f6f057a1 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ See the [docs folder](./docs/) for additional developer-oriented documentation. ## Legal Information -Copyright (c) 2025 Ed-Fi Alliance, LLC and contributors. +Copyright (c) 2026 Ed-Fi Alliance, LLC and contributors. Licensed under the [Apache License, Version 2.0](./LICENSE) (the "License").