├── .github ├── ISSUE_TEMPLATE │ ├── bug.yml │ └── feature.yml └── workflows │ ├── close-stale-needs-more-info.yml │ ├── labeler-cache-retention.yml │ ├── labeler-predict-issues.yml │ ├── labeler-predict-pulls.yml │ ├── labeler-promote.yml │ ├── labeler-train.yml │ ├── labeler.md │ ├── manual.yml │ ├── remove-needs-more-info.yml │ └── stale.yml ├── .gitignore ├── CODE_OF_CONDUCT.md ├── LICENSE ├── README.md ├── SECURITY.md ├── SUPPORT.md ├── TRIAGE.md └── docs └── media ├── 07-add.existing.project.gif └── TestRunning.gif /.github/ISSUE_TEMPLATE/bug.yml: -------------------------------------------------------------------------------- 1 | name: 🐞 Bug 2 | description: File a bug/issue 3 | labels: [bug] 4 | body: 5 | - type: textarea 6 | attributes: 7 | label: Describe the Issue 8 | description: A clear concise description of what you're experiencing. 9 | validations: 10 | required: false 11 | - type: textarea 12 | attributes: 13 | label: Steps To Reproduce 14 | description: Steps to reproduce the behavior. 15 | placeholder: | 16 | 1. In this environment... 17 | 2. With this config... 18 | 3. Run '...' 19 | 4. See error... 20 | validations: 21 | required: false 22 | - type: textarea 23 | attributes: 24 | label: Expected Behavior 25 | description: A concise description of what you expected to happen. 26 | validations: 27 | required: false 28 | - type: textarea 29 | attributes: 30 | label: Environment Information 31 | description: Information about your environment 32 | placeholder: | 33 | - OS: [e.g. Windows, macOS, Linux] 34 | - VS Code Version [e.g. 1.25.1] 35 | - Extension Version (found in the settings of the extension) [e.g. 1.0.0] 36 | validations: 37 | required: false 38 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature.yml: -------------------------------------------------------------------------------- 1 | name: 💡 Feature Request 2 | description: Suggest a feature 3 | labels: [enhancement] 4 | body: 5 | - type: textarea 6 | attributes: 7 | label: Describe the feature you'd like 8 | description: A clear concise description of what you'd like to see 9 | validations: 10 | required: false 11 | - type: textarea 12 | attributes: 13 | label: Alternatives considered 14 | description: What alternatives have you considered 15 | validations: 16 | required: false 17 | - type: textarea 18 | attributes: 19 | label: Environment Information 20 | description: Information about your environment 21 | placeholder: | 22 | - OS: [e.g. Windows, macOS, Linux] 23 | - VS Code Version [e.g. 1.25.1] 24 | - Extension Version (found in the settings of the extension) [e.g. 1.0.0] 25 | validations: 26 | required: false 27 | -------------------------------------------------------------------------------- /.github/workflows/close-stale-needs-more-info.yml: -------------------------------------------------------------------------------- 1 | name: 'Close Issues with Stale Needs More Info Label' 2 | 3 | on: 4 | schedule: 5 | # Run this workflow at 00:00 every day 6 | - cron: '0 0 * * *' 7 | workflow_dispatch: 8 | 9 | permissions: 10 | issues: write 11 | contents: read 12 | 13 | jobs: 14 | close-stale-issues: 15 | runs-on: ubuntu-latest 16 | steps: 17 | - name: Checkout code 18 | uses: actions/checkout@v3 19 | 20 | - name: Close Stale Issues with Needs More Info Label and Comment 21 | uses: actions/github-script@v6 22 | with: 23 | github-token: ${{secrets.GITHUB_TOKEN}} 24 | script: | 25 | const labelName = 'needs-more-info'; 26 | const excludedLabel = 'enhancement'; 27 | const staleDays = 14; 28 | const closingComment = "This issue has been automatically closed due to inactivity and having the 'needs-more-info' label for more than 14 days. If the issue still persists, please reopen the issue with the requested information."; 29 | const currentDate = new Date(); 30 | const staleDaysInMilliseconds = staleDays * 24 * 60 * 60 * 1000; 31 | 32 | // Fetch all open issues with 'needs-more-info' label 33 | const issues = await github.paginate(github.rest.issues.listForRepo, { 34 | owner: context.repo.owner, 35 | repo: context.repo.repo, 36 | labels: labelName, 37 | state: 'open', 38 | }); 39 | 40 | for (const issue of issues) { 41 | // Skip if the issue has 'enhancement' label 42 | const labels = issue.labels.map(label => label.name); 43 | if (labels.includes(excludedLabel)) { 44 | continue; 45 | } 46 | 47 | let labelAddedDate = null; 48 | 49 | // Fetch events for the issue to find when the label was added 50 | const events = await github.paginate(github.rest.issues.listEvents, { 51 | owner: context.repo.owner, 52 | repo: context.repo.repo, 53 | issue_number: issue.number, 54 | }); 55 | 56 | // Look for the event where the label was added and capture the date 57 | for (const event of events) { 58 | if (event.event === 'labeled' && event.label.name === labelName) { 59 | labelAddedDate = new Date(event.created_at); 60 | break; 61 | } 62 | } 63 | 64 | if (labelAddedDate) { 65 | const issueUpdatedDate = new Date(issue.updated_at); 66 | const labelAddedTime = labelAddedDate.getTime(); 67 | const issueUpdatedTime = issueUpdatedDate.getTime(); 68 | const diffTime = currentDate.getTime() - labelAddedTime; 69 | const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)); 70 | 71 | // Check if the issue was not updated after the label was added and if it has been more than 'staleDays' since the label was added 72 | if (issueUpdatedTime <= labelAddedTime && diffDays > staleDays) { 73 | // Post a closing comment before closing the issue 74 | await github.rest.issues.createComment({ 75 | owner: context.repo.owner, 76 | repo: context.repo.repo, 77 | issue_number: issue.number, 78 | body: closingComment, 79 | }); 80 | 81 | // Close the issue 82 | await github.rest.issues.update({ 83 | owner: context.repo.owner, 84 | repo: context.repo.repo, 85 | issue_number: issue.number, 86 | state: 'closed', 87 | }); 88 | 89 | console.log(`Issue #${issue.number} has been closed with a comment as it has had the '${labelName}' label for more than ${staleDays} days and was not updated since the label was applied.`); 90 | } 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /.github/workflows/labeler-cache-retention.yml: -------------------------------------------------------------------------------- 1 | # Workflow template imported and updated from: 2 | # https://github.com/dotnet/issue-labeler/wiki/Onboarding 3 | # 4 | # See labeler.md for more information 5 | # 6 | # Regularly restore the prediction models from cache to prevent cache eviction 7 | name: "Labeler: Cache Retention" 8 | 9 | # For more information about GitHub's action cache limits and eviction policy, see: 10 | # https://docs.github.com/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows#usage-limits-and-eviction-policy 11 | 12 | on: 13 | schedule: 14 | - cron: "12 20 * * *" # 20:12 every day (arbitrary time daily) 15 | 16 | workflow_dispatch: 17 | inputs: 18 | cache_key: 19 | description: "The cache key suffix to use for restoring the model from cache. Defaults to 'ACTIVE'." 20 | required: true 21 | default: "ACTIVE" 22 | 23 | env: 24 | CACHE_KEY: ${{ inputs.cache_key || 'ACTIVE' }} 25 | 26 | jobs: 27 | restore-cache: 28 | # Do not automatically run the workflow on forks outside the 'microsoft' org 29 | if: ${{ github.event_name == 'workflow_dispatch' || github.repository_owner == 'microsoft' }} 30 | runs-on: ubuntu-latest 31 | strategy: 32 | fail-fast: false 33 | matrix: 34 | type: ["issues"] # Pulls are disabled in this repository, so "pulls" is removed from the matrix 35 | steps: 36 | - uses: dotnet/issue-labeler/restore@46125e85e6a568dc712f358c39f35317366f5eed # v2.0.0 37 | with: 38 | type: ${{ matrix.type }} 39 | cache_key: ${{ env.CACHE_KEY }} 40 | fail-on-cache-miss: true 41 | -------------------------------------------------------------------------------- /.github/workflows/labeler-predict-issues.yml: -------------------------------------------------------------------------------- 1 | # Workflow template imported and updated from: 2 | # https://github.com/dotnet/issue-labeler/wiki/Onboarding 3 | # 4 | # See labeler.md for more information 5 | # 6 | # Predict labels for Issues using a trained model 7 | name: "Labeler: Predict (Issues)" 8 | 9 | on: 10 | # Only automatically predict area labels when issues are first opened 11 | issues: 12 | types: opened 13 | 14 | # Allow dispatching the workflow via the Actions UI, specifying ranges of numbers 15 | workflow_dispatch: 16 | inputs: 17 | issues: 18 | description: "Issue Numbers (comma-separated list of ranges)." 19 | required: true 20 | cache_key: 21 | description: "The cache key suffix to use for restoring the model. Defaults to 'ACTIVE'." 22 | required: true 23 | default: "ACTIVE" 24 | 25 | env: 26 | # Do not allow failure for jobs triggered automatically (as this causes red noise on the workflows list) 27 | ALLOW_FAILURE: ${{ github.event_name == 'workflow_dispatch' }} 28 | 29 | LABEL_PREFIX: "area-" 30 | THRESHOLD: 0.40 31 | 32 | jobs: 33 | predict-issue-label: 34 | # Do not automatically run the workflow on forks outside the 'microsoft' org 35 | if: ${{ github.event_name == 'workflow_dispatch' || github.repository_owner == 'microsoft' }} 36 | runs-on: ubuntu-latest 37 | permissions: 38 | issues: write 39 | steps: 40 | - name: "Restore issues model from cache" 41 | id: restore-model 42 | uses: dotnet/issue-labeler/restore@46125e85e6a568dc712f358c39f35317366f5eed # v2.0.0 43 | with: 44 | type: issues 45 | fail-on-cache-miss: ${{ env.ALLOW_FAILURE }} 46 | quiet: true 47 | 48 | - name: "Predict issue labels" 49 | id: prediction 50 | if: ${{ steps.restore-model.outputs.cache-hit == 'true' }} 51 | uses: dotnet/issue-labeler/predict@46125e85e6a568dc712f358c39f35317366f5eed # v2.0.0 52 | with: 53 | issues: ${{ inputs.issues || github.event.issue.number }} 54 | label_prefix: ${{ env.LABEL_PREFIX }} 55 | threshold: ${{ env.THRESHOLD }} 56 | env: 57 | GITHUB_TOKEN: ${{ github.token }} 58 | continue-on-error: ${{ !env.ALLOW_FAILURE }} 59 | -------------------------------------------------------------------------------- /.github/workflows/labeler-predict-pulls.yml: -------------------------------------------------------------------------------- 1 | # Workflow template imported and updated from: 2 | # https://github.com/dotnet/issue-labeler/wiki/Onboarding 3 | # 4 | # See labeler.md for more information 5 | # 6 | # Predict labels for Pull Requests using a trained model 7 | name: "Labeler: Predict (Pulls)" 8 | 9 | on: 10 | # Per to the following documentation: 11 | # https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows#pull_request_target 12 | # 13 | # The `pull_request_target` event runs in the context of the base of the pull request, rather 14 | # than in the context of the merge commit, as the `pull_request` event does. This prevents 15 | # execution of unsafe code from the head of the pull request that could alter the repository 16 | # or steal any secrets you use in your workflow. This event allows your workflow to do things 17 | # like label or comment on pull requests from forks. 18 | # 19 | # Only automatically predict area labels when pull requests are first opened 20 | pull_request_target: 21 | types: opened 22 | 23 | # Configure the branches that need to have PRs labeled 24 | branches: 25 | - main 26 | 27 | # Allow dispatching the workflow via the Actions UI, specifying ranges of numbers 28 | workflow_dispatch: 29 | inputs: 30 | pulls: 31 | description: "Pull Request Numbers (comma-separated list of ranges)." 32 | required: true 33 | cache_key: 34 | description: "The cache key suffix to use for restoring the model. Defaults to 'ACTIVE'." 35 | required: true 36 | default: "ACTIVE" 37 | 38 | env: 39 | # Do not allow failure for jobs triggered automatically (this can block PR merge) 40 | ALLOW_FAILURE: ${{ github.event_name == 'workflow_dispatch' }} 41 | 42 | LABEL_PREFIX: "area-" 43 | THRESHOLD: 0.40 44 | 45 | jobs: 46 | predict-pull-label: 47 | # Do not automatically run the workflow on forks outside the 'microsoft' org 48 | if: ${{ github.event_name == 'workflow_dispatch' || github.repository_owner == 'microsoft' }} 49 | runs-on: ubuntu-latest 50 | permissions: 51 | pull-requests: write 52 | steps: 53 | - name: "Restore pulls model from cache" 54 | id: restore-model 55 | uses: dotnet/issue-labeler/restore@46125e85e6a568dc712f358c39f35317366f5eed # v2.0.0 56 | with: 57 | type: pulls 58 | fail-on-cache-miss: ${{ env.ALLOW_FAILURE }} 59 | quiet: true 60 | 61 | - name: "Predict pull labels" 62 | id: prediction 63 | if: ${{ steps.restore-model.outputs.cache-hit == 'true' }} 64 | uses: dotnet/issue-labeler/predict@46125e85e6a568dc712f358c39f35317366f5eed # v2.0.0 65 | with: 66 | pulls: ${{ inputs.pulls || github.event.number }} 67 | label_prefix: ${{ env.LABEL_PREFIX }} 68 | threshold: ${{ env.THRESHOLD }} 69 | env: 70 | GITHUB_TOKEN: ${{ github.token }} 71 | continue-on-error: ${{ !env.ALLOW_FAILURE }} 72 | -------------------------------------------------------------------------------- /.github/workflows/labeler-promote.yml: -------------------------------------------------------------------------------- 1 | # Workflow template imported and updated from: 2 | # https://github.com/dotnet/issue-labeler/wiki/Onboarding 3 | # 4 | # See labeler.md for more information 5 | # 6 | # Promote a model from staging to 'ACTIVE', backing up the currently 'ACTIVE' model 7 | name: "Labeler: Promotion" 8 | 9 | on: 10 | # Dispatched via the Actions UI, promotes the staged models from 11 | # a staged slot into the prediction environment 12 | workflow_dispatch: 13 | inputs: 14 | issues: 15 | description: "Issues: Promote Model" 16 | type: boolean 17 | required: true 18 | pulls: 19 | description: "Pulls: Promote Model" 20 | type: boolean 21 | required: true 22 | staged_key: 23 | description: "The cache key suffix to use for promoting a staged model to 'ACTIVE'. Defaults to 'staged'." 24 | required: true 25 | default: "staged" 26 | backup_key: 27 | description: "The cache key suffix to use for backing up the currently active model. Defaults to 'backup'." 28 | default: "backup" 29 | 30 | permissions: 31 | actions: write 32 | 33 | jobs: 34 | promote-issues: 35 | if: ${{ inputs.issues }} 36 | runs-on: ubuntu-latest 37 | steps: 38 | - name: "Promote Model for Issues" 39 | uses: dotnet/issue-labeler/promote@46125e85e6a568dc712f358c39f35317366f5eed # v2.0.0 40 | with: 41 | type: "issues" 42 | staged_key: ${{ inputs.staged_key }} 43 | backup_key: ${{ inputs.backup_key }} 44 | 45 | promote-pulls: 46 | if: ${{ inputs.pulls }} 47 | runs-on: ubuntu-latest 48 | steps: 49 | - name: "Promote Model for Pull Requests" 50 | uses: dotnet/issue-labeler/promote@46125e85e6a568dc712f358c39f35317366f5eed # v2.0.0 51 | with: 52 | type: "pulls" 53 | staged_key: ${{ inputs.staged_key }} 54 | backup_key: ${{ inputs.backup_key }} 55 | -------------------------------------------------------------------------------- /.github/workflows/labeler-train.yml: -------------------------------------------------------------------------------- 1 | # Workflow template imported and updated from: 2 | # https://github.com/dotnet/issue-labeler/wiki/Onboarding 3 | # 4 | # See labeler.md for more information 5 | # 6 | # Train the Issues and Pull Requests models for label prediction 7 | name: "Labeler: Training" 8 | 9 | on: 10 | workflow_dispatch: 11 | inputs: 12 | type: 13 | description: "Issues or Pull Requests" 14 | type: choice 15 | required: true 16 | default: "Issues" # Pulls are disabled in this repository, so default to "Issues" only 17 | options: 18 | - "Both" 19 | - "Issues" 20 | - "Pull Requests" 21 | 22 | steps: 23 | description: "Training Steps" 24 | type: choice 25 | required: true 26 | default: "All" 27 | options: 28 | - "All" 29 | - "Download Data" 30 | - "Train Model" 31 | - "Test Model" 32 | 33 | limit: 34 | description: "Max number of items to download for training/testing the model (newest items are used). Defaults to the max number of pages times the page size." 35 | type: number 36 | page_size: 37 | description: "Number of items per page in GitHub API requests. Defaults to 100 for issues, 25 for pull requests." 38 | type: number 39 | page_limit: 40 | description: "Maximum number of pages to download for training/testing the model. Defaults to 1000 for issues, 4000 for pull requests." 41 | type: number 42 | cache_key_suffix: 43 | description: "The cache key suffix to use for staged data/models (use 'ACTIVE' to bypass staging). Defaults to 'staged'." 44 | required: true 45 | default: "staged" 46 | 47 | env: 48 | CACHE_KEY: ${{ inputs.cache_key_suffix }} 49 | REPOSITORY: ${{ github.repository }} 50 | LABEL_PREFIX: "area-" 51 | THRESHOLD: "0.40" 52 | LIMIT: ${{ inputs.limit }} 53 | PAGE_SIZE: ${{ inputs.page_size }} 54 | PAGE_LIMIT: ${{ inputs.page_limit }} 55 | 56 | jobs: 57 | download-issues: 58 | if: ${{ contains(fromJSON('["Both", "Issues"]'), inputs.type) && contains(fromJSON('["All", "Download Data"]'), inputs.steps) }} 59 | runs-on: ubuntu-latest 60 | permissions: 61 | issues: read 62 | steps: 63 | - name: "Download Issues" 64 | uses: dotnet/issue-labeler/download@46125e85e6a568dc712f358c39f35317366f5eed # v2.0.0 65 | with: 66 | type: "issues" 67 | cache_key: ${{ env.CACHE_KEY }} 68 | repository: ${{ env.REPOSITORY }} 69 | label_prefix: ${{ env.LABEL_PREFIX }} 70 | limit: ${{ env.LIMIT }} 71 | page_size: ${{ env.PAGE_SIZE }} 72 | page_limit: ${{ env.PAGE_LIMIT }} 73 | env: 74 | GITHUB_TOKEN: ${{ github.token }} 75 | 76 | download-pulls: 77 | if: ${{ contains(fromJSON('["Both", "Pull Requests"]'), inputs.type) && contains(fromJSON('["All", "Download Data"]'), inputs.steps) }} 78 | runs-on: ubuntu-latest 79 | permissions: 80 | pull-requests: read 81 | steps: 82 | - name: "Download Pull Requests" 83 | uses: dotnet/issue-labeler/download@46125e85e6a568dc712f358c39f35317366f5eed # v2.0.0 84 | with: 85 | type: "pulls" 86 | cache_key: ${{ env.CACHE_KEY }} 87 | repository: ${{ env.REPOSITORY }} 88 | label_prefix: ${{ env.LABEL_PREFIX }} 89 | limit: ${{ env.LIMIT }} 90 | page_size: ${{ env.PAGE_SIZE }} 91 | page_limit: ${{ env.PAGE_LIMIT }} 92 | env: 93 | GITHUB_TOKEN: ${{ github.token }} 94 | 95 | train-issues: 96 | if: ${{ always() && contains(fromJSON('["Both", "Issues"]'), inputs.type) && contains(fromJSON('["All", "Train Model"]'), inputs.steps) && contains(fromJSON('["success", "skipped"]'), needs.download-issues.result) }} 97 | runs-on: ubuntu-latest 98 | permissions: {} 99 | needs: download-issues 100 | steps: 101 | - name: "Train Model for Issues" 102 | uses: dotnet/issue-labeler/train@46125e85e6a568dc712f358c39f35317366f5eed # v2.0.0 103 | with: 104 | type: "issues" 105 | data_cache_key: ${{ env.CACHE_KEY }} 106 | model_cache_key: ${{ env.CACHE_KEY }} 107 | 108 | train-pulls: 109 | if: ${{ always() && contains(fromJSON('["Both", "Pull Requests"]'), inputs.type) && contains(fromJSON('["All", "Train Model"]'), inputs.steps) && contains(fromJSON('["success", "skipped"]'), needs.download-pulls.result) }} 110 | runs-on: ubuntu-latest 111 | permissions: {} 112 | needs: download-pulls 113 | steps: 114 | - name: "Train Model for Pull Requests" 115 | uses: dotnet/issue-labeler/train@46125e85e6a568dc712f358c39f35317366f5eed # v2.0.0 116 | with: 117 | type: "pulls" 118 | data_cache_key: ${{ env.CACHE_KEY }} 119 | model_cache_key: ${{ env.CACHE_KEY }} 120 | 121 | test-issues: 122 | if: ${{ always() && contains(fromJSON('["Both", "Issues"]'), inputs.type) && contains(fromJSON('["All", "Test Model"]'), inputs.steps) && contains(fromJSON('["success", "skipped"]'), needs.train-issues.result) }} 123 | runs-on: ubuntu-latest 124 | permissions: 125 | issues: read 126 | needs: train-issues 127 | steps: 128 | - name: "Test Model for Issues" 129 | uses: dotnet/issue-labeler/test@46125e85e6a568dc712f358c39f35317366f5eed # v2.0.0 130 | with: 131 | type: "issues" 132 | cache_key: ${{ env.CACHE_KEY }} 133 | repository: ${{ env.REPOSITORY }} 134 | label_prefix: ${{ env.LABEL_PREFIX }} 135 | threshold: ${{ env.THRESHOLD }} 136 | limit: ${{ env.LIMIT }} 137 | page_size: ${{ env.PAGE_SIZE }} 138 | page_limit: ${{ env.PAGE_LIMIT }} 139 | env: 140 | GITHUB_TOKEN: ${{ github.token }} 141 | 142 | test-pulls: 143 | if: ${{ always() && contains(fromJSON('["Both", "Pull Requests"]'), inputs.type) && contains(fromJSON('["All", "Test Model"]'), inputs.steps) && contains(fromJSON('["success", "skipped"]'), needs.train-pulls.result) }} 144 | runs-on: ubuntu-latest 145 | permissions: 146 | pull-requests: read 147 | needs: train-pulls 148 | steps: 149 | - name: "Test Model for Pull Requests" 150 | uses: dotnet/issue-labeler/test@46125e85e6a568dc712f358c39f35317366f5eed # v2.0.0 151 | with: 152 | type: "pulls" 153 | cache_key: ${{ env.CACHE_KEY }} 154 | repository: ${{ env.REPOSITORY }} 155 | label_prefix: ${{ env.LABEL_PREFIX }} 156 | threshold: ${{ env.THRESHOLD }} 157 | limit: ${{ env.LIMIT }} 158 | page_size: ${{ env.PAGE_SIZE }} 159 | page_limit: ${{ env.PAGE_LIMIT }} 160 | env: 161 | GITHUB_TOKEN: ${{ github.token }} 162 | -------------------------------------------------------------------------------- /.github/workflows/labeler.md: -------------------------------------------------------------------------------- 1 | # Issue-Labeler Workflows 2 | 3 | This repository uses actions from [dotnet/issue-labeler](https://github.com/dotnet/issue-labeler) to predict area labels for issues and pull requests. 4 | 5 | The following workflow templates were imported and updated from [dotnet/issue-labeler/wiki/Onboarding](https://github.com/dotnet/issue-labeler/wiki/Onboarding): 6 | 7 | 1. `labeler-cache-retention.yml` 8 | 2. `labeler-predict-issues.yml` 9 | 3. `labeler-predict-pulls.yml` 10 | 4. `labeler-promote.yml` 11 | 5. `labeler-train.yml` 12 | 13 | ## Repository Configuration 14 | 15 | Across these workflows, the following changes were made to configure the issue labeler for this repository: 16 | 17 | 1. Update the `github.repository_owner` checks that prevent workflow runs outside 'microsoft' 18 | - `labeler-cache-retention.yml` 19 | - `labeler-predict-issues.yml` 20 | - `labeler-predict-pulls.yml` 21 | 2. Set `LABEL_PREFIX` to `"area-"`: 22 | - `labeler-predict-issues.yml` 23 | - `labeler-predict-pulls.yml` 24 | - `labeler-train.yml` 25 | 3. Remove the `DEFAULT_LABEL` setting since no default label is applied when prediction is not made: 26 | - `labeler-predict-issues.yml` 27 | - `labeler-predict-pulls.yml` 28 | 4. Remove the `EXCLUDED_AUTHORS` value as we do not bypass labeling for any authors' issues/pulls in this repository: 29 | - `labeler-predict-issues.yml` 30 | - `labeler-predict-pulls.yml` 31 | 5. Remove the `repository` input for training the models against another repository: 32 | - `labeler-train.yml` 33 | 6. Update the cache retention cron schedule to an arbitrary time of day: 34 | - `labeler-cache-retention.yml` 35 | 7. Disable pull request training, cache retention, and predition 36 | - `labeler-train.yml` - Change the default from "Both" to "Issues" 37 | - `labeler-cache-retention.yml` - Remove "pulls" from the job matrix (leaving a comment) 38 | - `labeler-predict-pulls.yml` - Workflow marked as Disabled via GitHub UI 39 | -------------------------------------------------------------------------------- /.github/workflows/manual.yml: -------------------------------------------------------------------------------- 1 | name: 'Manual Cleanup: Remove Needs More Info' 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | permissions: 7 | issues: write 8 | contents: read 9 | 10 | jobs: 11 | remove-label-on-response: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - name: Checkout code 15 | uses: actions/checkout@v3 16 | 17 | - name: Remove Needs More Info Label if Issue Creator Responded 18 | uses: actions/github-script@v6 19 | with: 20 | github-token: ${{secrets.GITHUB_TOKEN}} 21 | script: | 22 | const labelName = 'needs-more-info'; 23 | const commentBody = "The `needs-more-info` label has been removed since the original bug filer has responded since the label was originally set."; 24 | const issues = await github.paginate(github.rest.issues.listForRepo, { 25 | owner: context.repo.owner, 26 | repo: context.repo.repo, 27 | labels: labelName, 28 | state: 'open', 29 | }); 30 | 31 | for (const issue of issues) { 32 | let labelAddedTimestamp = 0; 33 | 34 | // Fetch events to find when the label was added 35 | const events = await github.paginate(github.rest.issues.listEventsForRepo, { 36 | owner: context.repo.owner, 37 | repo: context.repo.repo, 38 | issue_number: issue.number, 39 | }); 40 | 41 | // Determine when the label was added 42 | for (const event of events) { 43 | if (event.event === 'labeled' && event.label.name === labelName) { 44 | labelAddedTimestamp = new Date(event.created_at).getTime(); 45 | break; 46 | } 47 | } 48 | 49 | if (labelAddedTimestamp > 0) { 50 | // Check for comments by the issue creator after the label was added 51 | const comments = await github.paginate(github.rest.issues.listComments, { 52 | owner: context.repo.owner, 53 | repo: context.repo.repo, 54 | issue_number: issue.number, 55 | }); 56 | 57 | const hasResponseAfterLabel = comments.some(comment => { 58 | return new Date(comment.created_at).getTime() > labelAddedTimestamp && 59 | comment.user.login === issue.user.login; 60 | }); 61 | 62 | if (hasResponseAfterLabel) { 63 | // Remove the label 64 | await github.rest.issues.removeLabel({ 65 | owner: context.repo.owner, 66 | repo: context.repo.repo, 67 | issue_number: issue.number, 68 | name: labelName, 69 | }); 70 | 71 | // Add a comment 72 | await github.rest.issues.createComment({ 73 | owner: context.repo.owner, 74 | repo: context.repo.repo, 75 | issue_number: issue.number, 76 | body: commentBody, 77 | }); 78 | 79 | console.log(`Removed "${labelName}" label from issue #${issue.number} and added a comment.`); 80 | } 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /.github/workflows/remove-needs-more-info.yml: -------------------------------------------------------------------------------- 1 | name: 'Remove Needs More Info Label' 2 | 3 | on: 4 | issue_comment: 5 | types: [created] 6 | 7 | permissions: 8 | issues: write 9 | contents: read 10 | 11 | jobs: 12 | debug-and-remove-label: 13 | runs-on: ubuntu-latest 14 | if: github.event.issue.pull_request == null # Ensure it runs only for issue comments 15 | steps: 16 | - name: Checkout code 17 | uses: actions/checkout@v3 18 | 19 | - name: Remove "needs-more-info" Label and Comment 20 | uses: actions/github-script@v6 21 | with: 22 | github-token: ${{secrets.GITHUB_TOKEN}} 23 | script: | 24 | const issue = context.payload.issue; 25 | const user = context.payload.sender; 26 | 27 | // Check if the comment was made by the issue creator 28 | if (issue.user.login === user.login) { 29 | const issueNumber = issue.number; 30 | const labelName = 'needs-more-info'; 31 | let labelAddedByUser = ''; 32 | 33 | // Find who added the 'needs-more-info' label 34 | for await (const response of github.paginate.iterator(github.rest.issues.listEvents, { 35 | owner: context.repo.owner, 36 | repo: context.repo.repo, 37 | issue_number: issueNumber, 38 | })) { 39 | const events = response.data; 40 | const labelEvent = events.find(event => event.event === 'labeled' && event.label.name === labelName); 41 | if (labelEvent) { 42 | labelAddedByUser = labelEvent.actor.login; 43 | break; // Stop at the most recent event that added the label 44 | } 45 | } 46 | 47 | // Get all labels for the issue 48 | const { data: labels } = await github.rest.issues.listLabelsOnIssue({ 49 | owner: context.repo.owner, 50 | repo: context.repo.repo, 51 | issue_number: issueNumber, 52 | }); 53 | 54 | // Check if the issue has the specific label 55 | if (labels.some(label => label.name === labelName)) { 56 | // Remove the label 57 | await github.rest.issues.removeLabel({ 58 | owner: context.repo.owner, 59 | repo: context.repo.repo, 60 | issue_number: issueNumber, 61 | name: labelName, 62 | }); 63 | 64 | // If someone added the label, comment and tag that user 65 | if (labelAddedByUser) { 66 | await github.rest.issues.createComment({ 67 | owner: context.repo.owner, 68 | repo: context.repo.repo, 69 | issue_number: issueNumber, 70 | body: `@${labelAddedByUser}, the '${labelName}' label has been removed upon receiving further response from the original bug filer.`, 71 | }); 72 | } 73 | 74 | console.log(`Label "${labelName}" removed from issue #${issueNumber}.`); 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /.github/workflows/stale.yml: -------------------------------------------------------------------------------- 1 | name: Comment on stale issues 2 | 3 | on: 4 | schedule: 5 | - cron: '0 0 * * *' # This will run daily at midnight 6 | workflow_dispatch: 7 | 8 | jobs: 9 | comment-stale-issues: 10 | runs-on: ubuntu-latest 11 | permissions: 12 | issues: write 13 | contents: read 14 | env: 15 | LABEL_OWNER_MAPPING_JSON: > 16 | { 17 | "area-dotnet-debugging": "@wardengnaw", 18 | "area-extensionmanagement": "@aarnott", 19 | "area-identity": "@andreytretyak", 20 | "area-nuget": "@kartheekp-ms", 21 | "area-project": "@tmeschter", 22 | "area-project-cps": "@michael-eng", 23 | "area-razor": "@phil-allen-msft", 24 | "area-restore": "@kartheekp-ms", 25 | "area-sdk": "@nagilson", 26 | "area-telemetry": "@jonathanjyi", 27 | "area-templates": "@smitpatel", 28 | "area-test": "@abhitejjohn", 29 | "area-maui": "@allend-msft", 30 | "area-unity": "@jbevain", 31 | "area-roslyn": "@arkalyanms" 32 | } 33 | steps: 34 | - name: Checkout repository 35 | uses: actions/checkout@v2 36 | 37 | - name: Comment on stale issues 38 | run: | 39 | LABEL_OWNER_MAPPING=$(echo "${LABEL_OWNER_MAPPING_JSON}") 40 | STALE_DATE=$(date -d '14 days ago' +%Y-%m-%d) 41 | QUERY="repo:microsoft/vscode-dotnettools+is:open+is:issue+updated:<${STALE_DATE}+-label:enhancement+-label:needs-more-info" 42 | ISSUES=$(gh api search/issues?q="${QUERY}" --paginate --jq '.items[] | {number: .number, labels: [.labels[].name], assignees: [.assignees[].login // ""]} | select(.assignees != null)') 43 | 44 | # Process each issue 45 | echo "${ISSUES}" | jq -c '.' | while read -r issue; do 46 | issue_number=$(echo "$issue" | jq '.number') 47 | ASSIGNEES=$(echo "$issue" | jq -r '.assignees') 48 | 49 | # Initialize TAGGED_OWNERS 50 | TAGGED_OWNERS="" 51 | 52 | # Check if there are any assignees 53 | if [[ "$ASSIGNEES" != "[]" ]]; then 54 | for assignee in $ASSIGNEES; do 55 | TAGGED_OWNERS="$TAGGED_OWNERS @$assignee" 56 | done 57 | else 58 | # If no assignees, check for label owners 59 | LABELS=$(echo "$issue" | jq -r '.labels[].name') 60 | for label in $LABELS; do 61 | OWNER=$(echo $LABEL_OWNER_MAPPING | jq -r ".[\"$label\"] // empty") 62 | if [ ! -z "$OWNER" ]; then 63 | # Add the found owner to the list of owners to be tagged 64 | TAGGED_OWNERS="$TAGGED_OWNERS @$OWNER" 65 | fi 66 | done 67 | if [ -z "$TAGGED_OWNERS" ]; then 68 | # If no owners found in the mapping, use default owners 69 | TAGGED_OWNERS="@arkalyanms @webreidi" 70 | fi 71 | fi 72 | 73 | # Remove leading whitespace and duplicate spaces 74 | TAGGED_OWNERS=$(echo $TAGGED_OWNERS | xargs) 75 | 76 | # Comment on the issue and tag the collected owners 77 | COMMENT="This issue has been marked as stale after 14 days of inactivity. $TAGGED_OWNERS, could you please take a look?" 78 | COMMENT=$(echo $COMMENT | sed 's/ @/@/g') # Remove extra space before '@' 79 | gh issue comment $issue_number --body "$COMMENT" 80 | 81 | # Add a delay to stay within API rate limits 82 | sleep 1 83 | done 84 | env: 85 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 86 | 87 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Mono auto generated files 17 | mono_crash.* 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | [Aa][Rr][Mm]/ 27 | [Aa][Rr][Mm]64/ 28 | bld/ 29 | [Bb]in/ 30 | [Oo]bj/ 31 | [Ll]og/ 32 | [Ll]ogs/ 33 | 34 | # Visual Studio 2015/2017 cache/options directory 35 | .vs/ 36 | # Uncomment if you have tasks that create the project's static files in wwwroot 37 | #wwwroot/ 38 | 39 | # Visual Studio 2017 auto generated files 40 | Generated\ Files/ 41 | 42 | # MSTest test Results 43 | [Tt]est[Rr]esult*/ 44 | [Bb]uild[Ll]og.* 45 | 46 | # NUnit 47 | *.VisualState.xml 48 | TestResult.xml 49 | nunit-*.xml 50 | 51 | # Build Results of an ATL Project 52 | [Dd]ebugPS/ 53 | [Rr]eleasePS/ 54 | dlldata.c 55 | 56 | # Benchmark Results 57 | BenchmarkDotNet.Artifacts/ 58 | 59 | # .NET Core 60 | project.lock.json 61 | project.fragment.lock.json 62 | artifacts/ 63 | 64 | # StyleCop 65 | StyleCopReport.xml 66 | 67 | # Files built by Visual Studio 68 | *_i.c 69 | *_p.c 70 | *_h.h 71 | *.ilk 72 | *.meta 73 | *.obj 74 | *.iobj 75 | *.pch 76 | *.pdb 77 | *.ipdb 78 | *.pgc 79 | *.pgd 80 | *.rsp 81 | *.sbr 82 | *.tlb 83 | *.tli 84 | *.tlh 85 | *.tmp 86 | *.tmp_proj 87 | *_wpftmp.csproj 88 | *.log 89 | *.vspscc 90 | *.vssscc 91 | .builds 92 | *.pidb 93 | *.svclog 94 | *.scc 95 | 96 | # Chutzpah Test files 97 | _Chutzpah* 98 | 99 | # Visual C++ cache files 100 | ipch/ 101 | *.aps 102 | *.ncb 103 | *.opendb 104 | *.opensdf 105 | *.sdf 106 | *.cachefile 107 | *.VC.db 108 | *.VC.VC.opendb 109 | 110 | # Visual Studio profiler 111 | *.psess 112 | *.vsp 113 | *.vspx 114 | *.sap 115 | 116 | # Visual Studio Trace Files 117 | *.e2e 118 | 119 | # TFS 2012 Local Workspace 120 | $tf/ 121 | 122 | # Guidance Automation Toolkit 123 | *.gpState 124 | 125 | # ReSharper is a .NET coding add-in 126 | _ReSharper*/ 127 | *.[Rr]e[Ss]harper 128 | *.DotSettings.user 129 | 130 | # TeamCity is a build add-in 131 | _TeamCity* 132 | 133 | # DotCover is a Code Coverage Tool 134 | *.dotCover 135 | 136 | # AxoCover is a Code Coverage Tool 137 | .axoCover/* 138 | !.axoCover/settings.json 139 | 140 | # Visual Studio code coverage results 141 | *.coverage 142 | *.coveragexml 143 | 144 | # NCrunch 145 | _NCrunch_* 146 | .*crunch*.local.xml 147 | nCrunchTemp_* 148 | 149 | # MightyMoose 150 | *.mm.* 151 | AutoTest.Net/ 152 | 153 | # Web workbench (sass) 154 | .sass-cache/ 155 | 156 | # Installshield output folder 157 | [Ee]xpress/ 158 | 159 | # DocProject is a documentation generator add-in 160 | DocProject/buildhelp/ 161 | DocProject/Help/*.HxT 162 | DocProject/Help/*.HxC 163 | DocProject/Help/*.hhc 164 | DocProject/Help/*.hhk 165 | DocProject/Help/*.hhp 166 | DocProject/Help/Html2 167 | DocProject/Help/html 168 | 169 | # Click-Once directory 170 | publish/ 171 | 172 | # Publish Web Output 173 | *.[Pp]ublish.xml 174 | *.azurePubxml 175 | # Note: Comment the next line if you want to checkin your web deploy settings, 176 | # but database connection strings (with potential passwords) will be unencrypted 177 | *.pubxml 178 | *.publishproj 179 | 180 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 181 | # checkin your Azure Web App publish settings, but sensitive information contained 182 | # in these scripts will be unencrypted 183 | PublishScripts/ 184 | 185 | # NuGet Packages 186 | *.nupkg 187 | # NuGet Symbol Packages 188 | *.snupkg 189 | # The packages folder can be ignored because of Package Restore 190 | **/[Pp]ackages/* 191 | # except build/, which is used as an MSBuild target. 192 | !**/[Pp]ackages/build/ 193 | # Uncomment if necessary however generally it will be regenerated when needed 194 | #!**/[Pp]ackages/repositories.config 195 | # NuGet v3's project.json files produces more ignorable files 196 | *.nuget.props 197 | *.nuget.targets 198 | 199 | # Microsoft Azure Build Output 200 | csx/ 201 | *.build.csdef 202 | 203 | # Microsoft Azure Emulator 204 | ecf/ 205 | rcf/ 206 | 207 | # Windows Store app package directories and files 208 | AppPackages/ 209 | BundleArtifacts/ 210 | Package.StoreAssociation.xml 211 | _pkginfo.txt 212 | *.appx 213 | *.appxbundle 214 | *.appxupload 215 | 216 | # Visual Studio cache files 217 | # files ending in .cache can be ignored 218 | *.[Cc]ache 219 | # but keep track of directories ending in .cache 220 | !?*.[Cc]ache/ 221 | 222 | # Others 223 | ClientBin/ 224 | ~$* 225 | *~ 226 | *.dbmdl 227 | *.dbproj.schemaview 228 | *.jfm 229 | *.pfx 230 | *.publishsettings 231 | orleans.codegen.cs 232 | 233 | # Including strong name files can present a security risk 234 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 235 | #*.snk 236 | 237 | # Since there are multiple workflows, uncomment next line to ignore bower_components 238 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 239 | #bower_components/ 240 | 241 | # RIA/Silverlight projects 242 | Generated_Code/ 243 | 244 | # Backup & report files from converting an old project file 245 | # to a newer Visual Studio version. Backup files are not needed, 246 | # because we have git ;-) 247 | _UpgradeReport_Files/ 248 | Backup*/ 249 | UpgradeLog*.XML 250 | UpgradeLog*.htm 251 | ServiceFabricBackup/ 252 | *.rptproj.bak 253 | 254 | # SQL Server files 255 | *.mdf 256 | *.ldf 257 | *.ndf 258 | 259 | # Business Intelligence projects 260 | *.rdl.data 261 | *.bim.layout 262 | *.bim_*.settings 263 | *.rptproj.rsuser 264 | *- [Bb]ackup.rdl 265 | *- [Bb]ackup ([0-9]).rdl 266 | *- [Bb]ackup ([0-9][0-9]).rdl 267 | 268 | # Microsoft Fakes 269 | FakesAssemblies/ 270 | 271 | # GhostDoc plugin setting file 272 | *.GhostDoc.xml 273 | 274 | # Node.js Tools for Visual Studio 275 | .ntvs_analysis.dat 276 | node_modules/ 277 | 278 | # Visual Studio 6 build log 279 | *.plg 280 | 281 | # Visual Studio 6 workspace options file 282 | *.opt 283 | 284 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 285 | *.vbw 286 | 287 | # Visual Studio LightSwitch build output 288 | **/*.HTMLClient/GeneratedArtifacts 289 | **/*.DesktopClient/GeneratedArtifacts 290 | **/*.DesktopClient/ModelManifest.xml 291 | **/*.Server/GeneratedArtifacts 292 | **/*.Server/ModelManifest.xml 293 | _Pvt_Extensions 294 | 295 | # Paket dependency manager 296 | .paket/paket.exe 297 | paket-files/ 298 | 299 | # FAKE - F# Make 300 | .fake/ 301 | 302 | # CodeRush personal settings 303 | .cr/personal 304 | 305 | # Python Tools for Visual Studio (PTVS) 306 | __pycache__/ 307 | *.pyc 308 | 309 | # Cake - Uncomment if you are using it 310 | # tools/** 311 | # !tools/packages.config 312 | 313 | # Tabs Studio 314 | *.tss 315 | 316 | # Telerik's JustMock configuration file 317 | *.jmconfig 318 | 319 | # BizTalk build output 320 | *.btp.cs 321 | *.btm.cs 322 | *.odx.cs 323 | *.xsd.cs 324 | 325 | # OpenCover UI analysis results 326 | OpenCover/ 327 | 328 | # Azure Stream Analytics local run output 329 | ASALocalRun/ 330 | 331 | # MSBuild Binary and Structured Log 332 | *.binlog 333 | 334 | # NVidia Nsight GPU debugger configuration file 335 | *.nvuser 336 | 337 | # MFractors (Xamarin productivity tool) working folder 338 | .mfractor/ 339 | 340 | # Local History for Visual Studio 341 | .localhistory/ 342 | 343 | # BeatPulse healthcheck temp database 344 | healthchecksdb 345 | 346 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 347 | MigrationBackup/ 348 | 349 | # Ionide (cross platform F# VS Code tools) working folder 350 | .ionide/ 351 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Microsoft Open Source Code of Conduct 2 | 3 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). 4 | 5 | Resources: 6 | 7 | - [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) 8 | - [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) 9 | - Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | This repo is for issue tracking for the C# Dev Kit. 2 | 3 | The actual license for the C# Dev Kit can be found at [https://aka.ms/vs/csdevkit/license](https://aka.ms/vs/csdevkit/license) 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # C# Dev Kit for Visual Studio Code 2 | 3 | This repository is where we (Microsoft) gather and interact with the community around the [C# Dev Kit extension](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csdevkit) for Visual Studio Code. To report an issue here, ideally you would use the 'Report an Issue' capability within VS Code which will log an issue in this repository for us to triage and keep updated. 4 | 5 | ## Contributing 6 | 7 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). 8 | For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or 9 | contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. 10 | 11 | ## Triage 12 | 13 | When triaging issues in this repo teams are expected to follow the [triage guidelines](TRIAGE.md). 14 | 15 | ## Trademarks 16 | 17 | This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft 18 | trademarks or logos is subject to and must follow 19 | [Microsoft's Trademark & Brand Guidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general). 20 | Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. 21 | Any use of third-party trademarks or logos are subject to those third-party's policies. 22 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## Security 4 | 5 | Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). 6 | 7 | If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below. 8 | 9 | ## Reporting Security Issues 10 | 11 | **Please do not report security vulnerabilities through public GitHub issues.** 12 | 13 | Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report). 14 | 15 | If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey). 16 | 17 | You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc). 18 | 19 | Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: 20 | 21 | * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) 22 | * Full paths of source file(s) related to the manifestation of the issue 23 | * The location of the affected source code (tag/branch/commit or direct URL) 24 | * Any special configuration required to reproduce the issue 25 | * Step-by-step instructions to reproduce the issue 26 | * Proof-of-concept or exploit code (if possible) 27 | * Impact of the issue, including how an attacker might exploit the issue 28 | 29 | This information will help us triage your report more quickly. 30 | 31 | If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs. 32 | 33 | ## Preferred Languages 34 | 35 | We prefer all communications to be in English. 36 | 37 | ## Policy 38 | 39 | Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd). 40 | 41 | 42 | -------------------------------------------------------------------------------- /SUPPORT.md: -------------------------------------------------------------------------------- 1 | # Support 2 | 3 | ## How to file issues and get help 4 | 5 | This project uses GitHub Issues to track bugs and feature requests. Please search the [existing 6 | issues](https://github.com/microsoft/vscode-dotnettools/issues) before filing new issues to avoid duplicates. For new issues, please consider reporting directly from VS Code 'Report Issue' (from Help menu) as it provides additional helpful information for the team. 7 | 8 | ## Microsoft Support Policy 9 | 10 | Support for this extension is primarily made available via the GitHub Issues noted here. Technical Support may also be available from Microsoft's Customer Support Services (CSS). If you are a Premier or Unified Support customer, you may reach out to your account manager for further assistance. Otherwise, you may visit Microsoft's [Support for Business site](https://support.serviceshub.microsoft.com/supportforbusiness/create) to open a new support case for this extension. 11 | 12 | Note: The .NET MAUI extension for VS Code is not supported by Microsoft's Customer Support Services at this time. Issues related to the .NET MAUI extension for VS Code should be reported from VS Code's 'Report Issue' command (available from the Help menu). 13 | -------------------------------------------------------------------------------- /TRIAGE.md: -------------------------------------------------------------------------------- 1 | ## Triage Expectations 2 | 3 | 1. Issues without an "area-" label are up for grabs. If you believe you know which area an issue belongs in, please assign it. 4 | 2. After reviewing bugs in their area, teams should add the "triaged" label. 5 | 3. When adding the initial "area-" label or when changing the "area-" label, the "triaged" label should be removed. This serves as a signal to the new owners that the issue needs be looked at. 6 | -------------------------------------------------------------------------------- /docs/media/07-add.existing.project.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/vscode-dotnettools/52ab49d6add9f869dc36db00e751a744874318f1/docs/media/07-add.existing.project.gif -------------------------------------------------------------------------------- /docs/media/TestRunning.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/vscode-dotnettools/52ab49d6add9f869dc36db00e751a744874318f1/docs/media/TestRunning.gif --------------------------------------------------------------------------------