mirror of
https://github.com/chylex/IntelliJ-IdeaVim.git
synced 2025-10-14 19:12:01 +02:00
Compare commits
9 Commits
customized
...
customized
Author | SHA1 | Date | |
---|---|---|---|
8e162bce95
|
|||
2cdd62371e
|
|||
d461f61438
|
|||
de7fe30a97
|
|||
6d80c21344
|
|||
a57a80442c
|
|||
866e6dc831
|
|||
f11bb12f19
|
|||
70ea1bd46f
|
@@ -1,220 +0,0 @@
|
||||
# Changelog Maintenance Instructions
|
||||
|
||||
## Historical Context
|
||||
|
||||
- The changelog was actively maintained until version 2.9.0
|
||||
- There's a gap from 2.10.0 through 2.27.0 where changelog wasn't maintained
|
||||
- We're resuming changelog maintenance from version 2.28.0 onwards
|
||||
- Between 2.9.0 and 2.28.0, include this note: **"Changelog was not maintained for versions 2.10.0 through 2.27.0"**
|
||||
|
||||
## Changelog Structure
|
||||
|
||||
### [To Be Released] Section
|
||||
- All unreleased changes from master branch go here
|
||||
- When a release is made, this section becomes the new version section
|
||||
- Create a new empty `[To Be Released]` section after each release
|
||||
|
||||
### Version Entry Format
|
||||
```
|
||||
## 2.28.0, 2024-MM-DD
|
||||
|
||||
### Features:
|
||||
* Feature description without ticket number
|
||||
* `CommandName` action can be used... | [VIM-XXXX](https://youtrack.jetbrains.com/issue/VIM-XXXX)
|
||||
|
||||
### Fixes:
|
||||
* [VIM-XXXX](https://youtrack.jetbrains.com/issue/VIM-XXXX) Bug fix description
|
||||
|
||||
### Changes:
|
||||
* Other changes
|
||||
```
|
||||
|
||||
## How to Gather Information
|
||||
|
||||
### 1. Check Current State
|
||||
- Read CHANGES.md to find the last documented version
|
||||
- **Important**: Only read the top portion of CHANGES.md (it's a large file)
|
||||
- Focus on the `[To Be Released]` section and recent versions
|
||||
- Note the date of the last entry
|
||||
|
||||
### 2. Find Releases
|
||||
- Use `git tag --list --sort=-version:refname` to see all version tags
|
||||
- Tags like `2.27.0`, `2.27.1` indicate releases
|
||||
- Note: Patch releases (x.x.1, x.x.2) might be on separate branches
|
||||
- Release dates available at: https://plugins.jetbrains.com/plugin/164-ideavim/versions
|
||||
|
||||
### 3. Review Changes
|
||||
```bash
|
||||
# Get commits since last documented version
|
||||
git log --oneline --since="YYYY-MM-DD" --first-parent master
|
||||
|
||||
# Get merged PRs
|
||||
gh pr list --state merged --limit 100 --json number,title,author,mergedAt
|
||||
|
||||
# Check specific release commits
|
||||
git log --oneline <previous-tag>..<new-tag>
|
||||
```
|
||||
|
||||
**Important**: Don't just read commit messages - examine the actual changes:
|
||||
- Use `git show <commit-hash>` to see the full commit content
|
||||
- Look at modified test files to find specific examples of fixed commands
|
||||
- Check the actual code changes to understand what was really fixed or added
|
||||
- Tests often contain the best examples for changelog entries (e.g., exact commands that now work)
|
||||
|
||||
### 4. What to Include
|
||||
- **Features**: New functionality with [VIM-XXXX] ticket numbers if available
|
||||
- **Bug Fixes**: Fixed issues with [VIM-XXXX] ticket references
|
||||
- **Breaking Changes**: Any backwards-incompatible changes
|
||||
- **Deprecations**: Features marked for future removal
|
||||
- **Merged PRs**: Reference significant PRs like "Implement vim-surround (#123)"
|
||||
- Note: PRs have their own inclusion rules - see "Merged PRs Special Rules" section below
|
||||
|
||||
### 5. What to Exclude
|
||||
- Dependabot PRs (author: dependabot[bot])
|
||||
- Claude-generated PRs (check PR author/title)
|
||||
- Internal refactoring with no user impact
|
||||
- Documentation-only changes (unless significant)
|
||||
- Test-only changes
|
||||
- **API module changes** (while in experimental status) - Do not log changes to the `api` module as it's currently experimental
|
||||
- Note: This exclusion should be removed once the API status is no longer experimental
|
||||
- **Internal code changes** - Do not log coding changes that users cannot see or experience
|
||||
- Refactoring, code cleanup, internal architecture changes
|
||||
- Performance optimizations (unless they fix a noticeable user issue)
|
||||
- Remember: The changelog is for users, not developers
|
||||
|
||||
## Writing Style
|
||||
|
||||
- **Be concise**: One line per change when possible
|
||||
- **User-focused**: Describe what changed from user's perspective
|
||||
- Write for end users, not developers
|
||||
- Focus on visible behavior changes, new commands, fixed issues users experience
|
||||
- Avoid technical implementation details
|
||||
- **Include examples** when helpful:
|
||||
- For fixes: Show the command/operation that now works correctly
|
||||
- For features: Demonstrate the new commands or functionality
|
||||
- Good example: "Fixed `ci"` command in empty strings" or "Added support for `gn` text object"
|
||||
- Bad examples (too vague, unclear what was broken):
|
||||
- "Fixed count validation in text objects"
|
||||
- "Fixed inlay offset calculations"
|
||||
- Better: Specify the actual case - "Fixed `3daw` deleting wrong number of words" or "Fixed cursor position with inlay hints in `f` motion"
|
||||
- **If you can't determine the specific case from tests/code, omit the entry rather than leave it unclear**
|
||||
- **Add helpful links** for context:
|
||||
- When mentioning IntelliJ features, search for official JetBrains documentation or blog posts
|
||||
- When referencing Vim commands, link to Vim documentation if helpful
|
||||
- Example: "Added support for [Next Edit Suggestion](https://blog.jetbrains.com/ai/2025/08/introducing-next-edit-suggestions-in-jetbrains-ai-assistant/)"
|
||||
- Use web search to find the most relevant official sources
|
||||
- **Include references**: Add [VIM-XXXX] for YouTrack tickets, (#XXX) for PRs
|
||||
- **Group logically**: Features, Fixes, Changes, Merged PRs
|
||||
- **No duplication**: Each change appears in exactly ONE subsection - don't repeat items across categories
|
||||
- **Use consistent tense**: Past tense for completed work
|
||||
|
||||
## Examples of Good Entries
|
||||
|
||||
```
|
||||
### Features:
|
||||
* Added support for `gn` text object - select next match with `gn`, change with `cgn`
|
||||
* Implemented `:tabmove` command - use `:tabmove +1` or `:tabmove -1` to reorder tabs
|
||||
* Support for `z=` to show spelling suggestions
|
||||
* Added integration with [Next Edit Suggestion](https://blog.jetbrains.com/ai/2025/08/introducing-next-edit-suggestions-in-jetbrains-ai-assistant/) feature
|
||||
* Support for [multiple cursors](https://www.jetbrains.com/help/idea/multicursor.html) in visual mode
|
||||
|
||||
### Fixes:
|
||||
* [VIM-3456](https://youtrack.jetbrains.com/issue/VIM-3456) Fixed cursor position after undo in visual mode
|
||||
* [VIM-3458](https://youtrack.jetbrains.com/issue/VIM-3458) Fixed `ci"` command now works correctly in empty strings
|
||||
* [VIM-3260](https://youtrack.jetbrains.com/issue/VIM-3260) Fixed `G` command at file end with count
|
||||
* [VIM-3180](https://youtrack.jetbrains.com/issue/VIM-3180) Fixed `vib` and `viB` selection in nested blocks
|
||||
|
||||
### Merged PRs:
|
||||
* [805](https://github.com/JetBrains/ideavim/pull/805) by [chylex](https://github.com/chylex): VIM-3238 Fix recording a macro that replays another macro
|
||||
```
|
||||
|
||||
## IMPORTANT Format Notes
|
||||
|
||||
### For Fixes:
|
||||
Always put the ticket link FIRST, then the description:
|
||||
```
|
||||
* [VIM-XXXX](https://youtrack.jetbrains.com/issue/VIM-XXXX) Description of what was fixed
|
||||
```
|
||||
|
||||
### For Features:
|
||||
- Without ticket: Just the description
|
||||
- With ticket: Can use either format:
|
||||
- Description with pipe: `* Feature description | [VIM-XXXX](https://youtrack.jetbrains.com/issue/VIM-XXXX)`
|
||||
- Link first (like fixes): `* [VIM-XXXX](https://youtrack.jetbrains.com/issue/VIM-XXXX) Feature description`
|
||||
|
||||
### Avoid Duplication:
|
||||
- **Each change should appear in only ONE subsection**
|
||||
- If a feature is listed in Features, don't repeat it in Fixes
|
||||
- If a bug fix is in Fixes, don't list it again elsewhere
|
||||
- Choose the most appropriate category for each change
|
||||
|
||||
### Merged PRs Special Rules:
|
||||
- **Different criteria than other sections**: The exclusion rules for Features/Fixes don't apply here
|
||||
- **Include PRs from external contributors** even if they're internal changes or refactoring
|
||||
- **List significant community contributions** regardless of whether they're user-visible
|
||||
- **Format**: PR number, author, and brief description
|
||||
- **Use PR title as-is**: Take the description directly from the PR title, don't regenerate or rewrite it
|
||||
- **Purpose**: Acknowledge community contributions and provide PR tracking
|
||||
- The "user-visible only" rule does NOT apply to this section
|
||||
|
||||
## Process
|
||||
|
||||
1. Read the current CHANGES.md (only the top portion - focus on `[To Be Released]` and recent versions)
|
||||
2. Check previous changelog PRs from GitHub:
|
||||
- Review the last few changelog update PRs (use `gh pr list --search "Update changelog" --state all --limit 5`)
|
||||
- **Read the PR comments**: Use `gh pr view <PR_NUMBER> --comments` to check for specific instructions
|
||||
- Look for any comments or instructions about what NOT to log this time
|
||||
- Previous PRs may contain specific exclusions or special handling instructions
|
||||
- Pay attention to review feedback that might indicate what to avoid in future updates
|
||||
3. Check git tags for any undocumented releases
|
||||
4. Review commits and PRs since last entry
|
||||
5. Group changes by release or under [To Be Released]
|
||||
6. Update CHANGES.md maintaining existing format
|
||||
7. Update the `changeNotes` section in `build.gradle.kts` (see detailed instructions below)
|
||||
8. Create a PR only if there are changes to document:
|
||||
- Title format: "Update changelog: <super short summary>"
|
||||
- Example: "Update changelog: Add gn text object, fix visual mode issues"
|
||||
- Body: Brief summary of what was added
|
||||
|
||||
## Updating changeNotes in build.gradle.kts
|
||||
|
||||
The `changeNotes` section in `build.gradle.kts` displays on the JetBrains Marketplace plugin page. Follow these rules:
|
||||
|
||||
### Content Requirements
|
||||
- **Match CHANGES.md exactly**: Use the same content from the `[To Be Released]` section
|
||||
- **Don't create a shorter version**: Include all entries as they appear in CHANGES.md
|
||||
- **Keep the same level of detail**: Don't summarize or condense
|
||||
|
||||
### HTML Formatting
|
||||
Convert Markdown to HTML format:
|
||||
- Headers: `### Features:` → `<b>Features:</b>`
|
||||
- Line breaks: Use `<br>` between items
|
||||
- Links: Convert markdown links to HTML `<a href="">` tags
|
||||
- Bullet points: Use `•` or keep `*` with proper spacing
|
||||
- Code blocks: Use `<code>` tags for commands like `<code>gn</code>`
|
||||
|
||||
### Special Notes
|
||||
- **IMPORTANT**: Keep any existing information about the reward program in changeNotes
|
||||
- This content appears in the plugin description on JetBrains Marketplace
|
||||
|
||||
### Example Conversion
|
||||
Markdown in CHANGES.md:
|
||||
```
|
||||
### Features:
|
||||
* Added support for `gn` text object
|
||||
* [VIM-3456](https://youtrack.jetbrains.com/issue/VIM-3456) Fixed cursor position
|
||||
```
|
||||
|
||||
HTML in changeNotes:
|
||||
```html
|
||||
<b>Features:</b><br>
|
||||
• Added support for <code>gn</code> text object<br>
|
||||
• <a href="https://youtrack.jetbrains.com/issue/VIM-3456">VIM-3456</a> Fixed cursor position<br>
|
||||
```
|
||||
|
||||
## Important Notes
|
||||
|
||||
- **Don't create a PR if changelog is already up to date**
|
||||
- **Preserve existing format and structure**
|
||||
- **Maintain chronological order (newest first)**
|
||||
- **Keep the historical gap note between 2.9.0 and 2.28.0**
|
@@ -1,12 +0,0 @@
|
||||
{
|
||||
"name": "Java",
|
||||
"image": "mcr.microsoft.com/devcontainers/java:1-21",
|
||||
"features": {
|
||||
"ghcr.io/devcontainers/features/java:1": {
|
||||
"version": "none",
|
||||
"installMaven": "true",
|
||||
"mavenVersion": "3.8.6",
|
||||
"installGradle": "true"
|
||||
}
|
||||
}
|
||||
}
|
@@ -7,4 +7,3 @@ indent_style = space
|
||||
[*.kt]
|
||||
indent_size = 2
|
||||
indent_style = space
|
||||
ktlint_standard_no-wildcard-imports = disabled
|
5
.github/workflows/checkNewPlugins.yml
vendored
5
.github/workflows/checkNewPlugins.yml
vendored
@@ -14,16 +14,15 @@ jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'JetBrains/ideavim'
|
||||
|
||||
steps:
|
||||
- name: Fetch origin repo
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up JDK 21
|
||||
- name: Set up JDK 17
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: '21'
|
||||
java-version: '17'
|
||||
distribution: 'adopt'
|
||||
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
||||
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
||||
|
54
.github/workflows/claude-code-review.yml
vendored
54
.github/workflows/claude-code-review.yml
vendored
@@ -1,54 +0,0 @@
|
||||
name: Claude Code Review
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, synchronize]
|
||||
# Optional: Only run on specific file changes
|
||||
# paths:
|
||||
# - "src/**/*.ts"
|
||||
# - "src/**/*.tsx"
|
||||
# - "src/**/*.js"
|
||||
# - "src/**/*.jsx"
|
||||
|
||||
jobs:
|
||||
claude-review:
|
||||
# Optional: Filter by PR author
|
||||
# if: |
|
||||
# github.event.pull_request.user.login == 'external-contributor' ||
|
||||
# github.event.pull_request.user.login == 'new-developer' ||
|
||||
# github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: read
|
||||
issues: read
|
||||
id-token: write
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Run Claude Code Review
|
||||
id: claude-review
|
||||
uses: anthropics/claude-code-action@v1
|
||||
with:
|
||||
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
||||
prompt: |
|
||||
Please review this pull request and provide feedback on:
|
||||
- Code quality and best practices
|
||||
- Potential bugs or issues
|
||||
- Performance considerations
|
||||
- Security concerns
|
||||
- Test coverage
|
||||
|
||||
Use the repository's CLAUDE.md for guidance on style and conventions. Be constructive and helpful in your feedback.
|
||||
|
||||
Use `gh pr comment` with your Bash tool to leave your review as a comment on the PR.
|
||||
|
||||
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
|
||||
# or https://docs.anthropic.com/en/docs/claude-code/sdk#command-line for available options
|
||||
claude_args: '--allowed-tools "Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr list:*)"'
|
||||
|
50
.github/workflows/claude.yml
vendored
50
.github/workflows/claude.yml
vendored
@@ -1,50 +0,0 @@
|
||||
name: Claude Code
|
||||
|
||||
on:
|
||||
issue_comment:
|
||||
types: [created]
|
||||
pull_request_review_comment:
|
||||
types: [created]
|
||||
issues:
|
||||
types: [opened, assigned]
|
||||
pull_request_review:
|
||||
types: [submitted]
|
||||
|
||||
jobs:
|
||||
claude:
|
||||
if: |
|
||||
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
|
||||
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
|
||||
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
|
||||
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: read
|
||||
issues: read
|
||||
id-token: write
|
||||
actions: read # Required for Claude to read CI results on PRs
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Run Claude Code
|
||||
id: claude
|
||||
uses: anthropics/claude-code-action@v1
|
||||
with:
|
||||
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
||||
|
||||
# This is an optional setting that allows Claude to read CI results on PRs
|
||||
additional_permissions: |
|
||||
actions: read
|
||||
|
||||
# Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
|
||||
# prompt: 'Update the pull request description to include a summary of changes.'
|
||||
|
||||
# Optional: Add claude_args to customize behavior and configuration
|
||||
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
|
||||
# or https://docs.anthropic.com/en/docs/claude-code/sdk#command-line for available options
|
||||
# claude_args: '--model claude-opus-4-1-20250805 --allowed-tools Bash(gh pr:*)'
|
||||
|
33
.github/workflows/closeYoutrackOnCommit.yml
vendored
33
.github/workflows/closeYoutrackOnCommit.yml
vendored
@@ -8,43 +8,32 @@ on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'JetBrains/ideavim'
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 300
|
||||
- name: Get tags
|
||||
run: git fetch --tags origin
|
||||
- name: Set up JDK 21
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: '21'
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
||||
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
||||
|
||||
# The last successful job was marked with a tag
|
||||
- name: Get commit with last workflow
|
||||
run: |
|
||||
echo "LAST_COMMIT=$(git rev-list -n 1 tags/workflow-close-youtrack)" >> $GITHUB_ENV
|
||||
- uses: nrwl/last-successful-commit-action@v1
|
||||
id: last_successful_commit
|
||||
with:
|
||||
branch: 'master'
|
||||
workflow_id: 'closeYoutrackOnCommit.yml'
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Update YouTrack
|
||||
run: ./gradlew --no-configuration-cache updateYoutrackOnCommit
|
||||
run: ./gradlew updateYoutrackOnCommit
|
||||
env:
|
||||
SUCCESS_COMMIT: ${{ env.LAST_COMMIT }}
|
||||
SUCCESS_COMMIT: ${{ steps.last_successful_commit.outputs.commit_hash }}
|
||||
YOUTRACK_TOKEN: ${{ secrets.YOUTRACK_TOKEN }}
|
||||
|
||||
- name: Update tags
|
||||
run: |
|
||||
git tag --delete workflow-close-youtrack || true
|
||||
git push origin :refs/tags/workflow-close-youtrack || true
|
||||
git tag workflow-close-youtrack
|
||||
git push origin workflow-close-youtrack
|
||||
|
19
.github/workflows/codeql-analysis.yml
vendored
19
.github/workflows/codeql-analysis.yml
vendored
@@ -20,11 +20,6 @@ on:
|
||||
schedule:
|
||||
- cron: '44 12 * * 4'
|
||||
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
@@ -39,18 +34,12 @@ jobs:
|
||||
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
|
||||
|
||||
steps:
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: 'temurin' # See 'Supported distributions' for available options
|
||||
java-version: '21'
|
||||
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v2
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v3
|
||||
uses: github/codeql-action/init@v1
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
@@ -61,7 +50,7 @@ jobs:
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v3
|
||||
uses: github/codeql-action/autobuild@v1
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
@@ -75,4 +64,4 @@ jobs:
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v3
|
||||
uses: github/codeql-action/analyze@v1
|
||||
|
9
.github/workflows/integrationsTest.yml
vendored
9
.github/workflows/integrationsTest.yml
vendored
@@ -12,22 +12,21 @@ jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'JetBrains/ideavim'
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 300
|
||||
- name: Set up JDK 21
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: '21'
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
||||
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
||||
|
||||
- name: Run tests
|
||||
run: ./gradlew --no-configuration-cache integrationsTest
|
||||
run: ./gradlew integrationsTest
|
||||
env:
|
||||
YOUTRACK_TOKEN: ${{ secrets.YOUTRACK_TOKEN }}
|
||||
GITHUB_OAUTH: ${{ secrets.GITHUB_TOKEN }}
|
||||
GITHUB_OAUTH: ${{ secrets.MERGE_PR }}
|
||||
|
21
.github/workflows/junie.yml
vendored
21
.github/workflows/junie.yml
vendored
@@ -1,21 +0,0 @@
|
||||
name: Junie
|
||||
run-name: Junie run ${{ inputs.run_id }}
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
run_id:
|
||||
description: "id of workflow process"
|
||||
required: true
|
||||
workflow_params:
|
||||
description: "stringified params"
|
||||
required: true
|
||||
|
||||
jobs:
|
||||
call-workflow-passing-data:
|
||||
uses: jetbrains-junie/junie-workflows/.github/workflows/ej-issue.yml@main
|
||||
with:
|
||||
workflow_params: ${{ inputs.workflow_params }}
|
5
.github/workflows/kover.yml
vendored
5
.github/workflows/kover.yml
vendored
@@ -12,16 +12,15 @@ jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'JetBrains/ideavim'
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 300
|
||||
- name: Set up JDK 21
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: '21'
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
||||
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
||||
|
17
.github/workflows/mergeDependabotPR.yml
vendored
17
.github/workflows/mergeDependabotPR.yml
vendored
@@ -1,17 +0,0 @@
|
||||
name: Dependabot auto-merge
|
||||
on: pull_request
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
dependabot:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.actor == 'dependabot[bot]' && github.repository == 'JetBrains/ideavim' }}
|
||||
steps:
|
||||
- name: Auto-merge Dependabot PR
|
||||
run: gh pr merge --auto --rebase "$PR_URL"
|
||||
env:
|
||||
PR_URL: ${{github.event.pull_request.html_url}}
|
||||
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
29
.github/workflows/mergePr.yml
vendored
29
.github/workflows/mergePr.yml
vendored
@@ -11,35 +11,46 @@ on:
|
||||
jobs:
|
||||
build:
|
||||
|
||||
if: false
|
||||
if: github.event.pull_request.merged == true
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 50
|
||||
# See end of file updateChangeslog.yml for explanation of this secret
|
||||
ssh-key: ${{ secrets.PUSH_TO_PROTECTED_BRANCH_SECRET }}
|
||||
- name: Set up JDK 21
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: '21'
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
||||
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
||||
|
||||
- name: Update authors
|
||||
id: update_authors
|
||||
run: ./gradlew --no-configuration-cache updateMergedPr -PprId=${{ github.event.number }}
|
||||
run: ./gradlew updateMergedPr -PprId=${{ github.event.number }}
|
||||
env:
|
||||
GITHUB_OAUTH: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
# Reuse from update changelog
|
||||
- uses: nrwl/last-successful-commit-action@v1
|
||||
id: last_successful_commit
|
||||
with:
|
||||
branch: 'master'
|
||||
workflow_id: 'updateChangelog.yml'
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Update changelog
|
||||
run: ./gradlew updateChangelog
|
||||
env:
|
||||
SUCCESS_COMMIT: ${{ steps.last_successful_commit.outputs.commit_hash }}
|
||||
|
||||
- name: Commit changes
|
||||
uses: stefanzweifel/git-auto-commit-action@v4
|
||||
with:
|
||||
branch: master
|
||||
commit_message: Update changelog after merging PR
|
||||
commit_user_name: IdeaVim Bot
|
||||
commit_user_email: maintainers@ideavim.dev
|
||||
commit_author: IdeaVim Bot <maintainers@ideavim.dev>
|
||||
commit_user_name: Alex Plate
|
||||
commit_user_email: aleksei.plate@jetbrains.com
|
||||
commit_author: Alex Plate <aleksei.plate@jetbrains.com>
|
||||
file_pattern: CHANGES.md
|
||||
|
81
.github/workflows/runUiOctopusTests.yml
vendored
81
.github/workflows/runUiOctopusTests.yml
vendored
@@ -1,81 +0,0 @@
|
||||
name: Run Non Octopus UI Tests
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 12 * * *'
|
||||
jobs:
|
||||
build-for-ui-test-mac-os:
|
||||
if: github.repository == 'JetBrains/ideavim'
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: zulu
|
||||
java-version: 21
|
||||
- name: Setup FFmpeg
|
||||
run: brew install ffmpeg
|
||||
# - name: Setup Gradle
|
||||
# uses: gradle/gradle-build-action@v2.4.2
|
||||
- name: Build Plugin
|
||||
run: gradle :buildPlugin
|
||||
- name: Run Idea
|
||||
run: |
|
||||
mkdir -p build/reports
|
||||
gradle --no-configuration-cache runIdeForUiTests -Doctopus.handler=false > build/reports/idea.log &
|
||||
- name: Wait for Idea started
|
||||
uses: jtalk/url-health-check-action@v3
|
||||
with:
|
||||
url: http://127.0.0.1:8082
|
||||
max-attempts: 20
|
||||
retry-delay: 10s
|
||||
- name: Tests
|
||||
run: gradle :tests:ui-ij-tests:testUi
|
||||
- name: Move video
|
||||
if: always()
|
||||
run: mv tests/ui-ij-tests/video build/reports
|
||||
- name: Move sandbox logs
|
||||
if: always()
|
||||
run: mv build/idea-sandbox/IC-*/log_runIdeForUiTests idea-sandbox-log
|
||||
- name: Save report
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ui-test-fails-report-mac
|
||||
path: |
|
||||
build/reports
|
||||
tests/ui-ij-tests/build/reports
|
||||
idea-sandbox-log
|
||||
# build-for-ui-test-linux:
|
||||
# runs-on: ubuntu-latest
|
||||
# steps:
|
||||
# - uses: actions/checkout@v2
|
||||
# - name: Setup Java
|
||||
# uses: actions/setup-java@v2.1.0
|
||||
# with:
|
||||
# distribution: zulu
|
||||
# java-version: 11
|
||||
# - name: Build Plugin
|
||||
# run: gradle :buildPlugin
|
||||
# - name: Run Idea
|
||||
# run: |
|
||||
# export DISPLAY=:99.0
|
||||
# Xvfb -ac :99 -screen 0 1920x1080x16 &
|
||||
# mkdir -p build/reports
|
||||
# gradle :runIdeForUiTests #> build/reports/idea.log
|
||||
# - name: Wait for Idea started
|
||||
# uses: jtalk/url-health-check-action@1.5
|
||||
# with:
|
||||
# url: http://127.0.0.1:8082
|
||||
# max-attempts: 15
|
||||
# retry-delay: 30s
|
||||
# - name: Tests
|
||||
# run: gradle :testUi
|
||||
# - name: Save fails report
|
||||
# if: ${{ failure() }}
|
||||
# uses: actions/upload-artifact@v2
|
||||
# with:
|
||||
# name: ui-test-fails-report-linux
|
||||
# path: |
|
||||
# ui-test-example/build/reports
|
52
.github/workflows/runUiPyTests.yml
vendored
52
.github/workflows/runUiPyTests.yml
vendored
@@ -1,52 +0,0 @@
|
||||
name: Run UI PyCharm Tests
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 12 * * *'
|
||||
jobs:
|
||||
build-for-ui-test-mac-os:
|
||||
if: github.repository == 'JetBrains/ideavim'
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: zulu
|
||||
java-version: 21
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.10'
|
||||
- name: Setup FFmpeg
|
||||
run: brew install ffmpeg
|
||||
# - name: Setup Gradle
|
||||
# uses: gradle/gradle-build-action@v2.4.2
|
||||
- name: Build Plugin
|
||||
run: gradle :buildPlugin
|
||||
- name: Run Idea
|
||||
run: |
|
||||
mkdir -p build/reports
|
||||
gradle --no-configuration-cache :runIdeForUiTests -PideaType=PC > build/reports/idea.log &
|
||||
- name: Wait for Idea started
|
||||
uses: jtalk/url-health-check-action@v3
|
||||
with:
|
||||
url: http://127.0.0.1:8082
|
||||
max-attempts: 20
|
||||
retry-delay: 10s
|
||||
- name: Tests
|
||||
run: gradle :tests:ui-py-tests:testUi
|
||||
- name: Move video
|
||||
if: always()
|
||||
run: mv tests/ui-py-tests/video build/reports
|
||||
- name: Move sandbox logs
|
||||
if: always()
|
||||
run: mv build/idea-sandbox/PC-*/log_runIdeForUiTests idea-sandbox-log
|
||||
- name: Save report
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ui-test-fails-report-mac
|
||||
path: |
|
||||
build/reports
|
||||
tests/ui-py-tests/build/reports
|
||||
idea-sandbox-log
|
51
.github/workflows/runUiRdTests.yml
vendored
51
.github/workflows/runUiRdTests.yml
vendored
@@ -1,51 +0,0 @@
|
||||
name: Run UI Rider Tests
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 12 * * *'
|
||||
jobs:
|
||||
build-for-ui-test-mac-os:
|
||||
if: github.repository == 'JetBrains/ideavim'
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: zulu
|
||||
java-version: 21
|
||||
- name: Setup FFmpeg
|
||||
run: brew install ffmpeg
|
||||
# - name: Setup Gradle
|
||||
# uses: gradle/gradle-build-action@v2.4.2
|
||||
- name: Build Plugin
|
||||
run: gradle :buildPlugin
|
||||
- name: Run Idea
|
||||
run: |
|
||||
mkdir -p build/reports
|
||||
gradle --no-configuration-cache :runIdeForUiTests -PideaType=RD > build/reports/idea.log &
|
||||
- name: Wait for Idea started
|
||||
uses: jtalk/url-health-check-action@v3
|
||||
with:
|
||||
url: http://127.0.0.1:8082
|
||||
max-attempts: 100
|
||||
retry-delay: 10s
|
||||
- name: Tests
|
||||
run: gradle :tests:ui-rd-tests:testUi
|
||||
env:
|
||||
RIDER_LICENSE: ${{ secrets.RIDER_LICENSE }}
|
||||
- name: Move video
|
||||
if: always()
|
||||
run: mv tests/ui-rd-tests/video build/reports
|
||||
- name: Move sandbox logs
|
||||
if: always()
|
||||
run: mv build/idea-sandbox/RD-*/log_runIdeForUiTests idea-sandbox-log
|
||||
- name: Save report
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ui-test-fails-report-mac
|
||||
path: |
|
||||
build/reports
|
||||
tests/ui-rd-tests/build/reports
|
||||
idea-sandbox-log
|
36
.github/workflows/runUiTests.yml
vendored
36
.github/workflows/runUiTests.yml
vendored
@@ -5,48 +5,44 @@ on:
|
||||
- cron: '0 12 * * *'
|
||||
jobs:
|
||||
build-for-ui-test-mac-os:
|
||||
if: github.repository == 'JetBrains/ideavim'
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v2
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v4
|
||||
uses: actions/setup-java@v2.1.0
|
||||
with:
|
||||
distribution: zulu
|
||||
java-version: 21
|
||||
java-version: 11
|
||||
- name: Setup FFmpeg
|
||||
run: brew install ffmpeg
|
||||
# - name: Setup Gradle
|
||||
# uses: gradle/gradle-build-action@v2.4.2
|
||||
uses: FedericoCarboni/setup-ffmpeg@v1
|
||||
with:
|
||||
# Not strictly necessary, but it may prevent rate limit
|
||||
# errors especially on GitHub-hosted macos machines.
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Build Plugin
|
||||
run: gradle :buildPlugin
|
||||
- name: Run Idea
|
||||
run: |
|
||||
mkdir -p build/reports
|
||||
gradle --no-configuration-cache runIdeForUiTests > build/reports/idea.log &
|
||||
gradle :runIdeForUiTests > build/reports/idea.log &
|
||||
- name: Wait for Idea started
|
||||
uses: jtalk/url-health-check-action@v3
|
||||
uses: jtalk/url-health-check-action@1.5
|
||||
with:
|
||||
url: http://127.0.0.1:8082
|
||||
max-attempts: 20
|
||||
retry-delay: 10s
|
||||
- name: Tests
|
||||
run: gradle :tests:ui-ij-tests:testUi
|
||||
run: gradle :testUi
|
||||
- name: Move video
|
||||
if: always()
|
||||
run: mv tests/ui-ij-tests/video build/reports
|
||||
- name: Move sandbox logs
|
||||
if: always()
|
||||
run: mv build/idea-sandbox/IC-*/log_runIdeForUiTests idea-sandbox-log
|
||||
- name: Save report
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ failure() }}
|
||||
run: mv video build/reports
|
||||
- name: Save fails report
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: ui-test-fails-report-mac
|
||||
path: |
|
||||
build/reports
|
||||
tests/ui-ij-tests/build/reports
|
||||
idea-sandbox-log
|
||||
# build-for-ui-test-linux:
|
||||
# runs-on: ubuntu-latest
|
||||
# steps:
|
||||
|
23
.github/workflows/syncDoc.yml
vendored
23
.github/workflows/syncDoc.yml
vendored
@@ -10,22 +10,16 @@ on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'JetBrains/ideavim'
|
||||
|
||||
steps:
|
||||
- name: Fetch origin repo
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
path: origin
|
||||
# See end of file updateChangeslog.yml for explanation of this secret
|
||||
ssh-key: ${{ secrets.PUSH_TO_PROTECTED_BRANCH_SECRET }}
|
||||
|
||||
- name: Fetch docs repo
|
||||
uses: actions/checkout@v3
|
||||
@@ -37,23 +31,12 @@ jobs:
|
||||
id: update_authors
|
||||
run: cp -a origin/doc/. docs
|
||||
|
||||
# The Wiki for github should have no `.md` in references
|
||||
# Otherwise, such links will lead to the raw text.
|
||||
# However, the `.md` should exist to have a navigation in GitHub code.
|
||||
- name: Replace `.md)` with `)`
|
||||
run: |
|
||||
# Define the directory you want to process
|
||||
DIRECTORY="docs"
|
||||
|
||||
# Find all files in the directory and perform the replacement
|
||||
find $DIRECTORY -type f -exec sed -i 's/\.md)/)/g' {} +
|
||||
|
||||
- name: Commit changes
|
||||
uses: stefanzweifel/git-auto-commit-action@v4
|
||||
with:
|
||||
branch: master
|
||||
repository: docs
|
||||
commit_message: Update docs
|
||||
commit_user_name: IdeaVim Bot
|
||||
commit_user_email: maintainers@ideavim.dev
|
||||
commit_author: IdeaVim Bot <maintainers@ideavim.dev>
|
||||
commit_user_name: Alex Plate
|
||||
commit_user_email: aleksei.plate@jetbrains.com
|
||||
commit_author: Alex Plate <aleksei.plate@jetbrains.com>
|
||||
|
45
.github/workflows/updateAuthors.yml
vendored
45
.github/workflows/updateAuthors.yml
vendored
@@ -5,58 +5,45 @@ name: Update Authors
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 9 * * *'
|
||||
# Workflow run on push is disabled to avoid conflicts when merging PR
|
||||
# push:
|
||||
# branches: [ master ]
|
||||
push:
|
||||
branches: [ master ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'JetBrains/ideavim'
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 300
|
||||
# See end of file updateChangeslog.yml for explanation of this secret
|
||||
ssh-key: ${{ secrets.PUSH_TO_PROTECTED_BRANCH_SECRET }}
|
||||
- name: Get tags
|
||||
run: git fetch --tags origin
|
||||
- name: Set up JDK 21
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: '21'
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
||||
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
||||
|
||||
# The last successful job was marked with a tag
|
||||
- name: Get commit with last workflow
|
||||
run: |
|
||||
echo "LAST_COMMIT=$(git rev-list -n 1 tags/workflow-authors)" >> $GITHUB_ENV
|
||||
- uses: nrwl/last-successful-commit-action@v1
|
||||
id: last_successful_commit
|
||||
with:
|
||||
branch: 'master'
|
||||
workflow_id: 'updateAuthors.yml'
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Update authors
|
||||
id: update_authors
|
||||
run: ./gradlew --no-configuration-cache updateAuthors --stacktrace
|
||||
run: ./gradlew updateAuthors --stacktrace
|
||||
env:
|
||||
SUCCESS_COMMIT: ${{ env.LAST_COMMIT }}
|
||||
SUCCESS_COMMIT: ${{ steps.last_successful_commit.outputs.commit_hash }}
|
||||
GITHUB_OAUTH: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Commit changes
|
||||
uses: stefanzweifel/git-auto-commit-action@v4
|
||||
with:
|
||||
commit_message: Add ${{ steps.update_authors.outputs.authors }} to contributors list
|
||||
commit_user_name: IdeaVim Bot
|
||||
commit_user_email: maintainers@ideavim.dev
|
||||
commit_author: IdeaVim Bot <maintainers@ideavim.dev>
|
||||
commit_user_name: Alex Plate
|
||||
commit_user_email: aleksei.plate@jetbrains.com
|
||||
commit_author: Alex Plate <aleksei.plate@jetbrains.com>
|
||||
file_pattern: AUTHORS.md
|
||||
|
||||
- name: Update tags
|
||||
run: |
|
||||
git tag --delete workflow-authors || true
|
||||
git push origin :refs/tags/workflow-authors || true
|
||||
git tag workflow-authors
|
||||
git push origin workflow-authors
|
||||
|
52
.github/workflows/updateChangelog.yml
vendored
52
.github/workflows/updateChangelog.yml
vendored
@@ -5,59 +5,45 @@ name: Update Changelog
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 10 * * *'
|
||||
push:
|
||||
branches: [ master ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
if: github.event.pull_request.merged != true
|
||||
runs-on: ubuntu-latest
|
||||
if: false
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 300
|
||||
# See end of file updateChangeslog.yml for explanation of this secret
|
||||
ssh-key: ${{ secrets.PUSH_TO_PROTECTED_BRANCH_SECRET }}
|
||||
- name: Get tags
|
||||
run: git fetch --tags origin
|
||||
- name: Set up JDK 21
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: '21'
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
||||
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
||||
|
||||
# The last successful job was marked with a tag
|
||||
- name: Get commit with last workflow
|
||||
run: |
|
||||
echo "LAST_COMMIT=$(git rev-list -n 1 tags/workflow-changelog)" >> $GITHUB_ENV
|
||||
- uses: nrwl/last-successful-commit-action@v1
|
||||
id: last_successful_commit
|
||||
with:
|
||||
branch: 'master'
|
||||
workflow_id: 'updateChangelog.yml'
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Update changelog
|
||||
run: ./gradlew --no-configuration-cache updateChangelog
|
||||
run: ./gradlew updateChangelog
|
||||
env:
|
||||
SUCCESS_COMMIT: ${{ env.LAST_COMMIT }}
|
||||
SUCCESS_COMMIT: ${{ steps.last_successful_commit.outputs.commit_hash }}
|
||||
|
||||
- name: Commit changes
|
||||
uses: stefanzweifel/git-auto-commit-action@v4
|
||||
with:
|
||||
commit_message: Update changelog. Action id - ${{ github.run_id }}
|
||||
commit_user_name: IdeaVim Bot
|
||||
commit_user_email: maintainers@ideavim.dev
|
||||
commit_author: IdeaVim Bot <maintainers@ideavim.dev>
|
||||
commit_message: Update changelog
|
||||
commit_user_name: Alex Plate
|
||||
commit_user_email: aleksei.plate@jetbrains.com
|
||||
commit_author: Alex Plate <aleksei.plate@jetbrains.com>
|
||||
file_pattern: CHANGES.md
|
||||
|
||||
- name: Update tags
|
||||
run: |
|
||||
git tag --delete workflow-changelog || true
|
||||
git push origin :refs/tags/workflow-changelog || true
|
||||
git tag workflow-changelog
|
||||
git push origin workflow-changelog
|
||||
|
||||
# Regarding secrets.PUSH_TO_PROTECTED_BRANCH_SECRET - we use branch protection rules to automate merges of the
|
||||
# dependabot updates. See mergeDependatobPR.yml file.
|
||||
# However, it turned out that GitHub accepts pushes from the actions as a PR and requires checks, that are always
|
||||
# false for pushing from actions.
|
||||
# This secret is created to implement the workaround described in https://stackoverflow.com/a/76135647/3124227
|
||||
skip_fetch: false
|
45
.github/workflows/updateChangelogClaude.yml
vendored
45
.github/workflows/updateChangelogClaude.yml
vendored
@@ -1,45 +0,0 @@
|
||||
name: Update Changelog with Claude
|
||||
|
||||
on:
|
||||
schedule:
|
||||
# Run every day at 5 AM UTC
|
||||
- cron: '0 5 * * *'
|
||||
workflow_dispatch: # Allow manual trigger
|
||||
|
||||
jobs:
|
||||
update-changelog:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'JetBrains/ideavim'
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
id-token: write
|
||||
issues: read
|
||||
actions: read
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0 # Need full history to analyze commits and tags
|
||||
|
||||
- name: Run Claude Code to Update Changelog
|
||||
uses: anthropics/claude-code-action@v1
|
||||
with:
|
||||
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
||||
|
||||
prompt: |
|
||||
## Task: Update the CHANGES.md Changelog File
|
||||
|
||||
You need to review the latest commits and maintain the changelog file (CHANGES.md) with meaningful changes.
|
||||
|
||||
Please follow the detailed changelog maintenance instructions in `.claude/changelog-instructions.md`.
|
||||
|
||||
If you find changes that need documenting, update CHANGES.md and create a pull request with:
|
||||
- Title: "Update changelog: <super short summary>"
|
||||
Example: "Update changelog: Add gn text object, fix visual mode issues"
|
||||
- Body: Brief summary of what was added
|
||||
|
||||
# Allow Claude to use git, GitHub CLI, and web access for checking releases and tickets
|
||||
claude_args: '--allowed-tools "Read,Edit,Bash(git:*),Bash(gh:*),WebSearch,WebFetch(domain:plugins.jetbrains.com),WebFetch(domain:youtrack.jetbrains.com),WebFetch(domain:github.com)"'
|
19
.github/workflows/updateFormatting.yml
vendored
19
.github/workflows/updateFormatting.yml
vendored
@@ -12,31 +12,26 @@ jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'JetBrains/ideavim'
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 50
|
||||
# See end of file updateChangeslog.yml for explanation of this secret
|
||||
ssh-key: ${{ secrets.PUSH_TO_PROTECTED_BRANCH_SECRET }}
|
||||
- name: Set up JDK 21
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: '21'
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
||||
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
||||
|
||||
- uses: findologic/intellij-format-action@1.0.1
|
||||
with:
|
||||
include-glob: '*.kt,*.java'
|
||||
path: .
|
||||
- name: Format files
|
||||
run: ./gradlew ktlintFormat
|
||||
|
||||
- name: Commit changes
|
||||
uses: stefanzweifel/git-auto-commit-action@v4
|
||||
with:
|
||||
commit_message: Update formatting
|
||||
commit_user_name: IdeaVim Bot
|
||||
commit_user_email: maintainers@ideavim.dev
|
||||
commit_author: IdeaVim Bot <maintainers@ideavim.dev>
|
||||
commit_user_name: Alex Plate
|
||||
commit_user_email: aleksei.plate@jetbrains.com
|
||||
commit_author: Alex Plate <aleksei.plate@jetbrains.com>
|
||||
|
47
.github/workflows/updateIntellijVersions.yml
vendored
47
.github/workflows/updateIntellijVersions.yml
vendored
@@ -1,47 +0,0 @@
|
||||
name: Update IntelliJ Version Configurations
|
||||
|
||||
on:
|
||||
schedule:
|
||||
# Run three times a year: August 15, April 30, December 1
|
||||
# Times are in UTC
|
||||
- cron: '0 10 15 8 *' # August 15 at 10:00 UTC
|
||||
- cron: '0 10 30 4 *' # April 30 at 10:00 UTC
|
||||
- cron: '0 10 1 12 *' # December 1 at 10:00 UTC
|
||||
workflow_dispatch: # Allow manual trigger for testing
|
||||
|
||||
jobs:
|
||||
update-intellij-versions:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
id-token: write
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Run Claude Code
|
||||
uses: anthropics/claude-code-action@v1
|
||||
with:
|
||||
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
||||
|
||||
prompt: |
|
||||
Look at the file `.teamcity/_Self/Project.kt` and check what IntelliJ versions are currently being tested (look for TestingBuildType configurations).
|
||||
|
||||
Based on the current date and existing versions, determine if a new IntelliJ version should be added.
|
||||
IntelliJ releases new versions approximately 3 times per year:
|
||||
- Spring release (x.1) - around March/April
|
||||
- Summer release (x.2) - around July/August
|
||||
- Fall release (x.3) - around November/December
|
||||
|
||||
If a new version should be added:
|
||||
1. Add the new TestingBuildType configuration in chronological order
|
||||
2. Create a pull request with your changes
|
||||
|
||||
The configuration file is located at: `.teamcity/_Self/Project.kt`
|
||||
Look for the section with comment `// Active tests`
|
||||
|
||||
Only add a new version if it doesn't already exist and if it makes sense based on the release schedule.
|
12
.gitignore
vendored
12
.gitignore
vendored
@@ -1,9 +1,7 @@
|
||||
*.swp
|
||||
/.gradle/
|
||||
/.intellijPlatform/
|
||||
|
||||
/.idea/
|
||||
!/.idea/dictionaries/project.xml
|
||||
!/.idea/scopes
|
||||
!/.idea/copyright
|
||||
!/.idea/icon.png
|
||||
@@ -12,9 +10,6 @@
|
||||
!/.idea/runConfigurations
|
||||
!/.idea/codeStyles
|
||||
!/.idea/vcs.xml
|
||||
!/.idea/misc.xml
|
||||
!/.idea/.name
|
||||
!/.idea/gradle.xml
|
||||
|
||||
**/build/
|
||||
**/out/
|
||||
@@ -27,12 +22,7 @@
|
||||
.teamcity/*.iml
|
||||
|
||||
# Generated by gradle task "generateGrammarSource"
|
||||
vim-engine/src/main/java/com/maddyhome/idea/vim/parser/generated
|
||||
vim-engine/src/main/java/com/maddyhome/idea/vim/regexp/parser/generated
|
||||
src/main/java/com/maddyhome/idea/vim/vimscript/parser/generated
|
||||
|
||||
# Created by github automation
|
||||
settings.xml
|
||||
|
||||
.kotlin
|
||||
|
||||
.claude/settings.local.json
|
||||
|
1
.idea/.name
generated
1
.idea/.name
generated
@@ -1 +0,0 @@
|
||||
IdeaVim
|
5
.idea/codeStyles/Project.xml
generated
5
.idea/codeStyles/Project.xml
generated
@@ -6,7 +6,6 @@
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
||||
</value>
|
||||
</option>
|
||||
<option name="LINE_SEPARATOR" value=" " />
|
||||
<JavaCodeStyleSettings>
|
||||
<option name="FIELD_NAME_PREFIX" value="my" />
|
||||
<option name="STATIC_FIELD_NAME_PREFIX" value="our" />
|
||||
@@ -192,10 +191,6 @@
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="kotlin">
|
||||
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="TAB_SIZE" value="2" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
</code_scheme>
|
||||
</component>
|
2
.idea/copyright/IdeaVim.xml
generated
2
.idea/copyright/IdeaVim.xml
generated
@@ -1,6 +1,6 @@
|
||||
<component name="CopyrightManager">
|
||||
<copyright>
|
||||
<option name="notice" value="Copyright 2003-&#36;today.year The IdeaVim authors Use of this source code is governed by an MIT-style license that can be found in the LICENSE.txt file or at https://opensource.org/licenses/MIT." />
|
||||
<option name="notice" value="Copyright 2003-2022 The IdeaVim authors Use of this source code is governed by an MIT-style license that can be found in the LICENSE.txt file or at https://opensource.org/licenses/MIT." />
|
||||
<option name="myName" value="IdeaVim" />
|
||||
</copyright>
|
||||
</component>
|
7
.idea/dictionaries/project.xml
generated
7
.idea/dictionaries/project.xml
generated
@@ -1,7 +0,0 @@
|
||||
<component name="ProjectDictionaryState">
|
||||
<dictionary name="project">
|
||||
<words>
|
||||
<w>overstrike</w>
|
||||
</words>
|
||||
</dictionary>
|
||||
</component>
|
28
.idea/gradle.xml
generated
28
.idea/gradle.xml
generated
@@ -1,28 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="GradleMigrationSettings" migrationVersion="1" />
|
||||
<component name="GradleSettings">
|
||||
<option name="linkedExternalProjectsSettings">
|
||||
<GradleProjectSettings>
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
<option name="modules">
|
||||
<set>
|
||||
<option value="$PROJECT_DIR$" />
|
||||
<option value="$PROJECT_DIR$/annotation-processors" />
|
||||
<option value="$PROJECT_DIR$/api" />
|
||||
<option value="$PROJECT_DIR$/scripts" />
|
||||
<option value="$PROJECT_DIR$/tests" />
|
||||
<option value="$PROJECT_DIR$/tests/java-tests" />
|
||||
<option value="$PROJECT_DIR$/tests/long-running-tests" />
|
||||
<option value="$PROJECT_DIR$/tests/property-tests" />
|
||||
<option value="$PROJECT_DIR$/tests/ui-fixtures" />
|
||||
<option value="$PROJECT_DIR$/tests/ui-ij-tests" />
|
||||
<option value="$PROJECT_DIR$/tests/ui-py-tests" />
|
||||
<option value="$PROJECT_DIR$/tests/ui-rd-tests" />
|
||||
<option value="$PROJECT_DIR$/vim-engine" />
|
||||
</set>
|
||||
</option>
|
||||
</GradleProjectSettings>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
22
.idea/misc.xml
generated
22
.idea/misc.xml
generated
@@ -1,22 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="EntryPointsManager">
|
||||
<list size="3">
|
||||
<item index="0" class="java.lang.String" itemvalue="com.intellij.vim.annotations.CommandOrMotion" />
|
||||
<item index="1" class="java.lang.String" itemvalue="com.intellij.vim.annotations.ExCommand" />
|
||||
<item index="2" class="java.lang.String" itemvalue="com.intellij.vim.annotations.VimscriptFunction" />
|
||||
</list>
|
||||
</component>
|
||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||
<component name="FrameworkDetectionExcludesConfiguration">
|
||||
<file type="web" url="file://$PROJECT_DIR$" />
|
||||
</component>
|
||||
<component name="MavenProjectsManager">
|
||||
<option name="originalFiles">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/.teamcity/pom.xml" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="corretto-21" project-jdk-type="JavaSDK" />
|
||||
</project>
|
@@ -12,7 +12,7 @@
|
||||
<option name="taskNames">
|
||||
<list>
|
||||
<option value="check" />
|
||||
<option value="verifyPlugin" />
|
||||
<option value="runPluginVerifier" />
|
||||
</list>
|
||||
</option>
|
||||
<option name="vmOptions" value="" />
|
||||
@@ -20,7 +20,6 @@
|
||||
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
|
||||
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
|
||||
<DebugAllEnabled>false</DebugAllEnabled>
|
||||
<RunAsTest>false</RunAsTest>
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
3
.idea/runConfigurations/IdeaVim_tests.xml
generated
3
.idea/runConfigurations/IdeaVim_tests.xml
generated
@@ -5,7 +5,7 @@
|
||||
<option name="executionName" />
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
<option name="externalSystemIdString" value="GRADLE" />
|
||||
<option name="scriptParameters" value="-x :tests:property-tests:test -x :tests:long-running-tests:test" />
|
||||
<option name="scriptParameters" value="" />
|
||||
<option name="taskDescriptions">
|
||||
<list />
|
||||
</option>
|
||||
@@ -19,7 +19,6 @@
|
||||
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
|
||||
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
|
||||
<DebugAllEnabled>false</DebugAllEnabled>
|
||||
<RunAsTest>false</RunAsTest>
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
@@ -1,25 +0,0 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="Start IJ with IdeaVim (Split Mode)" type="GradleRunConfiguration" factoryName="Gradle">
|
||||
<log_file alias="idea.log" path="$PROJECT_DIR$/build/idea-sandbox/system/log/idea.log" />
|
||||
<ExternalSystemSettings>
|
||||
<option name="executionName" />
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
<option name="externalSystemIdString" value="GRADLE" />
|
||||
<option name="scriptParameters" value="" />
|
||||
<option name="taskDescriptions">
|
||||
<list />
|
||||
</option>
|
||||
<option name="taskNames">
|
||||
<list>
|
||||
<option value="runIdeSplitMode" />
|
||||
</list>
|
||||
</option>
|
||||
<option name="vmOptions" value="" />
|
||||
</ExternalSystemSettings>
|
||||
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
|
||||
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
|
||||
<DebugAllEnabled>false</DebugAllEnabled>
|
||||
<RunAsTest>false</RunAsTest>
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
2
.idea/scopes/Copyright.xml
generated
2
.idea/scopes/Copyright.xml
generated
@@ -1,3 +1,3 @@
|
||||
<component name="DependencyValidationManager">
|
||||
<scope name="Copyright" pattern="file:*/&&!file:.github//*&&!file:.idea//*&&!file:.teamcity//*&&!file:assets//*&&!file:config//*&&!file:doc//*&&!file:gradle//*&&!file:gradlew&&!file:gradlew.bat&&!file:src/main/resources//*&&!file:antlr//*&&!file:java/com/maddyhome/idea/vim/regexp/RegExp.kt&&!file:java/com/maddyhome/idea/vim/ui/Tutor.kt&&!file:java/com/maddyhome/idea/vim/helper/ScrollViewHelper.kt" />
|
||||
<scope name="Copyright" pattern="file:*/&&!file:.github//*&&!file:.idea//*&&!file:.teamcity//*&&!file:assets//*&&!file:config//*&&!file:doc//*&&!file:gradle//*&&!file:gradlew&&!file:gradlew.bat&&!file:src/main/resources//*&&!file:antlr//*&&!file:java/com/maddyhome/idea/vim/regexp/RegExp.kt" />
|
||||
</component>
|
2
.idea/vcs.xml
generated
2
.idea/vcs.xml
generated
@@ -11,6 +11,6 @@
|
||||
</option>
|
||||
</component>
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
17
.teamcity/_Self/Constants.kt
vendored
17
.teamcity/_Self/Constants.kt
vendored
@@ -5,11 +5,16 @@ object Constants {
|
||||
const val EAP_CHANNEL = "eap"
|
||||
const val DEV_CHANNEL = "Dev"
|
||||
|
||||
const val NVIM_TESTS = "2025.1"
|
||||
const val PROPERTY_TESTS = "2025.1"
|
||||
const val LONG_RUNNING_TESTS = "2025.1"
|
||||
const val RELEASE = "2025.1"
|
||||
const val VERSION = "2.0.0"
|
||||
const val DEV_VERSION = "2.1.0"
|
||||
|
||||
const val RELEASE_DEV = "2025.1"
|
||||
const val RELEASE_EAP = "2025.1"
|
||||
const val GITHUB_TESTS = "LATEST-EAP-SNAPSHOT"
|
||||
const val NVIM_TESTS = "LATEST-EAP-SNAPSHOT"
|
||||
const val PROPERTY_TESTS = "LATEST-EAP-SNAPSHOT"
|
||||
const val LONG_RUNNING_TESTS = "LATEST-EAP-SNAPSHOT"
|
||||
const val QODANA_TESTS = "LATEST-EAP-SNAPSHOT"
|
||||
const val RELEASE = "LATEST-EAP-SNAPSHOT"
|
||||
|
||||
const val RELEASE_DEV = "LATEST-EAP-SNAPSHOT"
|
||||
const val RELEASE_EAP = "LATEST-EAP-SNAPSHOT"
|
||||
}
|
||||
|
100
.teamcity/_Self/Project.kt
vendored
100
.teamcity/_Self/Project.kt
vendored
@@ -5,28 +5,34 @@ import _Self.buildTypes.LongRunning
|
||||
import _Self.buildTypes.Nvim
|
||||
import _Self.buildTypes.PluginVerifier
|
||||
import _Self.buildTypes.PropertyBased
|
||||
import _Self.buildTypes.TestingBuildType
|
||||
import _Self.buildTypes.Qodana
|
||||
import _Self.buildTypes.TestsForIntelliJ20222
|
||||
import _Self.buildTypes.TestsForIntelliJEAP
|
||||
import _Self.subprojects.GitHub
|
||||
import _Self.subprojects.OldTests
|
||||
import _Self.subprojects.Releases
|
||||
import _Self.vcsRoots.GitHubPullRequest
|
||||
import _Self.vcsRoots.ReleasesVcsRoot
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import _Self.vcsRoots.*
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
|
||||
|
||||
object Project : Project({
|
||||
description = "Vim engine for JetBrains IDEs"
|
||||
description = "Vim emulation plugin for the IntelliJ platform products"
|
||||
|
||||
subProjects(Releases, GitHub)
|
||||
subProjects(Releases, OldTests, GitHub)
|
||||
|
||||
// VCS roots
|
||||
vcsRoot(Branch_183)
|
||||
vcsRoot(Branch_181)
|
||||
vcsRoot(Branch_191_193)
|
||||
vcsRoot(Branch_201)
|
||||
vcsRoot(Branch_202)
|
||||
vcsRoot(Branch_203_212)
|
||||
vcsRoot(Branch_213_221)
|
||||
vcsRoot(Branch_222)
|
||||
vcsRoot(Branch_Release)
|
||||
vcsRoot(GitHubPullRequest)
|
||||
vcsRoot(ReleasesVcsRoot)
|
||||
|
||||
// Active tests
|
||||
buildType(TestingBuildType("Latest EAP", version = "LATEST-EAP-SNAPSHOT"))
|
||||
buildType(TestingBuildType("2025.1"))
|
||||
buildType(TestingBuildType("2025.2"))
|
||||
buildType(TestingBuildType("Latest EAP With Xorg", "<default>", version = "LATEST-EAP-SNAPSHOT"))
|
||||
// Builds
|
||||
buildType(TestsForIntelliJEAP)
|
||||
|
||||
buildType(PropertyBased)
|
||||
buildType(LongRunning)
|
||||
@@ -34,30 +40,54 @@ object Project : Project({
|
||||
buildType(Nvim)
|
||||
buildType(PluginVerifier)
|
||||
buildType(Compatibility)
|
||||
})
|
||||
|
||||
// Common build type for all configurations
|
||||
abstract class IdeaVimBuildType(init: BuildType.() -> Unit) : BuildType({
|
||||
artifactRules = """
|
||||
+:build/reports => build/reports
|
||||
+:tests/java-tests/build/reports => java-tests/build/reports
|
||||
+:tests/long-running-tests/build/reports => long-running-tests/build/reports
|
||||
+:tests/property-tests/build/reports => property-tests/build/reports
|
||||
+:/mnt/agent/temp/buildTmp/ => /mnt/agent/temp/buildTmp/
|
||||
""".trimIndent()
|
||||
buildType(Qodana)
|
||||
|
||||
init()
|
||||
|
||||
requirements {
|
||||
// These requirements define Linux-Medium configuration.
|
||||
// Unfortunately, requirement by name (teamcity.agent.name) doesn't work
|
||||
// IDK the reason for it, but on our agents this property is empty
|
||||
equals("teamcity.agent.hardware.cpuCount", "16")
|
||||
equals("teamcity.agent.os.family", "Linux")
|
||||
}
|
||||
|
||||
failureConditions {
|
||||
// Disable detection of the java OOM
|
||||
javaCrash = false
|
||||
// Unknown staff generated by TeamCity
|
||||
features {
|
||||
feature {
|
||||
type = "CloudImage"
|
||||
id = "PROJECT_EXT_768"
|
||||
param("agent_pool_id", "41")
|
||||
param("amazon-id", "ami-0fa17ce8238eb8868")
|
||||
param("ebs-optimized", "false")
|
||||
param("image-instances-limit", "")
|
||||
param("image-name-prefix", "BuildAgentsIdeaVim")
|
||||
param("instance-type", "c5d.xlarge")
|
||||
param("key-pair-name", "teamcity-prod-pub")
|
||||
param("profileId", "amazon-48")
|
||||
param("security-group-ids", "sg-eda08696,sg-7332cf0f,")
|
||||
param("source-id", "BuildAgentsIdeaVim")
|
||||
param("spot-instance-price", "0.12")
|
||||
param("subnet-id", "subnet-58839511")
|
||||
param("use-spot-instances", "true")
|
||||
param("user-tags", "project=idea-vim")
|
||||
param("key-pair-name", "")
|
||||
param("spot-instance-price", "")
|
||||
}
|
||||
feature {
|
||||
type = "CloudProfile"
|
||||
id = "amazon-48"
|
||||
param("agentPushPreset", "")
|
||||
param("cloud-code", "amazon")
|
||||
param("description", "")
|
||||
param("enabled", "true")
|
||||
param("max-running-instances", "10")
|
||||
param("name", "Cloud Agents")
|
||||
param("next-hour", "")
|
||||
param("not-checked", "")
|
||||
param("profileId", "amazon-48")
|
||||
param("profileServerUrl", "")
|
||||
param("region", "eu-west-1")
|
||||
param("secure:access-id", "credentialsJSON:dbcdb2a2-de5f-4bc9-9421-292b19e83947")
|
||||
param("secure:secret-key", "credentialsJSON:65a87fe7-0977-4af9-96f1-344f2b82d269")
|
||||
param("system.cloud.profile_id", "amazon-48")
|
||||
param("terminate-idle-time", "15")
|
||||
param("total-work-time", "")
|
||||
param("user-script", "")
|
||||
param("spot-fleet-config", "")
|
||||
param("terminate-after-build", "true")
|
||||
param("name", "Cloud Agents - Single Build")
|
||||
}
|
||||
}
|
||||
})
|
@@ -1,8 +1,6 @@
|
||||
@file:Suppress("ClassName")
|
||||
|
||||
package _Self.buildTypes
|
||||
|
||||
import _Self.IdeaVimBuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
@@ -10,49 +8,39 @@ import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailu
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
|
||||
open class TestingBuildType(
|
||||
private val testName: String,
|
||||
private val branch: String = "<default>",
|
||||
private val version: String = testName,
|
||||
private val javaVersion: String? = null,
|
||||
private val javaPlugin: Boolean = true,
|
||||
) : IdeaVimBuildType({
|
||||
id("IdeaVimTests_${testName.vanish()}")
|
||||
name = "Tests for IntelliJ $testName"
|
||||
|
||||
sealed class ActiveTests(buildName: String, ijVersion: String) : BuildType({
|
||||
name = buildName
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_legacyNoJavaPlugin", javaPlugin.not().toString())
|
||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", version)
|
||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", ijVersion)
|
||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||
if (javaVersion != null) {
|
||||
param("env.ORG_GRADLE_PROJECT_javaVersion", javaVersion)
|
||||
}
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
branchFilter = "+:$branch"
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
gradle {
|
||||
clearConditions()
|
||||
tasks = "clean test -x :tests:property-tests:test -x :tests:long-running-tests:test"
|
||||
tasks = "clean check -x ktlintMainSourceSetCheck -x ktlintTestSourceSetCheck"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
jdkHome = "/usr/lib/jvm/java-21-amazon-corretto"
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
vcs {
|
||||
branchFilter = "+:$branch"
|
||||
branchFilter = ""
|
||||
}
|
||||
}
|
||||
|
||||
requirements {
|
||||
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||
}
|
||||
|
||||
failureConditions {
|
||||
failOnMetricChange {
|
||||
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
|
||||
@@ -66,9 +54,4 @@ open class TestingBuildType(
|
||||
}
|
||||
})
|
||||
|
||||
private fun String.vanish(): String {
|
||||
return this
|
||||
.replace(' ', '_')
|
||||
.replace('.', '_')
|
||||
.replace('-', '_')
|
||||
}
|
||||
object TestsForIntelliJEAP : ActiveTests("Tests for IntelliJ Latest EAP", "LATEST-EAP-SNAPSHOT")
|
43
.teamcity/_Self/buildTypes/Compatibility.kt
vendored
43
.teamcity/_Self/buildTypes/Compatibility.kt
vendored
@@ -1,54 +1,31 @@
|
||||
package _Self.buildTypes
|
||||
|
||||
import _Self.IdeaVimBuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.golang
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
|
||||
|
||||
object Compatibility : IdeaVimBuildType({
|
||||
object Compatibility : BuildType({
|
||||
id("IdeaVimCompatibility")
|
||||
name = "IdeaVim compatibility with external plugins"
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
branchFilter = "+:<default>"
|
||||
}
|
||||
|
||||
steps {
|
||||
script {
|
||||
name = "Load Verifier"
|
||||
scriptContent = """
|
||||
mkdir verifier1
|
||||
curl -f -L -o verifier1/verifier-cli-dev-all-2.jar "https://packages.jetbrains.team/files/p/ideavim/plugin-verifier/verifier-cli-dev-all-2.jar"
|
||||
""".trimIndent()
|
||||
}
|
||||
script {
|
||||
name = "Check"
|
||||
scriptContent = """
|
||||
# We use a custom build of verifier that downloads IdeaVim from dev channel
|
||||
# To create a custom build: Download plugin verifier repo, add an if that switches to dev channel for IdeaVim repo
|
||||
# At the moment it's com.jetbrains.pluginverifier.repository.repositories.marketplace.MarketplaceRepository#getLastCompatibleVersionOfPlugin
|
||||
# Build using gradlew :intellij-plugin-verifier:verifier-cli:shadowJar
|
||||
# Upload verifier-cli-dev-all.jar artifact to the repo in IdeaVim space repo
|
||||
|
||||
java --version
|
||||
java -jar verifier1/verifier-cli-dev-all-2.jar check-plugin '${'$'}org.jetbrains.IdeaVim-EasyMotion' [latest-IU] -team-city
|
||||
java -jar verifier1/verifier-cli-dev-all-2.jar check-plugin '${'$'}eu.theblob42.idea.whichkey' [latest-IU] -team-city
|
||||
java -jar verifier1/verifier-cli-dev-all-2.jar check-plugin '${'$'}IdeaVimExtension' [latest-IU] -team-city
|
||||
# Outdated java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}github.zgqq.intellij-enhance' [latest-IU] -team-city
|
||||
# java -jar verifier1/verifier-cli-dev-all-2.jar check-plugin '${'$'}com.github.copilot' [latest-IU] -team-city
|
||||
java -jar verifier1/verifier-cli-dev-all-2.jar check-plugin '${'$'}com.github.dankinsoid.multicursor' [latest-IU] -team-city
|
||||
java -jar verifier1/verifier-cli-dev-all-2.jar check-plugin '${'$'}com.joshestein.ideavim-quickscope' [latest-IU] -team-city
|
||||
java -jar verifier1/verifier-cli-dev-all-2.jar check-plugin '${'$'}com.julienphalip.ideavim.peekaboo' [latest-IU] -team-city
|
||||
java -jar verifier1/verifier-cli-dev-all-2.jar check-plugin '${'$'}com.julienphalip.ideavim.switch' [latest-IU] -team-city
|
||||
java -jar verifier1/verifier-cli-dev-all-2.jar check-plugin '${'$'}com.julienphalip.ideavim.functiontextobj' [latest-IU] -team-city
|
||||
java -jar verifier1/verifier-cli-dev-all-2.jar check-plugin '${'$'}com.miksuki.HighlightCursor' [latest-IU] -team-city
|
||||
java -jar verifier1/verifier-cli-dev-all-2.jar check-plugin '${'$'}com.ugarosa.idea.edgemotion' [latest-IU] -team-city
|
||||
java -jar verifier1/verifier-cli-dev-all-2.jar check-plugin '${'$'}cn.mumukehao.plugin' [latest-IU] -team-city
|
||||
java -jar verifier1/verifier-cli-dev-all-2.jar check-plugin '${'$'}com.magidc.ideavim.dial' [latest-IU] -team-city
|
||||
java -jar verifier1/verifier-cli-dev-all-2.jar check-plugin '${'$'}dev.ghostflyby.ideavim.toggleIME' [latest-IU] -team-city
|
||||
java -jar verifier1/verifier-cli-dev-all-2.jar check-plugin '${'$'}com.magidc.ideavim.anyObject' [latest-IU] -team-city
|
||||
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}org.jetbrains.IdeaVim-EasyMotion' [latest-IU] -team-city
|
||||
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}io.github.mishkun.ideavimsneak' [latest-IU] -team-city
|
||||
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}eu.theblob42.idea.whichkey' [latest-IU] -team-city
|
||||
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}IdeaVimExtension' [latest-IU] -team-city
|
||||
# Outdated java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}github.zgqq.intellij-enhance' [latest-IU] -team-city
|
||||
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}com.github.copilot' [latest-IU] -team-city
|
||||
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}com.github.dankinsoid.multicursor' [latest-IU] -team-city
|
||||
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}com.joshestein.ideavim-quickscope' [latest-IU] -team-city
|
||||
""".trimIndent()
|
||||
}
|
||||
}
|
||||
|
77
.teamcity/_Self/buildTypes/GithubTests.kt
vendored
Normal file
77
.teamcity/_Self/buildTypes/GithubTests.kt
vendored
Normal file
@@ -0,0 +1,77 @@
|
||||
package _Self.buildTypes
|
||||
|
||||
import _Self.Constants.GITHUB_TESTS
|
||||
import _Self.vcsRoots.GitHubPullRequest
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.PullRequests
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.commitStatusPublisher
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.pullRequests
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.VcsTrigger
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
|
||||
object GithubTests : Github("clean test", "Tests")
|
||||
|
||||
sealed class Github(command: String, desc: String) : BuildType({
|
||||
name = "GitHub Pull Requests $desc"
|
||||
description = "Test GitHub pull requests $desc"
|
||||
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", GITHUB_TESTS)
|
||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(GitHubPullRequest)
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
branchFilter = """
|
||||
+:*
|
||||
-:<default>
|
||||
""".trimIndent()
|
||||
}
|
||||
|
||||
steps {
|
||||
gradle {
|
||||
tasks = command
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
vcs {
|
||||
quietPeriodMode = VcsTrigger.QuietPeriodMode.USE_DEFAULT
|
||||
branchFilter = ""
|
||||
}
|
||||
}
|
||||
|
||||
features {
|
||||
pullRequests {
|
||||
provider = github {
|
||||
authType = token {
|
||||
token = "credentialsJSON:43afd6e5-6ad5-4d12-a218-cf1547717a7f"
|
||||
}
|
||||
filterTargetBranch = "refs/heads/master"
|
||||
filterAuthorRole = PullRequests.GitHubRoleFilter.EVERYBODY
|
||||
}
|
||||
}
|
||||
commitStatusPublisher {
|
||||
vcsRootExtId = "${GitHubPullRequest.id}"
|
||||
publisher = github {
|
||||
githubUrl = "https://api.github.com"
|
||||
authType = personalToken {
|
||||
token = "credentialsJSON:43afd6e5-6ad5-4d12-a218-cf1547717a7f"
|
||||
}
|
||||
}
|
||||
param("github_oauth_user", "AlexPl292")
|
||||
}
|
||||
}
|
||||
|
||||
requirements {
|
||||
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||
}
|
||||
})
|
23
.teamcity/_Self/buildTypes/LongRunning.kt
vendored
23
.teamcity/_Self/buildTypes/LongRunning.kt
vendored
@@ -1,14 +1,13 @@
|
||||
package _Self.buildTypes
|
||||
|
||||
import _Self.Constants.LONG_RUNNING_TESTS
|
||||
import _Self.IdeaVimBuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
|
||||
object LongRunning : IdeaVimBuildType({
|
||||
object LongRunning : BuildType({
|
||||
name = "Long running tests"
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
@@ -18,30 +17,26 @@ object LongRunning : IdeaVimBuildType({
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
branchFilter = "+:<default>"
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
gradle {
|
||||
tasks = "clean :tests:long-running-tests:test"
|
||||
tasks = "clean testLongRunning"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
jdkHome = "/usr/lib/jvm/java-21-amazon-corretto"
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
vcs {
|
||||
enabled = false
|
||||
branchFilter = "+:<default>"
|
||||
}
|
||||
schedule {
|
||||
enabled = true
|
||||
schedulingPolicy = daily {
|
||||
hour = 5
|
||||
}
|
||||
branchFilter = ""
|
||||
}
|
||||
}
|
||||
|
||||
requirements {
|
||||
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||
}
|
||||
})
|
23
.teamcity/_Self/buildTypes/Nvim.kt
vendored
23
.teamcity/_Self/buildTypes/Nvim.kt
vendored
@@ -1,7 +1,7 @@
|
||||
package _Self.buildTypes
|
||||
|
||||
import _Self.Constants.NVIM_TESTS
|
||||
import _Self.IdeaVimBuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
@@ -10,7 +10,7 @@ import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailu
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
|
||||
object Nvim : IdeaVimBuildType({
|
||||
object Nvim : BuildType({
|
||||
name = "Tests with nvim"
|
||||
description = "Running tests with nvim integration"
|
||||
|
||||
@@ -18,12 +18,11 @@ object Nvim : IdeaVimBuildType({
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", NVIM_TESTS)
|
||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||
param("env.ideavim.nvim.path", "./nvim-linux-x86_64/bin/nvim")
|
||||
param("env.ideavim.nvim.path", "./nvim-linux64/bin/nvim")
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
branchFilter = "+:<default>"
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
@@ -32,26 +31,30 @@ object Nvim : IdeaVimBuildType({
|
||||
script {
|
||||
name = "Set up NeoVim"
|
||||
scriptContent = """
|
||||
wget https://github.com/neovim/neovim/releases/download/nightly/nvim-linux-x86_64.tar.gz
|
||||
tar xzf nvim-linux-x86_64.tar.gz
|
||||
cd nvim-linux-x86_64/bin
|
||||
wget https://github.com/neovim/neovim/releases/download/v0.7.2/nvim-linux64.tar.gz
|
||||
tar xzf nvim-linux64.tar.gz
|
||||
cd nvim-linux64/bin
|
||||
chmod +x nvim
|
||||
""".trimIndent()
|
||||
}
|
||||
gradle {
|
||||
tasks = "clean test -x :tests:property-tests:test -x :tests:long-running-tests:test -Dnvim"
|
||||
tasks = "clean testWithNeovim"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
jdkHome = "/usr/lib/jvm/java-21-amazon-corretto"
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
vcs {
|
||||
branchFilter = "+:<default>"
|
||||
branchFilter = ""
|
||||
}
|
||||
}
|
||||
|
||||
requirements {
|
||||
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||
}
|
||||
|
||||
failureConditions {
|
||||
failOnMetricChange {
|
||||
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
|
||||
|
15
.teamcity/_Self/buildTypes/PluginVerifier.kt
vendored
15
.teamcity/_Self/buildTypes/PluginVerifier.kt
vendored
@@ -1,12 +1,12 @@
|
||||
package _Self.buildTypes
|
||||
|
||||
import _Self.IdeaVimBuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
|
||||
object PluginVerifier : IdeaVimBuildType({
|
||||
object PluginVerifier : BuildType({
|
||||
name = "Plugin verification"
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
@@ -15,23 +15,26 @@ object PluginVerifier : IdeaVimBuildType({
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
branchFilter = "+:<default>"
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
gradle {
|
||||
tasks = "clean verifyPlugin"
|
||||
tasks = "clean runPluginVerifier"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
jdkHome = "/usr/lib/jvm/java-21-amazon-corretto"
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
vcs {
|
||||
branchFilter = "+:<default>"
|
||||
branchFilter = ""
|
||||
}
|
||||
}
|
||||
|
||||
requirements {
|
||||
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||
}
|
||||
})
|
||||
|
16
.teamcity/_Self/buildTypes/PropertyBased.kt
vendored
16
.teamcity/_Self/buildTypes/PropertyBased.kt
vendored
@@ -1,13 +1,13 @@
|
||||
package _Self.buildTypes
|
||||
|
||||
import _Self.Constants.PROPERTY_TESTS
|
||||
import _Self.IdeaVimBuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
|
||||
object PropertyBased : IdeaVimBuildType({
|
||||
object PropertyBased : BuildType({
|
||||
name = "Property based tests"
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
@@ -17,24 +17,26 @@ object PropertyBased : IdeaVimBuildType({
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
branchFilter = "+:<default>"
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
gradle {
|
||||
clearConditions()
|
||||
tasks = "clean :tests:property-tests:test"
|
||||
tasks = "clean testPropertyBased"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
jdkHome = "/usr/lib/jvm/java-21-amazon-corretto"
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
vcs {
|
||||
branchFilter = "+:<default>"
|
||||
branchFilter = ""
|
||||
}
|
||||
}
|
||||
|
||||
requirements {
|
||||
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||
}
|
||||
})
|
||||
|
64
.teamcity/_Self/buildTypes/PublishVimEngine.kt
vendored
64
.teamcity/_Self/buildTypes/PublishVimEngine.kt
vendored
@@ -1,64 +0,0 @@
|
||||
package _Self.buildTypes
|
||||
|
||||
import _Self.IdeaVimBuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.ParameterDisplay
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.ScheduleTrigger
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
|
||||
|
||||
object PublishVimEngine : IdeaVimBuildType({
|
||||
name = "Publish vim-engine"
|
||||
description = "Build and publish vim-engine library"
|
||||
|
||||
artifactRules = "build/distributions/*"
|
||||
buildNumberPattern = "0.0.%build.counter%"
|
||||
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_engineVersion", "%build.number%")
|
||||
param("env.ORG_GRADLE_PROJECT_uploadUrl", "https://packages.jetbrains.team/maven/p/ij/intellij-dependencies")
|
||||
password("env.ORG_GRADLE_PROJECT_spacePassword", "credentialsJSON:5ea56f8c-efe7-4e1e-83de-0c02bcc39d0b", display = ParameterDisplay.HIDDEN)
|
||||
param("env.ORG_GRADLE_PROJECT_spaceUsername", "a121c67e-39ac-40e6-bf82-649855ec27b6")
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
branchFilter = "+:fleet"
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
gradle {
|
||||
tasks = ":vim-engine:publish"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
jdkHome = "/usr/lib/jvm/java-21-amazon-corretto"
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
schedule {
|
||||
enabled = true
|
||||
schedulingPolicy = weekly {
|
||||
dayOfWeek = ScheduleTrigger.DAY.Sunday
|
||||
}
|
||||
branchFilter = ""
|
||||
}
|
||||
}
|
||||
|
||||
failureConditions {
|
||||
failOnMetricChange {
|
||||
metric = BuildFailureOnMetric.MetricType.ARTIFACT_SIZE
|
||||
threshold = 5
|
||||
units = BuildFailureOnMetric.MetricUnit.PERCENTS
|
||||
comparison = BuildFailureOnMetric.MetricComparison.DIFF
|
||||
compareTo = build {
|
||||
buildRule = lastSuccessful()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
84
.teamcity/_Self/buildTypes/Qodana.kt
vendored
Normal file
84
.teamcity/_Self/buildTypes/Qodana.kt
vendored
Normal file
@@ -0,0 +1,84 @@
|
||||
package _Self.buildTypes
|
||||
|
||||
import _Self.Constants.QODANA_TESTS
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.Qodana
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.qodana
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.ScheduleTrigger
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
|
||||
object Qodana : BuildType({
|
||||
name = "Qodana checks"
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", QODANA_TESTS)
|
||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
qodana {
|
||||
name = "Qodana"
|
||||
/*
|
||||
reportAsTestsEnable = ""
|
||||
failBuildOnErrors = ""
|
||||
codeInspectionXmlConfig = "Custom"
|
||||
codeInspectionCustomXmlConfigPath = ".idea/inspectionProfiles/Qodana.xml"
|
||||
reportAsTestsEnable = "true"
|
||||
*/
|
||||
clearConditions()
|
||||
param("licenseaudit-enable", "true")
|
||||
param("clonefinder-languages", "Java")
|
||||
param("clonefinder-mode", "")
|
||||
param("report-version", "")
|
||||
param("clonefinder-languages-container", "Java Kotlin")
|
||||
param("namesAndTagsCustom", "repo.labs.intellij.net/static-analyser/qodana")
|
||||
param("clonefinder-queried-project", "src")
|
||||
param("clonefinder-enable", "true")
|
||||
param("clonefinder-reference-projects", "src")
|
||||
param("yaml-configuration", "")
|
||||
linter = jvm {
|
||||
version = Qodana.JVMVersion.LATEST
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
vcs {
|
||||
enabled = true
|
||||
branchFilter = ""
|
||||
}
|
||||
schedule {
|
||||
schedulingPolicy = weekly {
|
||||
dayOfWeek = ScheduleTrigger.DAY.Tuesday
|
||||
}
|
||||
branchFilter = ""
|
||||
triggerBuild = always()
|
||||
}
|
||||
}
|
||||
|
||||
failureConditions {
|
||||
failOnMetricChange {
|
||||
threshold = 0
|
||||
units = BuildFailureOnMetric.MetricUnit.DEFAULT_UNIT
|
||||
comparison = BuildFailureOnMetric.MetricComparison.MORE
|
||||
compareTo = value()
|
||||
metric = BuildFailureOnMetric.MetricType.TEST_FAILED_COUNT
|
||||
param("metricKey", "QodanaProblemsTotal")
|
||||
}
|
||||
}
|
||||
|
||||
requirements {
|
||||
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||
}
|
||||
})
|
76
.teamcity/_Self/buildTypes/Release.kt
vendored
Normal file
76
.teamcity/_Self/buildTypes/Release.kt
vendored
Normal file
@@ -0,0 +1,76 @@
|
||||
package _Self.buildTypes
|
||||
|
||||
import _Self.Constants.DEFAULT_CHANNEL
|
||||
import _Self.Constants.DEV_CHANNEL
|
||||
import _Self.Constants.EAP_CHANNEL
|
||||
import _Self.Constants.RELEASE
|
||||
import _Self.Constants.VERSION
|
||||
import _Self.vcsRoots.Branch_Release
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.vcsLabeling
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
||||
|
||||
object Release : BuildType({
|
||||
name = "Publish Release"
|
||||
description = "Build and publish IdeaVim plugin"
|
||||
|
||||
artifactRules = "build/distributions/*"
|
||||
buildNumberPattern = VERSION
|
||||
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", RELEASE)
|
||||
password(
|
||||
"env.ORG_GRADLE_PROJECT_publishToken",
|
||||
"credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde",
|
||||
label = "Password"
|
||||
)
|
||||
param("env.ORG_GRADLE_PROJECT_version", "%build.number%")
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_publishChannels", "$DEFAULT_CHANNEL,$EAP_CHANNEL,$DEV_CHANNEL")
|
||||
password(
|
||||
"env.ORG_GRADLE_PROJECT_slackUrl",
|
||||
"credentialsJSON:a8ab8150-e6f8-4eaf-987c-bcd65eac50b5",
|
||||
label = "Slack Token"
|
||||
)
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(Branch_Release)
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
gradle {
|
||||
tasks = "clean publishPlugin slackNotification"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
|
||||
features {
|
||||
vcsLabeling {
|
||||
vcsRootId = "${DslContext.settingsRoot.id}"
|
||||
labelingPattern = "%system.build.number%"
|
||||
successfulOnly = true
|
||||
branchFilter = ""
|
||||
}
|
||||
}
|
||||
|
||||
failureConditions {
|
||||
failOnMetricChange {
|
||||
metric = BuildFailureOnMetric.MetricType.ARTIFACT_SIZE
|
||||
threshold = 5
|
||||
units = BuildFailureOnMetric.MetricUnit.PERCENTS
|
||||
comparison = BuildFailureOnMetric.MetricComparison.DIFF
|
||||
compareTo = build {
|
||||
buildRule = lastSuccessful()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
41
.teamcity/_Self/buildTypes/ReleaseDev.kt
vendored
41
.teamcity/_Self/buildTypes/ReleaseDev.kt
vendored
@@ -1,22 +1,22 @@
|
||||
package _Self.buildTypes
|
||||
|
||||
import _Self.Constants.DEV_CHANNEL
|
||||
import _Self.Constants.DEV_VERSION
|
||||
import _Self.Constants.RELEASE_DEV
|
||||
import _Self.IdeaVimBuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.sshAgent
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
|
||||
|
||||
object ReleaseDev : IdeaVimBuildType({
|
||||
object ReleaseDev : BuildType({
|
||||
name = "Publish Dev Build"
|
||||
description = "Build and publish Dev of IdeaVim plugin"
|
||||
|
||||
artifactRules = "build/distributions/*"
|
||||
buildNumberPattern = "$DEV_VERSION-dev.%build.counter%"
|
||||
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", RELEASE_DEV)
|
||||
@@ -25,38 +25,23 @@ object ReleaseDev : IdeaVimBuildType({
|
||||
"credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde",
|
||||
label = "Password"
|
||||
)
|
||||
param("env.ORG_GRADLE_PROJECT_version", "%build.number%")
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_publishChannels", DEV_CHANNEL)
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
branchFilter = "+:<default>"
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
script {
|
||||
name = "Pull git tags"
|
||||
scriptContent = "git fetch --tags origin"
|
||||
}
|
||||
script {
|
||||
name = "Pull git history"
|
||||
scriptContent = "git fetch --unshallow"
|
||||
}
|
||||
gradle {
|
||||
name = "Calculate new dev version"
|
||||
tasks = "scripts:calculateNewDevVersion"
|
||||
jdkHome = "/usr/lib/jvm/java-21-amazon-corretto"
|
||||
}
|
||||
gradle {
|
||||
name = "Set TeamCity build number"
|
||||
tasks = "scripts:setTeamCityBuildNumber"
|
||||
jdkHome = "/usr/lib/jvm/java-21-amazon-corretto"
|
||||
}
|
||||
gradle {
|
||||
tasks = "publishPlugin"
|
||||
jdkHome = "/usr/lib/jvm/java-21-amazon-corretto"
|
||||
tasks = "clean publishPlugin"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,12 +55,6 @@ object ReleaseDev : IdeaVimBuildType({
|
||||
}
|
||||
}
|
||||
|
||||
features {
|
||||
sshAgent {
|
||||
teamcitySshKey = "IdeaVim ssh keys"
|
||||
}
|
||||
}
|
||||
|
||||
failureConditions {
|
||||
failOnMetricChange {
|
||||
metric = BuildFailureOnMetric.MetricType.ARTIFACT_SIZE
|
||||
|
81
.teamcity/_Self/buildTypes/ReleaseEap.kt
vendored
81
.teamcity/_Self/buildTypes/ReleaseEap.kt
vendored
@@ -1,22 +1,22 @@
|
||||
package _Self.buildTypes
|
||||
|
||||
import _Self.Constants.DEV_VERSION
|
||||
import _Self.Constants.EAP_CHANNEL
|
||||
import _Self.Constants.RELEASE_EAP
|
||||
import _Self.IdeaVimBuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.ParameterDisplay
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.sshAgent
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.vcsLabeling
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
||||
|
||||
object ReleaseEap : IdeaVimBuildType({
|
||||
object ReleaseEap : BuildType({
|
||||
name = "Publish EAP Build"
|
||||
description = "Build and publish EAP of IdeaVim plugin"
|
||||
|
||||
artifactRules = "build/distributions/*"
|
||||
buildNumberPattern = "$DEV_VERSION-eap.%build.counter%"
|
||||
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", RELEASE_EAP)
|
||||
@@ -25,78 +25,37 @@ object ReleaseEap : IdeaVimBuildType({
|
||||
"credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde",
|
||||
label = "Password"
|
||||
)
|
||||
param("env.ORG_GRADLE_PROJECT_version", "%build.number%")
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_publishChannels", EAP_CHANNEL)
|
||||
password(
|
||||
"env.ORG_GRADLE_PROJECT_slackUrl",
|
||||
"credentialsJSON:a8ab8150-e6f8-4eaf-987c-bcd65eac50b5",
|
||||
label = "Slack Token"
|
||||
)
|
||||
password(
|
||||
"env.YOUTRACK_TOKEN",
|
||||
"credentialsJSON:2479995b-7b60-4fbb-b095-f0bafae7f622",
|
||||
display = ParameterDisplay.HIDDEN
|
||||
)
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
branchFilter = "+:<default>"
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
script {
|
||||
name = "Pull git tags"
|
||||
scriptContent = "git fetch --tags origin"
|
||||
}
|
||||
script {
|
||||
name = "Pull git history"
|
||||
scriptContent = "git fetch --unshallow"
|
||||
}
|
||||
gradle {
|
||||
name = "Calculate new eap version"
|
||||
tasks = "scripts:calculateNewEapVersion"
|
||||
jdkHome = "/usr/lib/jvm/java-21-amazon-corretto"
|
||||
}
|
||||
gradle {
|
||||
name = "Set TeamCity build number"
|
||||
tasks = "scripts:setTeamCityBuildNumber"
|
||||
jdkHome = "/usr/lib/jvm/java-21-amazon-corretto"
|
||||
}
|
||||
gradle {
|
||||
name = "Add release tag"
|
||||
tasks = "scripts:addReleaseTag"
|
||||
jdkHome = "/usr/lib/jvm/java-21-amazon-corretto"
|
||||
}
|
||||
gradle {
|
||||
name = "Publish plugin"
|
||||
tasks = "publishPlugin"
|
||||
jdkHome = "/usr/lib/jvm/java-21-amazon-corretto"
|
||||
}
|
||||
script {
|
||||
name = "Push changes to the repo"
|
||||
scriptContent = """
|
||||
branch=$(git branch --show-current)
|
||||
echo current branch is ${'$'}branch
|
||||
if [ "master" != "${'$'}branch" ];
|
||||
then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
git push origin %build.number%
|
||||
""".trimIndent()
|
||||
}
|
||||
gradle {
|
||||
name = "YouTrack post release actions"
|
||||
tasks = "scripts:eapReleaseActions"
|
||||
jdkHome = "/usr/lib/jvm/java-21-amazon-corretto"
|
||||
tasks = "clean publishPlugin"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
|
||||
features {
|
||||
sshAgent {
|
||||
teamcitySshKey = "IdeaVim ssh keys"
|
||||
vcsLabeling {
|
||||
vcsRootId = "${DslContext.settingsRoot.id}"
|
||||
labelingPattern = "%system.build.number%"
|
||||
successfulOnly = true
|
||||
branchFilter = ""
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,12 +70,4 @@ object ReleaseEap : IdeaVimBuildType({
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
requirements {
|
||||
// These requirements define Linux-XLarge configuration.
|
||||
// Unfortunately, requirement by name (teamcity.agent.name) doesn't work
|
||||
// IDK the reason for it, but on our agents this property is empty
|
||||
// equals("teamcity.agent.hardware.cpuCount", "16")
|
||||
// equals("teamcity.agent.os.family", "Linux")
|
||||
}
|
||||
})
|
||||
|
168
.teamcity/_Self/buildTypes/ReleasePlugin.kt
vendored
168
.teamcity/_Self/buildTypes/ReleasePlugin.kt
vendored
@@ -1,168 +0,0 @@
|
||||
/*
|
||||
* Copyright 2003-2023 The IdeaVim authors
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style
|
||||
* license that can be found in the LICENSE.txt file or at
|
||||
* https://opensource.org/licenses/MIT.
|
||||
*/
|
||||
|
||||
package _Self.buildTypes
|
||||
|
||||
import _Self.Constants.DEFAULT_CHANNEL
|
||||
import _Self.Constants.DEV_CHANNEL
|
||||
import _Self.Constants.EAP_CHANNEL
|
||||
import _Self.Constants.RELEASE
|
||||
import _Self.IdeaVimBuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.ParameterDisplay
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.sshAgent
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script
|
||||
|
||||
object ReleaseMajor : ReleasePlugin("major")
|
||||
object ReleaseMinor : ReleasePlugin("minor")
|
||||
object ReleasePatch : ReleasePlugin("patch")
|
||||
|
||||
sealed class ReleasePlugin(private val releaseType: String) : IdeaVimBuildType({
|
||||
name = "Publish $releaseType release"
|
||||
description = "Build and publish IdeaVim plugin"
|
||||
|
||||
artifactRules = """
|
||||
build/distributions/*
|
||||
build/reports/*
|
||||
""".trimIndent()
|
||||
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", RELEASE)
|
||||
password(
|
||||
"env.ORG_GRADLE_PROJECT_publishToken",
|
||||
"credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde",
|
||||
label = "Password"
|
||||
)
|
||||
param("env.ORG_GRADLE_PROJECT_publishChannels", "$DEFAULT_CHANNEL,$EAP_CHANNEL,$DEV_CHANNEL")
|
||||
password(
|
||||
"env.ORG_GRADLE_PROJECT_slackUrl",
|
||||
"credentialsJSON:a8ab8150-e6f8-4eaf-987c-bcd65eac50b5",
|
||||
label = "Slack Token"
|
||||
)
|
||||
password(
|
||||
"env.ORG_GRADLE_PROJECT_youtrackToken",
|
||||
"credentialsJSON:7bc0eb3a-b86a-4ebd-b622-d4ef12d7e1d3",
|
||||
display = ParameterDisplay.HIDDEN
|
||||
)
|
||||
param("env.ORG_GRADLE_PROJECT_releaseType", releaseType)
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
branchFilter = "+:<default>"
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
script {
|
||||
name = "Pull git tags"
|
||||
scriptContent = "git fetch --tags origin"
|
||||
}
|
||||
script {
|
||||
name = "Pull git history"
|
||||
scriptContent = "git fetch --unshallow"
|
||||
}
|
||||
script {
|
||||
name = "Reset release branch"
|
||||
scriptContent = """
|
||||
if [ "major" = "$releaseType" ] || [ "minor" = "$releaseType" ]
|
||||
then
|
||||
echo Resetting the release branch because the release type is $releaseType
|
||||
git checkout master
|
||||
latest_eap=${'$'}(git describe --tags --match="[0-9].[0-9]*.[0-9]-eap.[0-9]*" --abbrev=0 HEAD)
|
||||
echo Latest EAP: ${'$'}latest_eap
|
||||
commit_of_latest_eap=${'$'}(git rev-list -n 1 ${'$'}latest_eap)
|
||||
echo Commit of latest EAP: ${'$'}commit_of_latest_eap
|
||||
git checkout release
|
||||
git reset --hard ${'$'}commit_of_latest_eap
|
||||
else
|
||||
git checkout release
|
||||
echo Do not reset the release branch because the release type is $releaseType
|
||||
fi
|
||||
echo Checked out release branch
|
||||
""".trimIndent()
|
||||
}
|
||||
gradle {
|
||||
name = "Calculate new version"
|
||||
tasks = "scripts:calculateNewVersion"
|
||||
jdkHome = "/usr/lib/jvm/java-21-amazon-corretto"
|
||||
}
|
||||
gradle {
|
||||
name = "Set TeamCity build number"
|
||||
tasks = "scripts:setTeamCityBuildNumber"
|
||||
jdkHome = "/usr/lib/jvm/java-21-amazon-corretto"
|
||||
}
|
||||
// gradle {
|
||||
// name = "Update change log"
|
||||
// tasks = "scripts:changelogUpdateUnreleased"
|
||||
// }
|
||||
// gradle {
|
||||
// name = "Commit preparation changes"
|
||||
// tasks = "scripts:commitChanges"
|
||||
// }
|
||||
gradle {
|
||||
name = "Add release tag"
|
||||
tasks = "scripts:addReleaseTag"
|
||||
jdkHome = "/usr/lib/jvm/java-21-amazon-corretto"
|
||||
}
|
||||
script {
|
||||
name = "Run tests"
|
||||
scriptContent = "./gradlew test -x :tests:property-tests:test -x :tests:long-running-tests:test"
|
||||
}
|
||||
gradle {
|
||||
name = "Publish release"
|
||||
tasks = "publishPlugin"
|
||||
jdkHome = "/usr/lib/jvm/java-21-amazon-corretto"
|
||||
}
|
||||
// script {
|
||||
// name = "Checkout master branch"
|
||||
// scriptContent = """
|
||||
// echo Checkout master
|
||||
// git checkout master
|
||||
// """.trimIndent()
|
||||
// }
|
||||
// gradle {
|
||||
// name = "Update change log in master"
|
||||
// tasks = "scripts:changelogUpdateUnreleased"
|
||||
// }
|
||||
// gradle {
|
||||
// name = "Commit preparation changes in master"
|
||||
// tasks = "scripts:commitChanges"
|
||||
// }
|
||||
script {
|
||||
name = "Push changes to the repo"
|
||||
scriptContent = """
|
||||
git checkout release
|
||||
echo checkout release branch
|
||||
git branch --set-upstream-to=origin/release release
|
||||
git push origin --force
|
||||
# Push tag
|
||||
git push origin %build.number%
|
||||
""".trimIndent()
|
||||
}
|
||||
gradle {
|
||||
name = "Run Integrations"
|
||||
tasks = "releaseActions"
|
||||
gradleParams = "--no-configuration-cache"
|
||||
jdkHome = "/usr/lib/jvm/java-21-amazon-corretto"
|
||||
}
|
||||
// gradle {
|
||||
// name = "Slack Notification"
|
||||
// tasks = "slackNotification"
|
||||
// }
|
||||
}
|
||||
|
||||
features {
|
||||
sshAgent {
|
||||
teamcitySshKey = "IdeaVim ssh keys"
|
||||
}
|
||||
}
|
||||
})
|
58
.teamcity/_Self/buildTypes/TestsForIntelliJ20183.kt
vendored
Normal file
58
.teamcity/_Self/buildTypes/TestsForIntelliJ20183.kt
vendored
Normal file
@@ -0,0 +1,58 @@
|
||||
package _Self.buildTypes
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
|
||||
object TestsForIntelliJ20183 : BuildType({
|
||||
name = "Tests for IntelliJ 2018.3"
|
||||
description = "branch 183"
|
||||
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_legacyNoJavaPlugin", "true")
|
||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-2018.3")
|
||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8")
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(_Self.vcsRoots.Branch_183)
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
gradle {
|
||||
tasks = "clean test"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
vcs {
|
||||
branchFilter = ""
|
||||
}
|
||||
}
|
||||
|
||||
requirements {
|
||||
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||
}
|
||||
|
||||
failureConditions {
|
||||
failOnMetricChange {
|
||||
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
|
||||
threshold = 20
|
||||
units = BuildFailureOnMetric.MetricUnit.PERCENTS
|
||||
comparison = BuildFailureOnMetric.MetricComparison.LESS
|
||||
compareTo = build {
|
||||
buildRule = lastSuccessful()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
61
.teamcity/_Self/buildTypes/TestsForIntelliJ_181-182.kt
vendored
Normal file
61
.teamcity/_Self/buildTypes/TestsForIntelliJ_181-182.kt
vendored
Normal file
@@ -0,0 +1,61 @@
|
||||
@file:Suppress("ClassName")
|
||||
|
||||
package _Self.buildTypes
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
|
||||
sealed class TestsForIntelliJ_181_branch(private val version: String) : BuildType({
|
||||
name = "Tests for IntelliJ $version"
|
||||
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-$version")
|
||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8")
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(_Self.vcsRoots.Branch_181)
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
gradle {
|
||||
tasks = "clean test"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
vcs {
|
||||
branchFilter = ""
|
||||
}
|
||||
}
|
||||
|
||||
requirements {
|
||||
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||
}
|
||||
|
||||
failureConditions {
|
||||
failOnMetricChange {
|
||||
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
|
||||
threshold = 20
|
||||
units = BuildFailureOnMetric.MetricUnit.PERCENTS
|
||||
comparison = BuildFailureOnMetric.MetricComparison.LESS
|
||||
compareTo = build {
|
||||
buildRule = lastSuccessful()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
object TestsForIntelliJ20181 : TestsForIntelliJ_181_branch("2018.1")
|
||||
object TestsForIntelliJ20182 : TestsForIntelliJ_181_branch("2018.2")
|
63
.teamcity/_Self/buildTypes/TestsForIntelliJ_191-193.kt
vendored
Normal file
63
.teamcity/_Self/buildTypes/TestsForIntelliJ_191-193.kt
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
@file:Suppress("ClassName")
|
||||
|
||||
package _Self.buildTypes
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
|
||||
sealed class TestsForIntelliJ_191_193_branch(private val version: String) : BuildType({
|
||||
name = "Tests for IntelliJ $version"
|
||||
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_legacyNoJavaPlugin", "true")
|
||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-$version")
|
||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8")
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(_Self.vcsRoots.Branch_191_193)
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
gradle {
|
||||
tasks = "clean test"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
vcs {
|
||||
branchFilter = ""
|
||||
}
|
||||
}
|
||||
|
||||
requirements {
|
||||
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||
}
|
||||
|
||||
failureConditions {
|
||||
failOnMetricChange {
|
||||
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
|
||||
threshold = 20
|
||||
units = BuildFailureOnMetric.MetricUnit.PERCENTS
|
||||
comparison = BuildFailureOnMetric.MetricComparison.LESS
|
||||
compareTo = build {
|
||||
buildRule = lastSuccessful()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
object TestsForIntelliJ20191 : TestsForIntelliJ_191_193_branch("2019.1")
|
||||
object TestsForIntelliJ20192 : TestsForIntelliJ_191_193_branch("2019.2")
|
||||
object TestsForIntelliJ20193 : TestsForIntelliJ_191_193_branch("2019.3")
|
60
.teamcity/_Self/buildTypes/TestsForIntelliJ_201.kt
vendored
Normal file
60
.teamcity/_Self/buildTypes/TestsForIntelliJ_201.kt
vendored
Normal file
@@ -0,0 +1,60 @@
|
||||
@file:Suppress("ClassName")
|
||||
|
||||
package _Self.buildTypes
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
|
||||
sealed class TestsForIntelliJ_201_branch(private val version: String) : BuildType({
|
||||
name = "Tests for IntelliJ $version"
|
||||
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-$version")
|
||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8")
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(_Self.vcsRoots.Branch_201)
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
gradle {
|
||||
tasks = "clean test"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
vcs {
|
||||
branchFilter = ""
|
||||
}
|
||||
}
|
||||
|
||||
requirements {
|
||||
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||
}
|
||||
|
||||
failureConditions {
|
||||
failOnMetricChange {
|
||||
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
|
||||
threshold = 20
|
||||
units = BuildFailureOnMetric.MetricUnit.PERCENTS
|
||||
comparison = BuildFailureOnMetric.MetricComparison.LESS
|
||||
compareTo = build {
|
||||
buildRule = lastSuccessful()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
object TestsForIntelliJ20201 : TestsForIntelliJ_201_branch("2020.1")
|
60
.teamcity/_Self/buildTypes/TestsForIntelliJ_202.kt
vendored
Normal file
60
.teamcity/_Self/buildTypes/TestsForIntelliJ_202.kt
vendored
Normal file
@@ -0,0 +1,60 @@
|
||||
@file:Suppress("ClassName")
|
||||
|
||||
package _Self.buildTypes
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
|
||||
sealed class TestsForIntelliJ_202_branch(private val version: String) : BuildType({
|
||||
name = "Tests for IntelliJ $version"
|
||||
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-$version")
|
||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8")
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(_Self.vcsRoots.Branch_202)
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
gradle {
|
||||
tasks = "clean test"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
vcs {
|
||||
branchFilter = ""
|
||||
}
|
||||
}
|
||||
|
||||
requirements {
|
||||
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||
}
|
||||
|
||||
failureConditions {
|
||||
failOnMetricChange {
|
||||
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
|
||||
threshold = 20
|
||||
units = BuildFailureOnMetric.MetricUnit.PERCENTS
|
||||
comparison = BuildFailureOnMetric.MetricComparison.LESS
|
||||
compareTo = build {
|
||||
buildRule = lastSuccessful()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
object TestsForIntelliJ20202 : TestsForIntelliJ_202_branch("2020.2")
|
64
.teamcity/_Self/buildTypes/TestsForIntelliJ_203-212.kt
vendored
Normal file
64
.teamcity/_Self/buildTypes/TestsForIntelliJ_203-212.kt
vendored
Normal file
@@ -0,0 +1,64 @@
|
||||
@file:Suppress("ClassName")
|
||||
|
||||
package _Self.buildTypes
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
|
||||
sealed class TestsForIntelliJ_203_212_branch(private val version: String) : BuildType({
|
||||
name = "Tests for IntelliJ $version"
|
||||
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_legacyNoJavaPlugin", "true")
|
||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-$version")
|
||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8")
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(_Self.vcsRoots.Branch_203_212)
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
gradle {
|
||||
tasks = "clean test"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
vcs {
|
||||
branchFilter = ""
|
||||
}
|
||||
}
|
||||
|
||||
requirements {
|
||||
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||
}
|
||||
|
||||
failureConditions {
|
||||
failOnMetricChange {
|
||||
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
|
||||
threshold = 20
|
||||
units = BuildFailureOnMetric.MetricUnit.PERCENTS
|
||||
comparison = BuildFailureOnMetric.MetricComparison.LESS
|
||||
compareTo = build {
|
||||
buildRule = lastSuccessful()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
object TestsForIntelliJ20212 : TestsForIntelliJ_203_212_branch("2021.2.2")
|
||||
object TestsForIntelliJ20211 : TestsForIntelliJ_203_212_branch("2021.1")
|
||||
object TestsForIntelliJ20203 : TestsForIntelliJ_203_212_branch("2020.3")
|
62
.teamcity/_Self/buildTypes/TestsForIntelliJ_213-221.kt
vendored
Normal file
62
.teamcity/_Self/buildTypes/TestsForIntelliJ_213-221.kt
vendored
Normal file
@@ -0,0 +1,62 @@
|
||||
@file:Suppress("ClassName")
|
||||
|
||||
package _Self.buildTypes
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
|
||||
sealed class TestsForIntelliJ_213_221_branch(private val version: String) : BuildType({
|
||||
name = "Tests for IntelliJ $version"
|
||||
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_legacyNoJavaPlugin", "true")
|
||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-$version")
|
||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8")
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(_Self.vcsRoots.Branch_213_221)
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
gradle {
|
||||
tasks = "clean test"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
vcs {
|
||||
branchFilter = ""
|
||||
}
|
||||
}
|
||||
|
||||
requirements {
|
||||
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||
}
|
||||
|
||||
failureConditions {
|
||||
failOnMetricChange {
|
||||
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
|
||||
threshold = 20
|
||||
units = BuildFailureOnMetric.MetricUnit.PERCENTS
|
||||
comparison = BuildFailureOnMetric.MetricComparison.LESS
|
||||
compareTo = build {
|
||||
buildRule = lastSuccessful()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
object TestsForIntelliJ20213 : TestsForIntelliJ_213_221_branch("2021.3.2")
|
57
.teamcity/_Self/buildTypes/TestsForIntelliJ_222.kt
vendored
Normal file
57
.teamcity/_Self/buildTypes/TestsForIntelliJ_222.kt
vendored
Normal file
@@ -0,0 +1,57 @@
|
||||
@file:Suppress("ClassName")
|
||||
|
||||
package _Self.buildTypes
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
|
||||
sealed class TestsForIntelliJ_222_branch(private val version: String) : BuildType({
|
||||
name = "Tests for IntelliJ $version"
|
||||
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_legacyNoJavaPlugin", "true")
|
||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-$version")
|
||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(_Self.vcsRoots.Branch_222)
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
gradle {
|
||||
tasks = "clean test"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
vcs {
|
||||
branchFilter = ""
|
||||
}
|
||||
}
|
||||
|
||||
failureConditions {
|
||||
failOnMetricChange {
|
||||
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
|
||||
threshold = 20
|
||||
units = BuildFailureOnMetric.MetricUnit.PERCENTS
|
||||
comparison = BuildFailureOnMetric.MetricComparison.LESS
|
||||
compareTo = build {
|
||||
buildRule = lastSuccessful()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
object TestsForIntelliJ20222 : TestsForIntelliJ_222_branch("2022.2.3")
|
70
.teamcity/_Self/subprojects/GitHub.kt
vendored
70
.teamcity/_Self/subprojects/GitHub.kt
vendored
@@ -1,77 +1,11 @@
|
||||
package _Self.subprojects
|
||||
|
||||
import _Self.IdeaVimBuildType
|
||||
import _Self.vcsRoots.GitHubPullRequest
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import _Self.buildTypes.GithubTests
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.PullRequests
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.commitStatusPublisher
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.pullRequests
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.VcsTrigger
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
|
||||
object GitHub : Project({
|
||||
name = "Pull Requests checks"
|
||||
description = "Automatic checking of GitHub Pull Requests"
|
||||
|
||||
buildType(GithubBuildType("clean test -x :tests:property-tests:test -x :tests:long-running-tests:test", "Tests"))
|
||||
})
|
||||
|
||||
class GithubBuildType(command: String, desc: String) : IdeaVimBuildType({
|
||||
name = "GitHub Pull Requests $desc"
|
||||
description = "Test GitHub pull requests $desc"
|
||||
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(GitHubPullRequest)
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
branchFilter = """
|
||||
+:*
|
||||
-:<default>
|
||||
""".trimIndent()
|
||||
}
|
||||
|
||||
steps {
|
||||
gradle {
|
||||
tasks = command
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
jdkHome = "/usr/lib/jvm/java-21-amazon-corretto"
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
vcs {
|
||||
quietPeriodMode = VcsTrigger.QuietPeriodMode.USE_DEFAULT
|
||||
branchFilter = ""
|
||||
}
|
||||
}
|
||||
|
||||
features {
|
||||
pullRequests {
|
||||
provider = github {
|
||||
authType = token {
|
||||
token = "credentialsJSON:90f3b439-6e91-40f7-a086-d4dd8e0ea9b8"
|
||||
}
|
||||
filterTargetBranch = "refs/heads/master"
|
||||
filterAuthorRole = PullRequests.GitHubRoleFilter.EVERYBODY
|
||||
}
|
||||
}
|
||||
commitStatusPublisher {
|
||||
vcsRootExtId = "${GitHubPullRequest.id}"
|
||||
publisher = github {
|
||||
githubUrl = "https://api.github.com"
|
||||
authType = personalToken {
|
||||
token = "credentialsJSON:90f3b439-6e91-40f7-a086-d4dd8e0ea9b8"
|
||||
}
|
||||
}
|
||||
param("github_oauth_user", "AlexPl292")
|
||||
}
|
||||
}
|
||||
buildType(GithubTests)
|
||||
})
|
||||
|
35
.teamcity/_Self/subprojects/OldTests.kt
vendored
Normal file
35
.teamcity/_Self/subprojects/OldTests.kt
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
package _Self.subprojects
|
||||
|
||||
import _Self.buildTypes.TestsForIntelliJ20181
|
||||
import _Self.buildTypes.TestsForIntelliJ20182
|
||||
import _Self.buildTypes.TestsForIntelliJ20183
|
||||
import _Self.buildTypes.TestsForIntelliJ20191
|
||||
import _Self.buildTypes.TestsForIntelliJ20192
|
||||
import _Self.buildTypes.TestsForIntelliJ20193
|
||||
import _Self.buildTypes.TestsForIntelliJ20201
|
||||
import _Self.buildTypes.TestsForIntelliJ20202
|
||||
import _Self.buildTypes.TestsForIntelliJ20203
|
||||
import _Self.buildTypes.TestsForIntelliJ20211
|
||||
import _Self.buildTypes.TestsForIntelliJ20212
|
||||
import _Self.buildTypes.TestsForIntelliJ20213
|
||||
import _Self.buildTypes.TestsForIntelliJ20222
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
|
||||
|
||||
object OldTests : Project({
|
||||
name = "Old IdeaVim tests"
|
||||
description = "Tests for older versions of IJ"
|
||||
|
||||
buildType(TestsForIntelliJ20181)
|
||||
buildType(TestsForIntelliJ20182)
|
||||
buildType(TestsForIntelliJ20183)
|
||||
buildType(TestsForIntelliJ20191)
|
||||
buildType(TestsForIntelliJ20192)
|
||||
buildType(TestsForIntelliJ20193)
|
||||
buildType(TestsForIntelliJ20201)
|
||||
buildType(TestsForIntelliJ20202)
|
||||
buildType(TestsForIntelliJ20203)
|
||||
buildType(TestsForIntelliJ20211)
|
||||
buildType(TestsForIntelliJ20212)
|
||||
buildType(TestsForIntelliJ20213)
|
||||
buildType(TestsForIntelliJ20222)
|
||||
})
|
30
.teamcity/_Self/subprojects/Releases.kt
vendored
30
.teamcity/_Self/subprojects/Releases.kt
vendored
@@ -1,41 +1,15 @@
|
||||
package _Self.subprojects
|
||||
|
||||
import _Self.buildTypes.PublishVimEngine
|
||||
import _Self.buildTypes.Release
|
||||
import _Self.buildTypes.ReleaseDev
|
||||
import _Self.buildTypes.ReleaseEap
|
||||
import _Self.buildTypes.ReleaseMajor
|
||||
import _Self.buildTypes.ReleaseMinor
|
||||
import _Self.buildTypes.ReleasePatch
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.ParameterDisplay
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
|
||||
|
||||
object Releases : Project({
|
||||
name = "IdeaVim releases"
|
||||
description = "Stable and EAP releases for IdeaVim"
|
||||
|
||||
params {
|
||||
password(
|
||||
"env.CERTIFICATE_CHAIN",
|
||||
"credentialsJSON:1bab4a88-10e7-4bf9-856c-e6253499dc95",
|
||||
display = ParameterDisplay.HIDDEN
|
||||
)
|
||||
password(
|
||||
"env.PRIVATE_KEY_PASSWORD",
|
||||
"credentialsJSON:7c12c867-fe09-4a2f-884d-6fd0ec0a1e79",
|
||||
display = ParameterDisplay.HIDDEN
|
||||
)
|
||||
password(
|
||||
"env.PRIVATE_KEY",
|
||||
"credentialsJSON:5d8b553d-fd7e-4347-abd2-51d8d0f2b3f7",
|
||||
display = ParameterDisplay.HIDDEN
|
||||
)
|
||||
}
|
||||
|
||||
// buildType(Release)
|
||||
buildType(ReleaseMajor)
|
||||
buildType(ReleaseMinor)
|
||||
buildType(ReleasePatch)
|
||||
buildType(Release)
|
||||
buildType(ReleaseEap)
|
||||
buildType(ReleaseDev)
|
||||
buildType(PublishVimEngine)
|
||||
})
|
||||
|
12
.teamcity/_Self/vcsRoots/Branch_181.kt
vendored
Normal file
12
.teamcity/_Self/vcsRoots/Branch_181.kt
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
@file:Suppress("ClassName")
|
||||
|
||||
package _Self.vcsRoots
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
|
||||
|
||||
object Branch_181 : GitVcsRoot({
|
||||
name = "https://github.com/JetBrains/ideavim (branch 181)"
|
||||
url = "https://github.com/JetBrains/ideavim.git"
|
||||
branch = "181"
|
||||
useMirrors = false
|
||||
})
|
12
.teamcity/_Self/vcsRoots/Branch_183.kt
vendored
Normal file
12
.teamcity/_Self/vcsRoots/Branch_183.kt
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
@file:Suppress("ClassName")
|
||||
|
||||
package _Self.vcsRoots
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
|
||||
|
||||
object Branch_183 : GitVcsRoot({
|
||||
name = "https://github.com/JetBrains/ideavim (branch 183)"
|
||||
url = "https://github.com/JetBrains/ideavim.git"
|
||||
branch = "183"
|
||||
useMirrors = false
|
||||
})
|
12
.teamcity/_Self/vcsRoots/Branch_191_193.kt
vendored
Normal file
12
.teamcity/_Self/vcsRoots/Branch_191_193.kt
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
@file:Suppress("ClassName")
|
||||
|
||||
package _Self.vcsRoots
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
|
||||
|
||||
object Branch_191_193 : GitVcsRoot({
|
||||
name = "https://github.com/JetBrains/ideavim (branch 191-193)"
|
||||
url = "https://github.com/JetBrains/ideavim.git"
|
||||
branch = "191-193"
|
||||
useMirrors = false
|
||||
})
|
12
.teamcity/_Self/vcsRoots/Branch_201.kt
vendored
Normal file
12
.teamcity/_Self/vcsRoots/Branch_201.kt
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
@file:Suppress("ClassName")
|
||||
|
||||
package _Self.vcsRoots
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
|
||||
|
||||
object Branch_201 : GitVcsRoot({
|
||||
name = "https://github.com/JetBrains/ideavim (branch 201)"
|
||||
url = "https://github.com/JetBrains/ideavim.git"
|
||||
branch = "201"
|
||||
useMirrors = false
|
||||
})
|
12
.teamcity/_Self/vcsRoots/Branch_202.kt
vendored
Normal file
12
.teamcity/_Self/vcsRoots/Branch_202.kt
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
@file:Suppress("ClassName")
|
||||
|
||||
package _Self.vcsRoots
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
|
||||
|
||||
object Branch_202 : GitVcsRoot({
|
||||
name = "https://github.com/JetBrains/ideavim (branch 202)"
|
||||
url = "https://github.com/JetBrains/ideavim.git"
|
||||
branch = "202"
|
||||
useMirrors = false
|
||||
})
|
12
.teamcity/_Self/vcsRoots/Branch_203_212.kt
vendored
Normal file
12
.teamcity/_Self/vcsRoots/Branch_203_212.kt
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
@file:Suppress("ClassName")
|
||||
|
||||
package _Self.vcsRoots
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
|
||||
|
||||
object Branch_203_212 : GitVcsRoot({
|
||||
name = "https://github.com/JetBrains/ideavim (branch 203-212)"
|
||||
url = "https://github.com/JetBrains/ideavim.git"
|
||||
branch = "203-212"
|
||||
useMirrors = false
|
||||
})
|
12
.teamcity/_Self/vcsRoots/Branch_213_221.kt
vendored
Normal file
12
.teamcity/_Self/vcsRoots/Branch_213_221.kt
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
@file:Suppress("ClassName")
|
||||
|
||||
package _Self.vcsRoots
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
|
||||
|
||||
object Branch_213_221 : GitVcsRoot({
|
||||
id("HttpsGithubComJetBrainsIdeavimBranch213221")
|
||||
name = "https://github.com/JetBrains/ideavim (branch 213-221)"
|
||||
url = "https://github.com/JetBrains/ideavim.git"
|
||||
branch = "213-221"
|
||||
})
|
12
.teamcity/_Self/vcsRoots/Branch_222.kt
vendored
Normal file
12
.teamcity/_Self/vcsRoots/Branch_222.kt
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
@file:Suppress("ClassName")
|
||||
|
||||
package _Self.vcsRoots
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
|
||||
|
||||
object Branch_222 : GitVcsRoot({
|
||||
id("HttpsGithubComJetBrainsIdeavimBranch222")
|
||||
name = "https://github.com/JetBrains/ideavim (branch 222)"
|
||||
url = "https://github.com/JetBrains/ideavim.git"
|
||||
branch = "222"
|
||||
})
|
11
.teamcity/_Self/vcsRoots/Branch_Release.kt
vendored
Normal file
11
.teamcity/_Self/vcsRoots/Branch_Release.kt
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
@file:Suppress("ClassName")
|
||||
|
||||
package _Self.vcsRoots
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
|
||||
|
||||
object Branch_Release : GitVcsRoot({
|
||||
name = "https://github.com/JetBrains/ideavim (branch release)"
|
||||
url = "https://github.com/JetBrains/ideavim.git"
|
||||
branch = "release"
|
||||
})
|
@@ -7,6 +7,6 @@ object GitHubPullRequest : GitVcsRoot({
|
||||
url = "git@github.com:JetBrains/ideavim.git"
|
||||
branchSpec = "+:refs/(pull/*)/head"
|
||||
authMethod = uploadedKey {
|
||||
uploadedKey = "IdeaVim ssh keys"
|
||||
uploadedKey = "Alex Plate TeamCity key"
|
||||
}
|
||||
})
|
||||
|
13
.teamcity/_Self/vcsRoots/Releases.kt
vendored
13
.teamcity/_Self/vcsRoots/Releases.kt
vendored
@@ -1,13 +0,0 @@
|
||||
package _Self.vcsRoots
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
|
||||
|
||||
object ReleasesVcsRoot : GitVcsRoot({
|
||||
name = "IdeaVim Releases"
|
||||
url = "git@github.com:JetBrains/ideavim.git"
|
||||
branch = "refs/heads/master"
|
||||
branchSpec = "+:refs/(*)"
|
||||
authMethod = uploadedKey {
|
||||
uploadedKey = "IdeaVim ssh keys"
|
||||
}
|
||||
})
|
65
.teamcity/patches/buildTypes/IdeaVimCompatibility.kts
vendored
Normal file
65
.teamcity/patches/buildTypes/IdeaVimCompatibility.kts
vendored
Normal file
@@ -0,0 +1,65 @@
|
||||
package patches.buildTypes
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.*
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.ScriptBuildStep
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.ui.*
|
||||
|
||||
/*
|
||||
This patch script was generated by TeamCity on settings change in UI.
|
||||
To apply the patch, change the buildType with id = 'IdeaVimCompatibility'
|
||||
accordingly, and delete the patch script.
|
||||
*/
|
||||
changeBuildType(RelativeId("IdeaVimCompatibility")) {
|
||||
vcs {
|
||||
remove(DslContext.settingsRoot.id!!)
|
||||
}
|
||||
|
||||
expectSteps {
|
||||
script {
|
||||
name = "Check"
|
||||
scriptContent = """
|
||||
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}org.jetbrains.IdeaVim-EasyMotion' [latest-IU] -team-city
|
||||
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}io.github.mishkun.ideavimsneak' [latest-IU] -team-city
|
||||
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}eu.theblob42.idea.whichkey' [latest-IU] -team-city
|
||||
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}IdeaVimExtension' [latest-IU] -team-city
|
||||
# Outdated java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}github.zgqq.intellij-enhance' [latest-IU] -team-city
|
||||
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}com.github.copilot' [latest-IU] -team-city
|
||||
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}com.github.dankinsoid.multicursor' [latest-IU] -team-city
|
||||
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}com.joshestein.ideavim-quickscope' [latest-IU] -team-city
|
||||
""".trimIndent()
|
||||
}
|
||||
}
|
||||
steps {
|
||||
update<ScriptBuildStep>(0) {
|
||||
name = "Load Verifier"
|
||||
clearConditions()
|
||||
scriptContent = """
|
||||
mkdir verifier1
|
||||
curl -f -L -o verifier1/verifier-cli-dev-all-1.jar "https://packages.jetbrains.team/files/p/ideavim/plugin-verifier/verifier-cli-dev-all-1.jar"
|
||||
""".trimIndent()
|
||||
}
|
||||
insert(1) {
|
||||
script {
|
||||
name = "Check"
|
||||
scriptContent = """
|
||||
# We use a custom build of verifier that downloads IdeaVim from dev channel
|
||||
# To create a custom build: Download plugin verifier repo, add an if that switches to dev channel for IdeaVim repo
|
||||
# At the moment it's com.jetbrains.pluginverifier.repository.repositories.marketplace.MarketplaceRepository#getLastCompatibleVersionOfPlugin
|
||||
# Build using gradlew :intellij-plugin-verifier:verifier-cli:shadowJar
|
||||
# Upload verifier-cli-dev-all.jar artifact to the repo in IdeaVim space repo
|
||||
|
||||
java --version
|
||||
java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}org.jetbrains.IdeaVim-EasyMotion' [latest-IU] -team-city
|
||||
java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}io.github.mishkun.ideavimsneak' [latest-IU] -team-city
|
||||
java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}eu.theblob42.idea.whichkey' [latest-IU] -team-city
|
||||
java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}IdeaVimExtension' [latest-IU] -team-city
|
||||
# Outdated java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}github.zgqq.intellij-enhance' [latest-IU] -team-city
|
||||
java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}com.github.copilot' [latest-IU] -team-city
|
||||
java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}com.github.dankinsoid.multicursor' [latest-IU] -team-city
|
||||
java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}com.joshestein.ideavim-quickscope' [latest-IU] -team-city
|
||||
""".trimIndent()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,20 +0,0 @@
|
||||
package patches.buildTypes
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.*
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.ui.*
|
||||
|
||||
/*
|
||||
This patch script was generated by TeamCity on settings change in UI.
|
||||
To apply the patch, change the buildType with id = 'IdeaVimTests_Latest_EAP_With_Xorg'
|
||||
accordingly, and delete the patch script.
|
||||
*/
|
||||
changeBuildType(RelativeId("IdeaVimTests_Latest_EAP_With_Xorg")) {
|
||||
requirements {
|
||||
add {
|
||||
matches("teamcity.agent.jvm.os.family", "Linux")
|
||||
}
|
||||
add {
|
||||
exists("env.DISPLAY")
|
||||
}
|
||||
}
|
||||
}
|
101
.teamcity/patches/buildTypes/Qodana.kts
vendored
Normal file
101
.teamcity/patches/buildTypes/Qodana.kts
vendored
Normal file
@@ -0,0 +1,101 @@
|
||||
package patches.buildTypes
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.*
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.Qodana
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.qodana
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.ScheduleTrigger
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.VcsTrigger
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.ui.*
|
||||
|
||||
/*
|
||||
This patch script was generated by TeamCity on settings change in UI.
|
||||
To apply the patch, change the buildType with id = 'Qodana'
|
||||
accordingly, and delete the patch script.
|
||||
*/
|
||||
changeBuildType(RelativeId("Qodana")) {
|
||||
expectSteps {
|
||||
qodana {
|
||||
name = "Qodana"
|
||||
linter = jvm {
|
||||
version = Qodana.JVMVersion.LATEST
|
||||
}
|
||||
param("clonefinder-enable", "true")
|
||||
param("clonefinder-languages", "Java")
|
||||
param("clonefinder-languages-container", "Java Kotlin")
|
||||
param("clonefinder-mode", "")
|
||||
param("clonefinder-queried-project", "src")
|
||||
param("clonefinder-reference-projects", "src")
|
||||
param("licenseaudit-enable", "true")
|
||||
param("namesAndTagsCustom", "repo.labs.intellij.net/static-analyser/qodana")
|
||||
param("report-version", "")
|
||||
param("yaml-configuration", "")
|
||||
}
|
||||
}
|
||||
steps {
|
||||
insert(0) {
|
||||
gradle {
|
||||
name = "Generate grammar"
|
||||
tasks = "generateGrammarSource"
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
update<Qodana>(1) {
|
||||
clearConditions()
|
||||
reportAsTests = true
|
||||
additionalDockerArguments = "-e QODANA_TOKEN=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJvcmdhbml6YXRpb24iOiIzUFZrQSIsInByb2plY3QiOiIzN1FlQSIsInRva2VuIjoiM0t2bXoifQ.uohp81tM7iAfvvB6k8faarfpV-OjusAaEbWQ8iNrOgs"
|
||||
additionalQodanaArguments = "--baseline qodana.sarif.json"
|
||||
param("clonefinder-languages", "")
|
||||
param("collect-anonymous-statistics", "")
|
||||
param("licenseaudit-enable", "")
|
||||
param("clonefinder-languages-container", "")
|
||||
param("clonefinder-queried-project", "")
|
||||
param("clonefinder-enable", "")
|
||||
param("clonefinder-reference-projects", "")
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
val trigger1 = find<VcsTrigger> {
|
||||
vcs {
|
||||
branchFilter = ""
|
||||
}
|
||||
}
|
||||
trigger1.apply {
|
||||
enabled = false
|
||||
|
||||
}
|
||||
val trigger2 = find<ScheduleTrigger> {
|
||||
schedule {
|
||||
schedulingPolicy = weekly {
|
||||
dayOfWeek = ScheduleTrigger.DAY.Tuesday
|
||||
}
|
||||
branchFilter = ""
|
||||
triggerBuild = always()
|
||||
}
|
||||
}
|
||||
trigger2.apply {
|
||||
enabled = false
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
failureConditions {
|
||||
val feature1 = find<BuildFailureOnMetric> {
|
||||
failOnMetricChange {
|
||||
metric = BuildFailureOnMetric.MetricType.QODANA_TOTAL_PROBLEMS_COUNT
|
||||
threshold = 0
|
||||
units = BuildFailureOnMetric.MetricUnit.DEFAULT_UNIT
|
||||
comparison = BuildFailureOnMetric.MetricComparison.MORE
|
||||
compareTo = value()
|
||||
}
|
||||
}
|
||||
feature1.apply {
|
||||
param("metricKey", "QodanaProblemsNew")
|
||||
}
|
||||
}
|
||||
}
|
48
.teamcity/patches/buildTypes/Release.kts
vendored
Normal file
48
.teamcity/patches/buildTypes/Release.kts
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
package patches.buildTypes
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.*
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.GradleBuildStep
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.ui.*
|
||||
|
||||
/*
|
||||
This patch script was generated by TeamCity on settings change in UI.
|
||||
To apply the patch, change the buildType with id = 'Release'
|
||||
accordingly, and delete the patch script.
|
||||
*/
|
||||
changeBuildType(RelativeId("Release")) {
|
||||
params {
|
||||
add {
|
||||
password("env.ORG_GRADLE_PROJECT_youtrackToken", "credentialsJSON:3cd3e867-282c-451f-b958-bc95d56a8450", display = ParameterDisplay.HIDDEN)
|
||||
}
|
||||
}
|
||||
|
||||
expectSteps {
|
||||
gradle {
|
||||
tasks = "clean publishPlugin slackNotification"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
steps {
|
||||
update<GradleBuildStep>(0) {
|
||||
clearConditions()
|
||||
tasks = "clean publishPlugin"
|
||||
}
|
||||
insert(1) {
|
||||
gradle {
|
||||
name = "Run Integrations"
|
||||
tasks = "releaseActions"
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
insert(2) {
|
||||
gradle {
|
||||
name = "Slack Notification"
|
||||
tasks = "slackNotification"
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
27
.teamcity/patches/buildTypes/ReleaseEap.kts
vendored
Normal file
27
.teamcity/patches/buildTypes/ReleaseEap.kts
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
package patches.buildTypes
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.*
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.VcsLabeling
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.vcsLabeling
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.ui.*
|
||||
|
||||
/*
|
||||
This patch script was generated by TeamCity on settings change in UI.
|
||||
To apply the patch, change the buildType with id = 'ReleaseEap'
|
||||
accordingly, and delete the patch script.
|
||||
*/
|
||||
changeBuildType(RelativeId("ReleaseEap")) {
|
||||
features {
|
||||
val feature1 = find<VcsLabeling> {
|
||||
vcsLabeling {
|
||||
vcsRootId = "${DslContext.settingsRoot.id}"
|
||||
labelingPattern = "%system.build.number%"
|
||||
successfulOnly = true
|
||||
branchFilter = ""
|
||||
}
|
||||
}
|
||||
feature1.apply {
|
||||
successfulOnly = false
|
||||
}
|
||||
}
|
||||
}
|
50
.teamcity/patches/projects/_Self.kts
vendored
Normal file
50
.teamcity/patches/projects/_Self.kts
vendored
Normal file
@@ -0,0 +1,50 @@
|
||||
package patches.projects
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.*
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.AmazonEC2CloudImage
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.amazonEC2CloudImage
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.ui.*
|
||||
|
||||
/*
|
||||
This patch script was generated by TeamCity on settings change in UI.
|
||||
To apply the patch, change the root project
|
||||
accordingly, and delete the patch script.
|
||||
*/
|
||||
changeProject(DslContext.projectId) {
|
||||
features {
|
||||
val feature1 = find<AmazonEC2CloudImage> {
|
||||
amazonEC2CloudImage {
|
||||
id = "PROJECT_EXT_768"
|
||||
profileId = "amazon-48"
|
||||
agentPoolId = "41"
|
||||
name = "BuildAgentsIdeaVim"
|
||||
vpcSubnetId = "subnet-58839511"
|
||||
keyPairName = ""
|
||||
instanceType = "c5d.xlarge"
|
||||
securityGroups = listOf("sg-eda08696", "sg-7332cf0f")
|
||||
useSpotInstances = true
|
||||
instanceTags = mapOf(
|
||||
"project" to "idea-vim"
|
||||
)
|
||||
source = Source("ami-0fa17ce8238eb8868")
|
||||
param("image-instances-limit", "")
|
||||
param("spot-instance-price", "")
|
||||
}
|
||||
}
|
||||
feature1.apply {
|
||||
profileId = "amazon-48"
|
||||
agentPoolId = "41"
|
||||
name = "BuildAgentsIdeaVim"
|
||||
vpcSubnetId = "subnet-58839511"
|
||||
keyPairName = ""
|
||||
instanceType = "c5d.xlarge"
|
||||
securityGroups = listOf("sg-eda08696", "sg-7332cf0f")
|
||||
useSpotInstances = true
|
||||
instanceTags = mapOf(
|
||||
"project" to "idea-vim"
|
||||
)
|
||||
source = Source("ami-07c529efaddafcf86")
|
||||
}
|
||||
}
|
||||
}
|
2
.teamcity/pom.xml
vendored
2
.teamcity/pom.xml
vendored
@@ -22,7 +22,7 @@
|
||||
</repository>
|
||||
<repository>
|
||||
<id>teamcity-server</id>
|
||||
<url>https://ideavim.teamcity.com/app/dsl-plugins-repository</url>
|
||||
<url>https://teamcity.jetbrains.com/app/dsl-plugins-repository</url>
|
||||
<snapshots>
|
||||
<enabled>true</enabled>
|
||||
</snapshots>
|
||||
|
5
.teamcity/settings.kts
vendored
5
.teamcity/settings.kts
vendored
@@ -1,5 +1,4 @@
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.project
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.version
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.*
|
||||
|
||||
/*
|
||||
The settings script is an entry point for defining a single
|
||||
@@ -30,5 +29,5 @@ node (Plugins -> teamcity-configs -> teamcity-configs:generate),
|
||||
the 'Debug' option is available in the context menu for the task.
|
||||
*/
|
||||
|
||||
version = "2024.12"
|
||||
version = "2020.2"
|
||||
project(_Self.Project)
|
183
AUTHORS.md
183
AUTHORS.md
@@ -26,13 +26,6 @@ Previous maintainers:
|
||||
|
||||
Andrey Vlasovskikh
|
||||
|
||||
Previous support members:
|
||||
|
||||
* [![icon][mail]](mailto:lejia.chen@jetbrains.com)
|
||||
[![icon][github-off]](#)
|
||||
|
||||
Lejia Chen
|
||||
|
||||
Contributors:
|
||||
|
||||
* [![icon][mail]](mailto:yole@jetbrains.com)
|
||||
@@ -462,182 +455,6 @@ Contributors:
|
||||
[![icon][github]](https://github.com/adaext)
|
||||
|
||||
Ada
|
||||
* [![icon][mail]](mailto:dominic.palmer@outlook.com)
|
||||
[![icon][github]](https://github.com/dominicpalmer)
|
||||
|
||||
Dominic Palmer
|
||||
* [![icon][mail]](mailto:kawagh.dev@gmail.com)
|
||||
[![icon][github]](https://github.com/kawagh)
|
||||
|
||||
kawagh
|
||||
* [![icon][mail]](mailto:78074243+danisevas@users.noreply.github.com)
|
||||
[![icon][github]](https://github.com/danisevas)
|
||||
|
||||
Dani Sevastianov
|
||||
* [![icon][mail]](mailto:oskar.persson@polken.se)
|
||||
[![icon][github]](https://github.com/oskarpersson/)
|
||||
|
||||
Oskar Persson
|
||||
* [![icon][mail]](mailto:silence.m@hotmail.com)
|
||||
[![icon][github]](https://github.com/Stzx)
|
||||
|
||||
Silence Tai
|
||||
* [![icon][mail]](mailto:tszsumng90@gmail.com)
|
||||
[![icon][github]](https://github.com/samabcde)
|
||||
|
||||
Sam Ng
|
||||
* [![icon][mail]](mailto:ludwig.valda.vasquez@jetbrains.com)
|
||||
[![icon][github]](https://github.com/ludwig-jb)
|
||||
|
||||
ludwig-jb
|
||||
* [![icon][mail]](mailto:pvydmuch@gmail.com)
|
||||
[![icon][github]](https://github.com/pWydmuch)
|
||||
|
||||
pWydmuch
|
||||
* [![icon][mail]](mailto:leonid989@gmail.com)
|
||||
[![icon][github]](https://github.com/Infonautica)
|
||||
|
||||
Leonid Danilov
|
||||
* [![icon][mail]](mailto:emanuel-367@hotmail.com)
|
||||
[![icon][github]](https://github.com/emanuelgestosa)
|
||||
|
||||
Emanuel Gestosa
|
||||
* [![icon][mail]](mailto:81118900+lippfi@users.noreply.github.com)
|
||||
[![icon][github]](https://github.com/lippfi)
|
||||
|
||||
lippfi
|
||||
* [![icon][mail]](mailto:fillipser143@gmail.com)
|
||||
[![icon][github]](https://github.com/Parker7123)
|
||||
|
||||
FilipParker
|
||||
* [![icon][mail]](mailto:7138209+duhaesbaert@users.noreply.github.com)
|
||||
[![icon][github]](https://github.com/duhaesbaert)
|
||||
|
||||
Eduardo Haesbaert
|
||||
* [![icon][mail]](mailto:nikolaevsky.egor@gmail.com)
|
||||
[![icon][github]](https://github.com/Aisper)
|
||||
|
||||
Egor Nikolaevsky
|
||||
* [![icon][mail]](mailto:77796630+throwaway69420-69420@users.noreply.github.com)
|
||||
[![icon][github]](https://github.com/kun-codes)
|
||||
|
||||
Bishwa Saha
|
||||
* [![icon][mail]](mailto:alexfu@fastmail.com)
|
||||
[![icon][github]](https://github.com/alexfu)
|
||||
|
||||
Alex Fu
|
||||
* [![icon][mail]](mailto:jakepeters199@hotmail.com)
|
||||
[![icon][github]](https://github.com/LazyScaper)
|
||||
|
||||
Jake
|
||||
* [![icon][mail]](mailto:the1xdeveloper@gmail.com)
|
||||
[![icon][github]](https://github.com/The1xDeveloper)
|
||||
|
||||
The1xDeveloper
|
||||
* [![icon][mail]](mailto:shaunewilliams@gmail.com)
|
||||
[![icon][github]](https://github.com/shaunlebron)
|
||||
|
||||
shaun
|
||||
* [![icon][mail]](mailto:i.i.babko@gmail.com)
|
||||
[![icon][github]](https://github.com/igorbabko)
|
||||
|
||||
Igor Babko
|
||||
* [![icon][mail]](mailto:533601+felixwiemuth@users.noreply.github.com)
|
||||
[![icon][github]](https://github.com/felixwiemuth)
|
||||
|
||||
Felix Wiemuth
|
||||
* [![icon][mail]](mailto:kirill.karnaukhov@jetbrains.com)
|
||||
[![icon][github]](https://github.com/kkarnauk)
|
||||
|
||||
Kirill Karnaukhov
|
||||
* [![icon][mail]](mailto:sander.hestvik@gmail.com)
|
||||
[![icon][github]](https://github.com/SanderHestvik)
|
||||
|
||||
SanderHestvik
|
||||
* [![icon][mail]](mailto:gregory.shrago@jetbrains.com)
|
||||
[![icon][github]](https://github.com/gregsh)
|
||||
|
||||
Greg Shrago
|
||||
* [![icon][mail]](mailto:jphalip@gmail.com)
|
||||
[![icon][github]](https://github.com/jphalip)
|
||||
|
||||
Julien Phalip
|
||||
* [![icon][mail]](mailto:j.trimailovas@gmail.com)
|
||||
[![icon][github]](https://github.com/trimailov)
|
||||
|
||||
Justas Trimailovas
|
||||
* [![icon][mail]](mailto:justast@wix.com)
|
||||
[![icon][github]](https://github.com/justast-wix)
|
||||
|
||||
Justas Trimailovas
|
||||
* [![icon][mail]](mailto:wangxinhe06@gmail.com)
|
||||
[![icon][github]](https://github.com/wxh06)
|
||||
|
||||
Xinhe Wang
|
||||
* [![icon][mail]](mailto:vladimir.parfinenko@jetbrains.com)
|
||||
[![icon][github]](https://github.com/cypok)
|
||||
|
||||
Vladimir Parfinenko
|
||||
* [![icon][mail]](mailto:sdoerner@google.com)
|
||||
[![icon][github]](https://github.com/sdoerner)
|
||||
|
||||
Sebastian Dörner
|
||||
* [![icon][mail]](mailto:ocordova@pulsarml.com)
|
||||
[![icon][github]](https://github.com/oca159)
|
||||
|
||||
Osvaldo
|
||||
* [![icon][mail]](mailto:nath@squareup.com)
|
||||
[![icon][github]](https://github.com/nath)
|
||||
|
||||
Nath Tumlin
|
||||
* [![icon][mail]](mailto:ilya.usov@jetbrains.com)
|
||||
[![icon][github]](https://github.com/Iliya-usov)
|
||||
|
||||
Ilya Usov
|
||||
* [![icon][mail]](mailto:peterHoburg@users.noreply.github.com)
|
||||
[![icon][github]](https://github.com/peterHoburg)
|
||||
|
||||
Peter Hoburg
|
||||
* [![icon][mail]](mailto:erotourtes@gmail.com)
|
||||
[![icon][github]](https://github.com/erotourtes)
|
||||
|
||||
Max Siryk
|
||||
* [![icon][mail]](mailto:ivan.yarkov@jetbrains.com)
|
||||
[![icon][github]](https://github.com/MToolMakerJB)
|
||||
|
||||
Ivan Yarkov
|
||||
* [![icon][mail]](mailto:mia.vucinic@jetbrains.com)
|
||||
[![icon][github]](https://github.com/vumi19)
|
||||
|
||||
Mia Vucinic
|
||||
* [![icon][mail]](mailto:canava.thomas@gmail.com)
|
||||
[![icon][github]](https://github.com/Malandril)
|
||||
|
||||
Thomas Canava
|
||||
* [![icon][mail]](mailto:xinhe.wang@jetbrains.com)
|
||||
[![icon][github]](https://github.com/wxh06)
|
||||
|
||||
Xinhe Wang
|
||||
* [![icon][mail]](mailto:zuber.kuba@gmail.com)
|
||||
[![icon][github]](https://github.com/zuberol)
|
||||
|
||||
Jakub Zuber
|
||||
* [![icon][mail]](mailto:nmh9097@gmail.com)
|
||||
[![icon][github]](https://github.com/NaMinhyeok)
|
||||
|
||||
Na Minhyeok
|
||||
* [![icon][mail]](mailto:201638009+jetbrains-junie[bot]@users.noreply.github.com)
|
||||
[![icon][github]](https://github.com/apps/jetbrains-junie)
|
||||
|
||||
jetbrains-junie[bot]
|
||||
* [![icon][mail]](mailto:4416693+magidc@users.noreply.github.com)
|
||||
[![icon][github]](https://github.com/magidc)
|
||||
|
||||
magidc
|
||||
* [![icon][mail]](mailto:ricardo.rodcas@gmail.com)
|
||||
[![icon][github]](https://github.com/magidc)
|
||||
|
||||
magidc
|
||||
|
||||
Previous contributors:
|
||||
|
||||
|
188
CHANGES.md
188
CHANGES.md
@@ -23,189 +23,7 @@ It is important to distinguish EAP from traditional pre-release software.
|
||||
Please note that the quality of EAP versions may at times be way below even
|
||||
usual beta standards.
|
||||
|
||||
## End of changelog file maintenance
|
||||
|
||||
Since version 2.9.0, the changelog can be found on YouTrack
|
||||
|
||||
* [To Be Released](https://youtrack.jetbrains.com/issues/VIM?q=%23%7BReady%20To%20Release%7D%20)
|
||||
* [Version Fixes](https://youtrack.jetbrains.com/issues/VIM?q=State:%20Fixed%20sort%20by:%20%7BFix%20versions%7D%20asc)
|
||||
|
||||
## 2.9.0, 2024-02-20
|
||||
|
||||
### Fixes:
|
||||
* [VIM-3055](https://youtrack.jetbrains.com/issue/VIM-3055) Fix the issue with double deleting after dot
|
||||
|
||||
### Merged PRs:
|
||||
* [805](https://github.com/JetBrains/ideavim/pull/805) by [chylex](https://github.com/chylex): VIM-3238 Fix recording a macro that replays another macro
|
||||
|
||||
## 2.8.0, 2024-01-30
|
||||
|
||||
### Fixes:
|
||||
* [VIM-3130](https://youtrack.jetbrains.com/issue/VIM-3130) Change the build version to 2023.1.2
|
||||
* [VIM-3168](https://youtrack.jetbrains.com/issue/VIM-3168) Do not switch to block caret after enter if the IdeaVim is disabled
|
||||
* [VIM-3165](https://youtrack.jetbrains.com/issue/VIM-3165) Do not process enter key as IdeaVim shortcut if it's not an actual keypress
|
||||
* [VIM-3159](https://youtrack.jetbrains.com/issue/VIM-3159) Shift-enter now works in normal mode again
|
||||
* [VIM-3157](https://youtrack.jetbrains.com/issue/VIM-3157) Do not invoke enter in invokeLater for python console
|
||||
* [VIM-3195](https://youtrack.jetbrains.com/issue/VIM-3195) Fix escape in injected editor
|
||||
* [VIM-3190](https://youtrack.jetbrains.com/issue/VIM-3190) Do not use octopus handler if the enter key is used with modifiers like shift or control
|
||||
* [VIM-3203](https://youtrack.jetbrains.com/issue/VIM-3203) Split action not works in normal mode
|
||||
* [VIM-3184](https://youtrack.jetbrains.com/issue/VIM-3184) Revert "VIM-3184: Temporally disable new handlers for the thin client"
|
||||
* [VIM-3186](https://youtrack.jetbrains.com/issue/VIM-3186) Do not multiply the enter action by the amount of carets
|
||||
* [VIM-3177](https://youtrack.jetbrains.com/issue/VIM-3177) Formatting of commit message works again
|
||||
* [VIM-1611](https://youtrack.jetbrains.com/issue/VIM-1611) actions related to resolving conflicts doesn't seem to work
|
||||
* [VIM-3204](https://youtrack.jetbrains.com/issue/VIM-3204) Add checker that verifies the configuratin of the keymap
|
||||
* [VIM-3084](https://youtrack.jetbrains.com/issue/VIM-3084) Double update for the status bar icon
|
||||
* [VIM-3176](https://youtrack.jetbrains.com/issue/VIM-3176) Reselecting visual selection after pasting above it select wrong lines
|
||||
* [VIM-3206](https://youtrack.jetbrains.com/issue/VIM-3206) Disable both copilot suggestion and insert mode on a single escape
|
||||
* [VIM-3090](https://youtrack.jetbrains.com/issue/VIM-3090) Cmd line mode saves the visual mode
|
||||
* [VIM-3085](https://youtrack.jetbrains.com/issue/VIM-3085) Open access to VimTypedActionHandler and VimShortcutKeyAction
|
||||
* [VIM-3260](https://youtrack.jetbrains.com/issue/VIM-3260) Processing the offsets at the file end
|
||||
* [VIM-3183](https://youtrack.jetbrains.com/issue/VIM-3183) Execute .ideavimrc on pooled thread
|
||||
|
||||
### Merged PRs:
|
||||
* [763](https://github.com/JetBrains/ideavim/pull/763) by [Sam Ng](https://github.com/samabcde): Fix(VIM-3176) add test for restore selection after pasting in/below s…
|
||||
* [772](https://github.com/JetBrains/ideavim/pull/772) by [chylex](https://github.com/chylex): Prevent code completion popup from appearing after running a macro
|
||||
* [787](https://github.com/JetBrains/ideavim/pull/787) by [Leonid Danilov](https://github.com/Infonautica): Added "Which-Key" to Plugins
|
||||
* [778](https://github.com/JetBrains/ideavim/pull/778) by [lippfi](https://github.com/lippfi): Showmode
|
||||
* [788](https://github.com/JetBrains/ideavim/pull/788) by [Matt Ellis](https://github.com/citizenmatt): Refactor VimOptionGroupBase
|
||||
|
||||
## 2.7.0, 2023-11-07
|
||||
|
||||
### Fixes:
|
||||
* [VIM-2933](https://youtrack.jetbrains.com/issue/VIM-2933) Reloading/sourcing .ideavimrc does not initialize new plugins
|
||||
* [VIM-3138](https://youtrack.jetbrains.com/issue/VIM-3138) Do not try to register disposer if the caret is already disposed
|
||||
|
||||
### Merged PRs:
|
||||
* [734](https://github.com/JetBrains/ideavim/pull/734) by [Matt Ellis](https://github.com/citizenmatt): Support `~/` on Windows
|
||||
* [736](https://github.com/JetBrains/ideavim/pull/736) by [chylex](https://github.com/chylex): Fix(VIM-2933): Reloading/sourcing .ideavimrc does not initialize new plugins
|
||||
|
||||
## 2.6.3, 2023-10-30
|
||||
|
||||
### Changes:
|
||||
- 2.6.0 and 2.6.1 releases are broken. Version 2.6.3 reverts IdeaVim plugin to the working state as for 2.5.1.
|
||||
|
||||
## 2.6.0, 2023-10-27
|
||||
|
||||
This version of IdeaVim contains a lot of issues. Version 2.6.3 reverts these changes.
|
||||
|
||||
### Features:
|
||||
|
||||
* `ShowHoverInfo` action can be used in mappings to open a tooltip that is shown by
|
||||
mouse hovering | [VIM-2106](https://youtrack.jetbrains.com/issue/VIM-2106)
|
||||
* `has` Vim Script function supports the most common OS checks: win32, win64, linux, mac, macunix, osx, osxdarwin, bsd, sun, unix
|
||||
* See https://github.com/JetBrains/ideavim#vim-script for details about Vim Script
|
||||
|
||||
### Fixes:
|
||||
* [VIM-3060](https://youtrack.jetbrains.com/issue/VIM-3060) Clipboard interaction stopped working
|
||||
* [VIM-3095](https://youtrack.jetbrains.com/issue/VIM-3095) Fix missing ellipsis digraph
|
||||
* [VIM-2562](https://youtrack.jetbrains.com/issue/VIM-2562) Fix hang with multi-width chars in command line
|
||||
* [VIM-696](https://youtrack.jetbrains.com/issue/VIM-696) Vim selection issue after undo
|
||||
* [VIM-1639](https://youtrack.jetbrains.com/issue/VIM-1639) Ctrl-o and Ctrl-i jumping in files of different projects
|
||||
|
||||
### Merged PRs:
|
||||
* [697](https://github.com/JetBrains/ideavim/pull/697) by [Matt Ellis](https://github.com/citizenmatt): Support per-window "global" values for local-to-window options
|
||||
* [717](https://github.com/JetBrains/ideavim/pull/717) by [Matt Ellis](https://github.com/citizenmatt): Fix(VIM-2562): Fix hang with multi-width chars in command line
|
||||
* [732](https://github.com/JetBrains/ideavim/pull/732) by [pWydmuch](https://github.com/pWydmuch): Fix md links in doc
|
||||
* [733](https://github.com/JetBrains/ideavim/pull/733) by [Matt Ellis](https://github.com/citizenmatt): Add support for ShowHoverInfo action to 2023.1 and 2023.2
|
||||
* [729](https://github.com/JetBrains/ideavim/pull/729) by [chylex](https://github.com/chylex): Add operating system type to `has()` function
|
||||
* [726](https://github.com/JetBrains/ideavim/pull/726) by [Matt Ellis](https://github.com/citizenmatt): Fix range for fall back comment mode
|
||||
|
||||
## 2.5.0, 2023-09-01
|
||||
|
||||
### Fixes:
|
||||
* [VIM-802](https://youtrack.jetbrains.com/issue/VIM-802) IdeaVim vs. Vim: discrepancies in using registers
|
||||
* [VIM-2246](https://youtrack.jetbrains.com/issue/VIM-2246) X11/Xorg Primary selection register "* not supported
|
||||
* [VIM-2313](https://youtrack.jetbrains.com/issue/VIM-2313)
|
||||
[VIM-2318](https://youtrack.jetbrains.com/issue/VIM-2318)
|
||||
[VIM-2666](https://youtrack.jetbrains.com/issue/VIM-2666)
|
||||
[VIM-2951](https://youtrack.jetbrains.com/issue/VIM-2951)
|
||||
IdeaVim works correctly in read-only editors like log or tests output.
|
||||
|
||||
### Merged PRs:
|
||||
* [666](https://github.com/JetBrains/ideavim/pull/666) by [Matt Ellis](https://github.com/citizenmatt): Improve formatting of `:set` command output
|
||||
* [667](https://github.com/JetBrains/ideavim/pull/667) by [Matt Ellis](https://github.com/citizenmatt): Eagerly initialise local options and introduce option scope
|
||||
* [672](https://github.com/JetBrains/ideavim/pull/672) by [Matt Ellis](https://github.com/citizenmatt): Fix issue adding back hidden status bar widget
|
||||
* [668](https://github.com/JetBrains/ideavim/pull/668) by [ludwig-jb](https://github.com/ludwig-jb): Handle unicode grapheme clusters
|
||||
|
||||
## 2.4.0, 2023-07-18
|
||||
|
||||
### Fixes:
|
||||
* [VIM-2975](https://youtrack.jetbrains.com/issue/VIM-2975) Fix the offset after the rendered docs
|
||||
* [VIM-2685](https://youtrack.jetbrains.com/issue/VIM-2685) Register command outputs different values for same registers
|
||||
* [VIM-1294](https://youtrack.jetbrains.com/issue/VIM-1294) unvoluntary unfolding when using ideavim
|
||||
* [VIM-2818](https://youtrack.jetbrains.com/issue/VIM-2818) Wrong caret position after multicaret paste
|
||||
|
||||
### Merged PRs:
|
||||
* [662](https://github.com/JetBrains/ideavim/pull/662) by [ludwig-jb](https://github.com/ludwig-jb): Update VimMessages#updateStatusBar to accept VimEditor
|
||||
* [659](https://github.com/JetBrains/ideavim/pull/659) by [Sam Ng](https://github.com/samabcde): VIM-2920 fix select block expansion when enclose boundary is line break
|
||||
|
||||
## 2.3.0, 2023-06-14
|
||||
|
||||
### Features:
|
||||
* Matchit now supports PHP files | [VIM-2678](https://youtrack.jetbrains.com/issue/VIM-2678)
|
||||
|
||||
### Fixes:
|
||||
* [VIM-2909](https://youtrack.jetbrains.com/issue/VIM-2909) Fix incorrect file detection while closing diff window
|
||||
* [VIM-2912](https://youtrack.jetbrains.com/issue/VIM-2912) Fix focus after :q
|
||||
* [VIM-2930](https://youtrack.jetbrains.com/issue/VIM-2930) vim-multiple-cursors + ReplaceWithRegister issue
|
||||
* [VIM-2945](https://youtrack.jetbrains.com/issue/VIM-2945) %-movement mismatches braces
|
||||
* [VIM-2953](https://youtrack.jetbrains.com/issue/VIM-2953) The previous fix for :q command caused weird behavior of tab closing
|
||||
* [VIM-2964](https://youtrack.jetbrains.com/issue/VIM-2964) Fix an issue with leaking caret instance
|
||||
|
||||
### Merged PRs:
|
||||
* [616](https://github.com/JetBrains/ideavim/pull/616) by [Matt Ellis](https://github.com/citizenmatt): Refactor/option delegated properties
|
||||
* [626](https://github.com/JetBrains/ideavim/pull/626) by [Martin Yzeiri](https://github.com/myzeiri): Matchit bug fixes
|
||||
* [619](https://github.com/JetBrains/ideavim/pull/619) by [Matt Ellis](https://github.com/citizenmatt): Fix some local options being used as global options
|
||||
* [638](https://github.com/JetBrains/ideavim/pull/638) by [Sam Ng](https://github.com/samabcde): VIM-2615 add support to sort u command
|
||||
* [646](https://github.com/JetBrains/ideavim/pull/646) by [Sam Ng](https://github.com/samabcde): VIM-1990 fix repeat delete find or till wrong MotionType
|
||||
* [649](https://github.com/JetBrains/ideavim/pull/649) by [Martin Yzeiri](https://github.com/myzeiri): Add Matchit support for PHP
|
||||
|
||||
## 2.2.0, 2023-04-20
|
||||
|
||||
### Features:
|
||||
* Now every secondary caret has its own marks. You can use marks and `gv` in multiple-caret mode now.
|
||||
|
||||
### Fixes:
|
||||
* [VIM-1829](https://youtrack.jetbrains.com/issue/VIM-1829/key-combinations-are-not-working-in-visual-mode-IdeaVim) Fix marks when moving lines up/down
|
||||
* [VIM-2130](https://youtrack.jetbrains.com/issue/VIM-2130/Vim-visual-mode-mapping-isnt-behaving-correctly-in-ideavim-it-leaves-visual-mode-after-its-executed) Fix marks when moving lines up/down
|
||||
* [VIM-2428](https://youtrack.jetbrains.com/issue/VIM-2428/The-gv-command-doesnt-work) Fix marks when moving lines up/down
|
||||
* [VIM-2686](https://youtrack.jetbrains.com/issue/VIM-2686/Multiple-caret-marks) Add individual mark storage for each secondary caret
|
||||
* [VIM-2840](https://youtrack.jetbrains.com/issue/VIM-2840) Replace with register does not work with count
|
||||
* [VIM-658](https://youtrack.jetbrains.com/issue/VIM-658) Stop macro on error
|
||||
* [VIM-2787](https://youtrack.jetbrains.com/issue/VIM-2787) Save ideavimrc loading
|
||||
* [VIM-2850](https://youtrack.jetbrains.com/issue/VIM-2850) Marks exception during IDE startup
|
||||
* [VIM-2804](https://youtrack.jetbrains.com/issue/VIM-2804) IdeaVim multiple-cursors copy and paste issue when "set clipboard+=unnamed"
|
||||
* [VIM-1768](https://youtrack.jetbrains.com/issue/VIM-1768) Delete surrounding character while in multiple cursors mode
|
||||
* [VIM-282](https://youtrack.jetbrains.com/issue/VIM-282) Cursor line wrapping support (whichwrap)
|
||||
* [VIM-2315](https://youtrack.jetbrains.com/issue/VIM-2315) Fix overlapping mappings execution
|
||||
* [VIM-44](https://youtrack.jetbrains.com/issue/VIM-44) Unify navigation history between ideavim and idea
|
||||
* [VIM-1735](https://youtrack.jetbrains.com/issue/VIM-1735) Fix enabling mulple carets after line selection
|
||||
* [VIM-2881](https://youtrack.jetbrains.com/issue/VIM-2881) ReplaceRegister does no longer worker with MultiCursor
|
||||
* [VIM-2244](https://youtrack.jetbrains.com/issue/VIM-2244) nnoremap mapping doesn't work correctly
|
||||
* [VIM-2885](https://youtrack.jetbrains.com/issue/VIM-2885) "v:searchforward" does't work for IdeaVim
|
||||
* [VIM-2733](https://youtrack.jetbrains.com/issue/VIM-2733) vim-surround emulation interacts incorrectly with unmatched quotes on previous lines
|
||||
* [VIM-2884](https://youtrack.jetbrains.com/issue/VIM-2884) Moving multiple lines in visual mode is not working
|
||||
* [VIM-2868](https://youtrack.jetbrains.com/issue/VIM-2868) Pasting in visual mode with P should not replace yank register like when pasting with p
|
||||
* [VIM-2819](https://youtrack.jetbrains.com/issue/VIM-2819) Move command works incorrectly
|
||||
* [VIM-795](https://youtrack.jetbrains.com/issue/VIM-795) Ctrl-w + h doesn't alway work (window navigation to the left window)
|
||||
* [VIM-1551](https://youtrack.jetbrains.com/issue/VIM-1551) Surround: line surround not working
|
||||
* [VIM-1746](https://youtrack.jetbrains.com/issue/VIM-1746) IdeaVim Surround removes unwanted characters
|
||||
* [VIM-1750](https://youtrack.jetbrains.com/issue/VIM-1750) Surround with tag wrong position
|
||||
* [VIM-2286](https://youtrack.jetbrains.com/issue/VIM-2286) Set surround not working for me as expected
|
||||
* [VIM-2433](https://youtrack.jetbrains.com/issue/VIM-2433) Do not clear clipboard after inserting with ideaput
|
||||
* [VIM-2896](https://youtrack.jetbrains.com/issue/VIM-2896) Correct ordering of handlers
|
||||
* [VIM-2912](https://youtrack.jetbrains.com/issue/VIM-2912) Fix focus after :q
|
||||
* [VIM-2909](https://youtrack.jetbrains.com/issue/VIM-2909) Fix incorrect file detection while closing diff window
|
||||
|
||||
### Merged PRs:
|
||||
* [589](https://github.com/JetBrains/ideavim/pull/589) by [Matt Ellis](https://github.com/citizenmatt): Refactor option usage and introduce accessor API
|
||||
* [604](https://github.com/JetBrains/ideavim/pull/604) by [Dominic Palmer](https://github.com/dominicpalmer): VIM-2773: Include empty lines in the selection when dragging backwards from EOL
|
||||
* [603](https://github.com/JetBrains/ideavim/pull/603) by [Dominic Palmer](https://github.com/dominicpalmer): VIM-2773: Prevent viewport displacement on undo
|
||||
* [602](https://github.com/JetBrains/ideavim/pull/602) by [Matt Ellis](https://github.com/citizenmatt): Refactor options service
|
||||
* [612](https://github.com/JetBrains/ideavim/pull/612) by [Dani Sevastianov](https://github.com/danisevas): Fix quick-scope setup documentation
|
||||
* [617](https://github.com/JetBrains/ideavim/pull/617) by [Silence Tai](https://github.com/Stzx): Fix dispose operation
|
||||
|
||||
## 2.1.0, 2023-01-10
|
||||
## To Be Released
|
||||
|
||||
### Features:
|
||||
* Add IdeaVim tutor. You can access it via the status bar icon.
|
||||
@@ -215,7 +33,6 @@ This version of IdeaVim contains a lot of issues. Version 2.6.3 reverts these ch
|
||||
* [VIM-758](https://youtrack.jetbrains.com/issue/VIM-758) Support d mappings
|
||||
* [VIM-2577](https://youtrack.jetbrains.com/issue/VIM-2577) Fix paste at the end of notebook cell
|
||||
* [VIM-2813](https://youtrack.jetbrains.com/issue/VIM-2813) Migrate update checker to VimStandalonePluginUpdateChecker
|
||||
* [VIM-2833](https://youtrack.jetbrains.com/issue/VIM-2833) Fix rare deadlock during put in insert mode from clipboard
|
||||
|
||||
### Merged PRs:
|
||||
* [558](https://github.com/JetBrains/ideavim/pull/558) by [Matt Ellis](https://github.com/citizenmatt): Fix incorrect normalising for trailing inlay
|
||||
@@ -226,9 +43,6 @@ This version of IdeaVim contains a lot of issues. Version 2.6.3 reverts these ch
|
||||
* [561](https://github.com/JetBrains/ideavim/pull/561) by [Matt Ellis](https://github.com/citizenmatt): Fix incremental search not scrolling to current match
|
||||
* [559](https://github.com/JetBrains/ideavim/pull/559) by [Runinho](https://github.com/Runinho): Fix(VIM-2760) notebookCommandMode detection
|
||||
* [579](https://github.com/JetBrains/ideavim/pull/579) by [Martin Yzeiri](https://github.com/myzeiri): VIM-2799: Add Matchit support for cshtml files
|
||||
* [580](https://github.com/JetBrains/ideavim/pull/580) by [Martin Yzeiri](https://github.com/myzeiri): Matchit: Add more Rider file types
|
||||
* [583](https://github.com/JetBrains/ideavim/pull/583) by [Matt Ellis](https://github.com/citizenmatt): Introduce ScrollGroup
|
||||
* [586](https://github.com/JetBrains/ideavim/pull/586) by [Patrick Elmquist](https://github.com/patrick-elmquist): Fixed number references in Tutor
|
||||
|
||||
## 2.0.0, 2022-11-01
|
||||
|
||||
|
22
CLAUDE.md
22
CLAUDE.md
@@ -1,22 +0,0 @@
|
||||
# CLAUDE.md
|
||||
|
||||
Guidance for Claude Code when working with IdeaVim.
|
||||
|
||||
## Quick Reference
|
||||
|
||||
Essential commands:
|
||||
- `./gradlew runIde` - Start dev IntelliJ with IdeaVim
|
||||
- `./gradlew test -x :tests:property-tests:test -x :tests:long-running-tests:test` - Run standard tests
|
||||
|
||||
See CONTRIBUTING.md for architecture details and complete command list.
|
||||
|
||||
## IdeaVim-Specific Notes
|
||||
|
||||
- Property tests can be flaky - verify if failures relate to your changes
|
||||
- Use `<Action>` in mappings, not `:action`
|
||||
- Config file: `~/.ideavimrc` (XDG supported)
|
||||
- Goal: Match Vim functionality and architecture
|
||||
|
||||
## Additional Documentation
|
||||
|
||||
- Changelog maintenance: See `.claude/changelog-instructions.md`
|
@@ -1,50 +1,26 @@
|
||||
[![TeamCity Build][teamcity-build-status-svg]][teamcity-build-status]
|
||||
|
||||
IdeaVim is an open source project created by 130+ contributors. Would you like to make it even better? That’s wonderful!
|
||||
IdeaVim is an open source project created by 80+ contributors. Would you like to make it even better? That’s wonderful!
|
||||
|
||||
This page is created to help you start contributing. And who knows, maybe in a few days this project will be brighter than ever!
|
||||
|
||||
# Awards for Quality Contributions
|
||||
|
||||
In February 2025, we’re starting a program to award one-year All Products Pack subscriptions to the implementers of quality contributions to the IdeaVim project. The program will continue for all of 2025 and may be prolonged.
|
||||
|
||||
Subscriptions can be awarded for merged pull requests that meet the following requirements:
|
||||
|
||||
|
||||
- The change should be non-trivial, though there might be exceptions — for example, where a trivial fix requires a complicated investigation.
|
||||
- The change should fully implement a feature or fix the root cause of a bug. Workarounds or hacks are not accepted.
|
||||
- If applicable, the change should be properly covered with unit tests.
|
||||
- The work should be performed by the contributor, though the IdeaVim team is happy to review it and give feedback.
|
||||
- The change should fix an issue or implement a feature filed by another user. If you want to file an issue and provide a solution to it, your request for a license should be explicitly discussed with the IdeaVim team in the ticket comments.
|
||||
|
||||
|
||||
We'd like to make sure this award program is helpful and fair. Since we just started it and still fine-tuning the details, the final say on giving licenses remains with the IdeaVim team and the requirements might evolve over time.
|
||||
|
||||
|
||||
Also, a few notes:
|
||||
|
||||
|
||||
- If you have any doubts about whether your change or fix is eligible for the award, get in touch with us in the comments on YouTrack or in any other way.
|
||||
- Please mention this program in the pull request text. This is not an absolute requirement, but it will help ensure we know you would like to be considered for an award, but this is not required.
|
||||
- During 2025, a single person may only receive a single subscription. Even if you make multiple contributions, you will not be eligible for multiple awards.
|
||||
- Any delays caused by the IdeaVim team will not affect eligibility for an award if the other requirements are met.
|
||||
- Draft pull requests will not be reviewed unless explicitly requested.
|
||||
- Tickets with the [ideavim-bounty](https://youtrack.jetbrains.com/issues?q=tag:%20%7BIdeaVim-bounty%7D) tag are good candidates for this award.
|
||||
|
||||
:warning: The plugin is currently under a huge refactoring aiming to split into vim-engine and IdeaVim in order to
|
||||
support the new [Fleet IDE](https://www.jetbrains.com/fleet/). Please see [Fleet refactoring](#Fleet-refactoring).
|
||||
|
||||
## Before you begin
|
||||
|
||||
- The project is primarily written in Kotlin with a few Java files. When contributing to the project, use Kotlin unless
|
||||
you’re working in areas where Java is explicitly used.
|
||||
- The project is written in Kotlin and Java. Choose whichever language you feel more comfortable with,
|
||||
or maybe one that you’d like to get to know better (why not start [learning Kotlin](https://kotlinlang.org/docs/tutorials/) right now?).
|
||||
|
||||
- If you come across some IntelliJ Platform code, these links may prove helpful:
|
||||
|
||||
* [IntelliJ Platform SDK](https://plugins.jetbrains.com/docs/intellij/welcome.html)
|
||||
* [IntelliJ architectural overview](https://plugins.jetbrains.com/docs/intellij/fundamentals.html)
|
||||
* [IntelliJ Platform community space](https://platform.jetbrains.com/)
|
||||
* [IntelliJ architectural overview](https://www.jetbrains.org/intellij/sdk/docs/platform/fundamentals.html)
|
||||
* [IntelliJ plugin development resources](https://www.jetbrains.org/intellij/sdk/docs/welcome.html)
|
||||
|
||||
- Having any difficulties?
|
||||
Ask any questions in [GitHub discussions](https://github.com/JetBrains/ideavim/discussions) or [IntelliJ Platform community space](https://platform.jetbrains.com/).
|
||||
Join the brand new
|
||||
[](https://gitter.im/JetBrains/ideavim?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
for IdeaVim developers and contributors!
|
||||
|
||||
OK, ready to do some coding?
|
||||
|
||||
@@ -56,16 +32,12 @@ OK, ready to do some coding?
|
||||
Yoo hoo! You’re all set to begin contributing.
|
||||
We've prepared some useful configurations for you:
|
||||
|
||||
- `Start IJ with IdeaVim`
|
||||
- `IdeaVim tests`
|
||||
- `IdeaVim full verification`
|
||||
|
||||

|
||||
|
||||
And here are useful gradle commands:
|
||||
|
||||
* `./gradlew runIde` — start the dev version of IntelliJ IDEA with IdeaVim installed.
|
||||
* `./gradlew test -x :tests:property-tests:test -x :tests:long-running-tests:test` — run tests.
|
||||
* `./gradlew test` — run tests.
|
||||
* `./gradlew buildPlugin` — build the plugin. The result will be located in `build/distributions`. This file can be
|
||||
installed by using `Settings | Plugin | >Gear Icon< | Install Plugin from Disk...`. You can stay with your personal build
|
||||
for a few days or send it to a friend for testing.
|
||||
@@ -78,24 +50,20 @@ for a few days or send it to a friend for testing.
|
||||
- Read the javadoc for the `@VimBehaviorDiffers` annotation in the source code and fix the corresponding functionality.
|
||||
- Implement one of the requested [#vim plugin](https://youtrack.jetbrains.com/issues/VIM?q=%23Unresolved%20tag:%20%7Bvim%20plugin%7D%20sort%20by:%20votes%20)s.
|
||||
|
||||
> :small_orange_diamond: You may leave a comment in the YouTrack ticket or open a draft PR if you’d like early feedback
|
||||
> or want to let maintainers know you’ve started working on an issue. Otherwise, simply open a PR.
|
||||
> :small_orange_diamond: Selected an issue to work on? Leave a comment in a YouTrack ticket or create a draft PR
|
||||
> to indicate that you've started working on it so that you might get additional guidance and feedback from the maintainers.
|
||||
|
||||
## Where to start in the codebase
|
||||
|
||||
If you are looking for:
|
||||
|
||||
- Vim commands (`w`, `<C-O>`, `p`, etc.):
|
||||
- Any particular command:
|
||||
- [Commands common for Fleet and IdeaVim](vim-engine/src/main/resources/ksp-generated/engine_commands.json)
|
||||
- [IdeaVim only commands](src/main/resources/ksp-generated/intellij_commands.json)
|
||||
- Any particular command: `package-info.java`.
|
||||
- How commands are executed in common: `EditorActionHandlerBase`.
|
||||
- Key mapping: `KeyHandler.handleKey()`.
|
||||
|
||||
- Ex commands (`:set`, `:s`, `:nohlsearch`):
|
||||
- Any particular command:
|
||||
- [Commands common for Fleet and IdeaVim](vim-engine/src/main/resources/ksp-generated/engine_ex_commands.json)
|
||||
- [IdeaVim only commands](src/main/resources/ksp-generated/intellij_ex_commands.json)
|
||||
- Any particular ex command: package `com.maddyhome.idea.vim.ex.handler`.
|
||||
- Vim script grammar: `Vimscript.g4`.
|
||||
- Vim script parsing: package `com.maddyhome.idea.vim.vimscript.parser`.
|
||||
- Vim script executor: `Executor`.
|
||||
@@ -106,7 +74,7 @@ If you are looking for:
|
||||
|
||||
- Common features:
|
||||
- State machine. How every particular keystroke is parsed in IdeaVim: `KeyHandler.handleKey()`.
|
||||
- Options (`incsearch`, `iskeyword`, `relativenumber`): `VimOptionGroup`.
|
||||
- Options (`incsearch`, `iskeyword`, `relativenumber`): `OptionServiceImpl`.
|
||||
- Plugin startup: `PluginStartup`.
|
||||
- Notifications: `NotificationService`.
|
||||
- Status bar icon: `StatusBar.kt`.
|
||||
@@ -119,22 +87,15 @@ Here are some guides for testing:
|
||||
|
||||
1. Read the javadoc for the `@VimBehaviorDiffers` annotation in the source code.
|
||||
|
||||
2. Please avoid senseless text like "dhjkwaldjwa", "asdasdasd", "123 123 123 123", etc. Use a few lines of code or
|
||||
the following template:
|
||||
```text
|
||||
Lorem Ipsum
|
||||
|
||||
Lorem ipsum dolor sit amet,
|
||||
consectetur adipiscing elit
|
||||
Sed in orci mauris.
|
||||
Cras id tellus in ex imperdiet egestas.
|
||||
```
|
||||
2. Please avoid senseless text like "dhjkwaldjwa", "asdasdasd", "123 123 123 123", etc. Try to choose an example
|
||||
text that is easy to read and understand what is wrong if the test fails. For example, take a few lines from your
|
||||
favorite poem, or use Vladimir Nabokov’s “A Discovery" if you don't have one.
|
||||
|
||||
3. Don't forget to test your functionality with line start, line end, file start, file end, empty line, multiple
|
||||
carets, dollar motion, etc.
|
||||
|
||||
##### Neovim
|
||||
IdeaVim has an integration with neovim in tests. Tests that are performed with `doTest` also executed in
|
||||
IdeaVim has an experimental integration with neovim in tests. Tests that are performed with `doTest` also executed in
|
||||
neovim instance, and the state of IdeaVim is asserted to be the same as the state of neovim.
|
||||
- Only tests that use `doTest` are checked with neovim.
|
||||
- Tests with `@VimBehaviorDiffers` or `@TestWithoutNeovim` annotations don't use neovim.
|
||||
@@ -160,15 +121,14 @@ We also support proper command mappings (functions are mapped to `<Plug>...`), t
|
||||
- Magic is supported as well. See `Magic`.
|
||||
|
||||
|
||||
## Fleet
|
||||
|
||||
The IdeaVim plugin is divided into two main modules: IdeaVim and vim-engine.
|
||||
IdeaVim serves as a plugin for JetBrains IDEs, while vim-engine is an IntelliJ Platform-independent Vim engine.
|
||||
This engine is utilized in both the Vim plugin for Fleet and IdeaVim.
|
||||
## Fleet refactoring
|
||||
At the moment, IdeaVim is under an active refactoring aiming to split IdeaVim into two modules: vim-engine and IdeaVim.
|
||||
|
||||
If you develop a plugin that depends on IdeaVim: We have an instrument to check that our changes don't affect
|
||||
the plugins in the marketplace.
|
||||
the plugins in the marketplace. Also, we commit to support currently used API at least till the end of 2022.
|
||||
If you still encounter any issues with the newer versions of IdeaVim, please [contact maintainers](https://github.com/JetBrains/ideavim#contact-maintainers).
|
||||
We kindly ask you not to use anything from the new API (like `VimEditor`, `injector`) because at the moment we don't
|
||||
guarantee the compatibility of this API in the future versions.
|
||||
|
||||
|
||||
-----
|
||||
@@ -189,14 +149,13 @@ This is just terrible. [You know what to do](https://github.com/JetBrains/ideavi
|
||||
|
||||
### Resources:
|
||||
|
||||
* [Continuous integration builds](https://ideavim.teamcity.com/)
|
||||
* [Continuous integration builds](https://teamcity.jetbrains.com/project.html?projectId=IdeaVim&guest=1)
|
||||
* [Bug tracker](https://youtrack.jetbrains.com/issues/VIM)
|
||||
* [IntelliJ Platform community space](https://platform.jetbrains.com/)
|
||||
* [Chat on gitter](https://gitter.im/JetBrains/ideavim)
|
||||
* [IdeaVim Channel](https://jb.gg/bi6zp7) on [JetBrains Server](https://discord.gg/jetbrains)
|
||||
* [Plugin homepage](https://plugins.jetbrains.com/plugin/164-ideavim)
|
||||
* [Changelog](CHANGES.md)
|
||||
* [Contributors listing](AUTHORS.md)
|
||||
|
||||
[teamcity-build-status]: https://ideavim.teamcity.com/viewType.html?buildTypeId=Ideavim_IdeaVimTests_Latest_EAP&guest=1
|
||||
[teamcity-build-status-svg]: https://ideavim.teamcity.com/app/rest/builds/buildType:(id:Ideavim_IdeaVimTests_Latest_EAP)/statusIcon.svg?guest=1
|
||||
[teamcity-build-status]: https://teamcity.jetbrains.com/viewType.html?buildTypeId=IdeaVim_TestsForIntelliJEAP&guest=1
|
||||
[teamcity-build-status-svg]: https://teamcity.jetbrains.com/app/rest/builds/buildType:(id:IdeaVim_TestsForIntelliJEAP)/statusIcon.svg?guest=1
|
||||
|
83
README.md
83
README.md
@@ -22,15 +22,14 @@ IdeaVim is a Vim engine for JetBrains IDEs.
|
||||
|
||||
##### Resources:
|
||||
|
||||
* [Plugin homepage](https://lp.jetbrains.com/ideavim/)
|
||||
* [Plugin on Marketplace](https://plugins.jetbrains.com/plugin/164-ideavim)
|
||||
* [Plugin homepage](https://plugins.jetbrains.com/plugin/164-ideavim)
|
||||
* [Changelog](CHANGES.md)
|
||||
* [Continuous integration builds](https://ideavim.teamcity.com/)
|
||||
* [Continuous integration builds](https://teamcity.jetbrains.com/project.html?projectId=IdeaVim&guest=1)
|
||||
|
||||
#### Compatibility
|
||||
|
||||
IntelliJ IDEA, PyCharm, GoLand, CLion, PhpStorm, WebStorm, RubyMine, DataGrip, DataSpell, Rider, Cursive,
|
||||
Android Studio, and other [JetBrains IDEs](https://www.jetbrains.com/ides/).
|
||||
IntelliJ IDEA, PyCharm, CLion, PhpStorm, WebStorm, RubyMine, AppCode, DataGrip, GoLand, Rider, Cursive,
|
||||
Android Studio and other IntelliJ platform based IDEs.
|
||||
|
||||
Setup
|
||||
------------
|
||||
@@ -54,7 +53,7 @@ Would you like to try new features and fixes? Join the Early Access Program and
|
||||
receive EAP builds as updates!
|
||||
|
||||
1. Click the IdeaVim icon <img src="src/main/resources/META-INF/pluginIcon_noBorders.svg" width="16" height="16" alt="icon"/>
|
||||
in the status bar | `Early Access Program` | `Subscribe to EAP`
|
||||
in the status bar | `Early Access Program` | `Subscibe to EAP`
|
||||
|
||||
|
||||
Or subscribe to EAP updates manually:
|
||||
@@ -85,16 +84,34 @@ Here are some examples of supported vim features and commands:
|
||||
* Motion / deletion / change / window / etc. commands
|
||||
* Key mappings
|
||||
* Marks / Macros / Digraphs / Registers
|
||||
* Some [set commands](https://github.com/JetBrains/ideavim/wiki/set-commands)
|
||||
* Some [set commands](https://github.com/JetBrains/ideavim/wiki/%22set%22-commands)
|
||||
* Full Vim regexps for search and search/replace
|
||||
* Vim web help
|
||||
* `~/.ideavimrc` configuration file
|
||||
* Vim script
|
||||
* IdeaVim plugins
|
||||
|
||||
[IdeaVim plugins](https://github.com/JetBrains/ideavim/wiki/IdeaVim-Plugins):
|
||||
|
||||
* vim-easymotion
|
||||
* NERDTree
|
||||
* vim-surround
|
||||
* vim-multiple-cursors
|
||||
* vim-commentary
|
||||
* argtextobj.vim
|
||||
* vim-textobj-entire
|
||||
* ReplaceWithRegister
|
||||
* vim-exchange
|
||||
* vim-highlightedyank
|
||||
* vim-paragraph-motion
|
||||
* vim-indent-object
|
||||
* match.it
|
||||
etc
|
||||
|
||||
See also:
|
||||
|
||||
* [The list of all supported commands](src/main/java/com/maddyhome/idea/vim/package-info.java)
|
||||
* [Top feature requests and bugs](https://youtrack.jetbrains.com/issues/VIM?q=%23Unresolved+sort+by%3A+votes)
|
||||
* [Vimscript support roadmap](vimscript-info/VIMSCRIPT_ROADMAP.md)
|
||||
* [List of supported in-build functions](vimscript-info/FUNCTIONS_INFO.MD)
|
||||
|
||||
Files
|
||||
-----
|
||||
@@ -186,7 +203,7 @@ Put your settings to `$XDG_CONFIG_HOME/ideavim/ideavimrc` file.
|
||||
IdeaVim Plugins
|
||||
--------------------
|
||||
|
||||
See [doc/IdeaVim Plugins.md](https://github.com/JetBrains/ideavim/wiki/IdeaVim-Plugins)
|
||||
See [doc/emulated-plugins.md](https://github.com/JetBrains/ideavim/wiki/IdeaVim-Plugins)
|
||||
|
||||
Executing IDE Actions
|
||||
---------------------
|
||||
@@ -195,22 +212,22 @@ IdeaVim adds various commands for listing and executing arbitrary IDE actions as
|
||||
Ex commands or via `:map` command mappings:
|
||||
|
||||
### Executing actions:
|
||||
* `:action {action_id}`
|
||||
* Execute an action by `{action_id}`. Works from Ex command line.
|
||||
* Please don't use `:action` in mappings. Use `<Action>` instead.
|
||||
* `<Action>({action_id})`
|
||||
* For the mappings you can use a special `<Action>` keyword. Don't forget the parentheses.
|
||||
* E.g. `map gh <Action>(ShowErrorDescription)` <- execute hover on `gh`.
|
||||
* :warning: Mappings to `<Action>` don't work with `noremap`.
|
||||
If you know the case when it's needed, please [let us know](https://github.com/JetBrains/ideavim#contact-maintainers).
|
||||
* `:action {action_id}`
|
||||
* Execute an action by `{action_id}`. Works from Ex command line.
|
||||
* Please don't use `:action` in mappings. Use `<Action>` instead.
|
||||
|
||||
### Finding action IDs:
|
||||
### Finding action ids:
|
||||
|
||||
* IJ provides `IdeaVim: track action IDs` command to show the id of the executed actions.
|
||||
* IJ provides `IdeaVim: track action Ids` command to show the id of the executed actions.
|
||||
This command can be found in "Search everywhere" (double `shift`).
|
||||
|
||||
<details>
|
||||
<summary><strong>"Track action IDs" Details</strong> (click to see)</summary>
|
||||
<summary><strong>"Track action Ids" Details</strong> (click to see)</summary>
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="assets/readme/track_action_dark.gif">
|
||||
<img src="assets/readme/track_action_light.gif" alt="track action ids"/>
|
||||
@@ -237,7 +254,8 @@ Ex commands or via `:map` command mappings:
|
||||
##### Some popular actions:
|
||||
|
||||
```
|
||||
ShowHoverInfo - Quick Documentation and Error Description
|
||||
QuickJavaDoc - Quick Documentation (not only for java, all languages)
|
||||
ShowErrorDescription - Show description of the error under the caret (cursor hovering)
|
||||
QuickImplementations - Quick Definition
|
||||
```
|
||||
|
||||
@@ -248,7 +266,8 @@ IdeaVim can execute custom scripts that are written with Vim Script.
|
||||
At the moment we support all language features, but not all of the built-in functions and options are supported.
|
||||
|
||||
Additionally, you may be interested in the
|
||||
[Vim Script Discussion](https://github.com/JetBrains/ideavim/discussions/357).
|
||||
[Vim Script Discussion](https://github.com/JetBrains/ideavim/discussions/357) or
|
||||
[Vim Script Roadmap](https://github.com/JetBrains/ideavim/blob/master/vimscript-info/VIMSCRIPT_ROADMAP.md).
|
||||
|
||||
|
||||
### IDE specific options
|
||||
@@ -291,9 +310,7 @@ endif
|
||||
|
||||
The power of contributing drives IdeaVim :muscle:. Even small contributions matter!
|
||||
|
||||
See the contribution guide in [CONTRIBUTING.md](CONTRIBUTING.md) to start bringing your value to the project.
|
||||
|
||||
😎 In 2025, we launched a rewards program. See the guide for details.
|
||||
See [CONTRIBUTING.md](CONTRIBUTING.md) to start bringing your value to the project.
|
||||
|
||||
Authors
|
||||
-------
|
||||
@@ -307,12 +324,12 @@ IdeaVim tips and tricks
|
||||
- Use the power of IJ and Vim:
|
||||
- `set ideajoin` to enable join via the IDE. See the [examples](https://jb.gg/f9zji9).
|
||||
- Make sure `ideaput` is enabled for `clipboard` to enable native IJ insertion in Vim.
|
||||
- Sync IJ bookmarks and IdeaVim global marks: `set ideamarks` (works for marks with capital letters only)
|
||||
- Check out more [ex commands](https://github.com/JetBrains/ideavim/wiki/set-commands).
|
||||
- Sync IJ bookmarks and Vim marks: `set ideamarks`
|
||||
- Check out more [ex commands](https://github.com/JetBrains/ideavim/wiki/%22set%22-commands).
|
||||
|
||||
- Use your vim settings with IdeaVim. Put `source ~/.vimrc` in `~/.ideavimrc`.
|
||||
- Control the status bar icon via the [`ideastatusicon` option](https://github.com/JetBrains/ideavim/wiki/set-commands).
|
||||
- Not familiar with the default behaviour during a refactoring? See the [`idearefactormode` option](https://github.com/JetBrains/ideavim/wiki/set-commands).
|
||||
- Control the status bar icon via the [`ideastatusicon` option](https://github.com/JetBrains/ideavim/wiki/%22set%22-commands).
|
||||
- Not familiar with the default behaviour during a refactoring? See the [`idearefactormode` option](https://github.com/JetBrains/ideavim/wiki/%22set%22-commands).
|
||||
|
||||
Some facts about Vim
|
||||
-------
|
||||
@@ -335,12 +352,9 @@ is the source of this knowledge.
|
||||
[Here](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/normal.c#L5365)
|
||||
is the full list of synonyms.
|
||||
|
||||
- You can read a [post](https://github.com/JetBrains/ideavim/wiki/how-many-modes-does-vim-have) about how modes work in Vim and IdeaVim.
|
||||
|
||||
- Have you ever used `U` after `dd`? [Don't even try](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/ops.c#L874).
|
||||
|
||||
- A lot of variables that refer to visual mode start with two uppercase letters, e.g. `VIsual_active`. [Some examples](https://github.com/vim/vim/blob/master/src/normal.c#L17).
|
||||
As mentioned [here](https://vi.stackexchange.com/a/42885/12441), this was done this way to avoid the clash with X11.
|
||||
- A lot of variables that refers to visual mode start with two uppercase letters, e.g. `VIsual_active`. [Some examples](https://github.com/vim/vim/blob/master/src/normal.c#L17).
|
||||
|
||||
- Other [strange things](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/ex_docmd.c#L1845) from vi:
|
||||
* ":3" jumps to line 3
|
||||
@@ -349,17 +363,6 @@ is the full list of synonyms.
|
||||
|
||||
- Vim script doesn't skip white space before comma. `F(a ,b)` => E475.
|
||||
|
||||
- Fancy constants for [undolevels](https://vimhelp.org/options.txt.html#%27undolevels%27):
|
||||
> The local value is set to -123456 when the global value is to be used.
|
||||
|
||||
- Vi (not Vim) is a POSIX standard, and [has a spec](https://pubs.opengroup.org/onlinepubs/9699919799/utilities/vi.html)! Vim is mostly POSIX compliant when Vi compatibility is selected with the `'compatible'` option, but there are still some differences that can be changed with `'copoptions'`. The spec is interesting because it documents the behaviour of different commands in a stricter style than the user documentation, describing the current line and column after the command, for example. [More details can be found by reading `:help posix`](https://vimhelp.org/vi_diff.txt.html#posix).
|
||||
|
||||
- The Vim documentation contains many easter eggs. We encounter them occasionally, but GitHub user mikesmithgh has compiled a substantial collection [here](https://github.com/mikesmithgh/vimpromptu).
|
||||
- In addition to `:call err_teapot()`, which returns `E418: I'm a teapot`, there is also `:call err_teapot(1)`, which returns `E503: Coffee is currently not available`. Naturally, this is also supported in IdeaVim.
|
||||
|
||||
- Insert mode has all `Ctrl` keys mapped, except `Ctrl-B`. In the documentation, it is marked as **"CTRL-B in Insert
|
||||
mode gone"**. Call `:h i_CTRL-B-gone` in Vim to read why `Ctrl-B` was removed.
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
IdeaVim project is licensed under MIT license except the following parts of it:
|
||||
|
||||
* File [ScrollViewHelper.kt](com/maddyhome/idea/vim/helper/ScrollViewHelper.kt) is licensed under Vim License.
|
||||
* File [Tutor.kt](src/main/java/com/maddyhome/idea/vim/ui/Tutor.kt) is licensed under Vim License.
|
||||
File [RegExp.kt](src/main/java/com/maddyhome/idea/vim/regexp/RegExp.kt) is licensed under Vim License.
|
||||
File [Tutor.kt](src/main/java/com/maddyhome/idea/vim/ui/Tutor.kt) is licensed under Vim License.
|
||||
|
||||
```
|
||||
VIM LICENSE
|
||||
@@ -27,8 +27,8 @@ II) It is allowed to distribute a modified (or extended) version of Vim,
|
||||
maintainer will do with your changes and under what license they
|
||||
will be distributed is negotiable. If there has been no negotiation
|
||||
then this license, or a later version, also applies to your changes.
|
||||
The current maintainers are listed here: https://github.com/orgs/vim/people.
|
||||
If this changes it will be announced in appropriate places (most likely
|
||||
The current maintainer is Bram Moolenaar <Bram@vim.org>. If this
|
||||
changes it will be announced in appropriate places (most likely
|
||||
vim.sf.net, www.vim.org and/or comp.editors). When it is completely
|
||||
impossible to contact the maintainer, the obligation to send him
|
||||
your changes ceases. Once the maintainer has confirmed that he has
|
||||
@@ -83,8 +83,3 @@ IV) It is not allowed to remove this license from the distribution of the Vim
|
||||
license for previous Vim releases instead of the license that they came
|
||||
with, at your option.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
File [sneakIcon.png](doc/images/sneakIcon.svg), which is originally an icon of the ideavim-sneak plugin,
|
||||
is merged icons of IdeaVim plugin and a random sneaker by FreePic from flaticon.com.
|
||||
|
42
annotation-processors/.gitignore
vendored
42
annotation-processors/.gitignore
vendored
@@ -1,42 +0,0 @@
|
||||
.gradle
|
||||
build/
|
||||
!gradle/wrapper/gradle-wrapper.jar
|
||||
!**/src/main/**/build/
|
||||
!**/src/test/**/build/
|
||||
|
||||
### IntelliJ IDEA ###
|
||||
.idea/modules.xml
|
||||
.idea/jarRepositories.xml
|
||||
.idea/compiler.xml
|
||||
.idea/libraries/
|
||||
*.iws
|
||||
*.iml
|
||||
*.ipr
|
||||
out/
|
||||
!**/src/main/**/out/
|
||||
!**/src/test/**/out/
|
||||
|
||||
### Eclipse ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
.sts4-cache
|
||||
bin/
|
||||
!**/src/main/**/bin/
|
||||
!**/src/test/**/bin/
|
||||
|
||||
### NetBeans ###
|
||||
/nbproject/private/
|
||||
/nbbuild/
|
||||
/dist/
|
||||
/nbdist/
|
||||
/.nb-gradle/
|
||||
|
||||
### VS Code ###
|
||||
.vscode/
|
||||
|
||||
### Mac OS ###
|
||||
.DS_Store
|
@@ -1,31 +0,0 @@
|
||||
/*
|
||||
* Copyright 2003-2023 The IdeaVim authors
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style
|
||||
* license that can be found in the LICENSE.txt file or at
|
||||
* https://opensource.org/licenses/MIT.
|
||||
*/
|
||||
|
||||
plugins {
|
||||
kotlin("jvm")
|
||||
kotlin("plugin.serialization") version "2.2.0"
|
||||
}
|
||||
|
||||
val kotlinxSerializationVersion: String by project
|
||||
|
||||
group = "com.intellij"
|
||||
version = "SNAPSHOT"
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compileOnly("com.google.devtools.ksp:symbol-processing-api:2.1.21-2.0.2")
|
||||
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:$kotlinxSerializationVersion") {
|
||||
// kotlin stdlib is provided by IJ, so there is no need to include it into the distribution
|
||||
exclude("org.jetbrains.kotlin", "kotlin-stdlib")
|
||||
exclude("org.jetbrains.kotlin", "kotlin-stdlib-common")
|
||||
}
|
||||
api(project(":api"))
|
||||
}
|
@@ -1,55 +0,0 @@
|
||||
/*
|
||||
* Copyright 2003-2023 The IdeaVim authors
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style
|
||||
* license that can be found in the LICENSE.txt file or at
|
||||
* https://opensource.org/licenses/MIT.
|
||||
*/
|
||||
|
||||
package com.intellij.vim.annotations
|
||||
|
||||
// TODO support numpad keys parsing, see :keycodes
|
||||
/**
|
||||
* It's not necessary a Vim command
|
||||
* This annotation may be used for:
|
||||
* - commands
|
||||
* - motions
|
||||
*/
|
||||
@Target(AnnotationTarget.CLASS)
|
||||
@Retention(AnnotationRetention.SOURCE)
|
||||
annotation class CommandOrMotion(val keys: Array<String>, vararg val modes: Mode)
|
||||
|
||||
annotation class TextObject(val keys: String)
|
||||
|
||||
|
||||
enum class Mode(val abbrev: Char) {
|
||||
/**
|
||||
* Indicates this key mapping applies to Normal mode
|
||||
*/
|
||||
NORMAL('N'),
|
||||
|
||||
/**
|
||||
* Indicates this key mapping applies to Visual mode
|
||||
*/
|
||||
VISUAL('X'),
|
||||
|
||||
/**
|
||||
* Indicates this key mapping applies to Select mode
|
||||
*/
|
||||
SELECT('S'),
|
||||
|
||||
/**
|
||||
* Indicates this key mapping applies to Operator Pending mode
|
||||
*/
|
||||
OP_PENDING('O'),
|
||||
|
||||
/**
|
||||
* Indicates this key mapping applies to Insert or Replace modes
|
||||
*/
|
||||
INSERT('I'),
|
||||
|
||||
/**
|
||||
* Indicates this key mapping applies to Command Line mode
|
||||
*/
|
||||
CMD_LINE('C'),
|
||||
}
|
@@ -1,16 +0,0 @@
|
||||
/*
|
||||
* Copyright 2003-2023 The IdeaVim authors
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style
|
||||
* license that can be found in the LICENSE.txt file or at
|
||||
* https://opensource.org/licenses/MIT.
|
||||
*/
|
||||
|
||||
package com.intellij.vim.annotations
|
||||
|
||||
/**
|
||||
* [command] is formatted the same way it is formatted in Vim (with optional part in square brackets).
|
||||
*/
|
||||
@Target(AnnotationTarget.CLASS)
|
||||
@Retention(AnnotationRetention.SOURCE)
|
||||
annotation class ExCommand(val command: String)
|
@@ -1,13 +0,0 @@
|
||||
/*
|
||||
* Copyright 2003-2023 The IdeaVim authors
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style
|
||||
* license that can be found in the LICENSE.txt file or at
|
||||
* https://opensource.org/licenses/MIT.
|
||||
*/
|
||||
|
||||
package com.intellij.vim.annotations
|
||||
|
||||
@Target(AnnotationTarget.CLASS)
|
||||
@Retention(AnnotationRetention.SOURCE)
|
||||
annotation class VimscriptFunction(val name: String)
|
@@ -1,14 +0,0 @@
|
||||
/*
|
||||
* Copyright 2003-2023 The IdeaVim authors
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style
|
||||
* license that can be found in the LICENSE.txt file or at
|
||||
* https://opensource.org/licenses/MIT.
|
||||
*/
|
||||
|
||||
package com.intellij.vim.processors
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class CommandBean(val keys: String, val `class`: String, val modes: String)
|
@@ -1,66 +0,0 @@
|
||||
/*
|
||||
* Copyright 2003-2023 The IdeaVim authors
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style
|
||||
* license that can be found in the LICENSE.txt file or at
|
||||
* https://opensource.org/licenses/MIT.
|
||||
*/
|
||||
|
||||
package com.intellij.vim.processors
|
||||
|
||||
import com.google.devtools.ksp.KspExperimental
|
||||
import com.google.devtools.ksp.getAnnotationsByType
|
||||
import com.google.devtools.ksp.processing.Resolver
|
||||
import com.google.devtools.ksp.processing.SymbolProcessor
|
||||
import com.google.devtools.ksp.processing.SymbolProcessorEnvironment
|
||||
import com.google.devtools.ksp.symbol.KSAnnotated
|
||||
import com.google.devtools.ksp.symbol.KSClassDeclaration
|
||||
import com.google.devtools.ksp.symbol.KSFile
|
||||
import com.google.devtools.ksp.symbol.KSVisitorVoid
|
||||
import com.intellij.vim.annotations.CommandOrMotion
|
||||
import kotlinx.serialization.encodeToString
|
||||
import kotlinx.serialization.json.Json
|
||||
import java.nio.file.Files
|
||||
import kotlin.io.path.Path
|
||||
import kotlin.io.path.writeText
|
||||
|
||||
class CommandOrMotionProcessor(private val environment: SymbolProcessorEnvironment): SymbolProcessor {
|
||||
private val visitor = CommandOrMotionVisitor()
|
||||
private val commands = mutableListOf<CommandBean>()
|
||||
|
||||
private val json = Json { prettyPrint = true }
|
||||
|
||||
override fun process(resolver: Resolver): List<KSAnnotated> {
|
||||
val commandsFile = environment.options["commands_file"]
|
||||
if (commandsFile == null) return emptyList()
|
||||
|
||||
resolver.getAllFiles().forEach { it.accept(visitor, Unit) }
|
||||
|
||||
val generatedDirPath = Path(environment.options["generated_directory"]!!)
|
||||
Files.createDirectories(generatedDirPath)
|
||||
|
||||
val filePath = generatedDirPath.resolve(commandsFile)
|
||||
val sortedCommands = commands.sortedWith(compareBy({ it.keys }, { it.`class` }))
|
||||
val fileContent = json.encodeToString(sortedCommands)
|
||||
filePath.writeText(fileContent)
|
||||
|
||||
return emptyList()
|
||||
}
|
||||
|
||||
private inner class CommandOrMotionVisitor : KSVisitorVoid() {
|
||||
@OptIn(KspExperimental::class)
|
||||
override fun visitClassDeclaration(classDeclaration: KSClassDeclaration, data: Unit) {
|
||||
val commandAnnotation = classDeclaration.getAnnotationsByType(CommandOrMotion::class).firstOrNull() ?: return
|
||||
for (key in commandAnnotation.keys) {
|
||||
commands.add(
|
||||
CommandBean(key, classDeclaration.qualifiedName!!.asString(), commandAnnotation.modes.map { it.abbrev }.joinToString(separator = ""))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitFile(file: KSFile, data: Unit) {
|
||||
file.declarations.forEach { it.accept(this, Unit) }
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -1,64 +0,0 @@
|
||||
/*
|
||||
* Copyright 2003-2023 The IdeaVim authors
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style
|
||||
* license that can be found in the LICENSE.txt file or at
|
||||
* https://opensource.org/licenses/MIT.
|
||||
*/
|
||||
|
||||
package com.intellij.vim.processors
|
||||
|
||||
import com.google.devtools.ksp.KspExperimental
|
||||
import com.google.devtools.ksp.getAnnotationsByType
|
||||
import com.google.devtools.ksp.processing.Resolver
|
||||
import com.google.devtools.ksp.processing.SymbolProcessor
|
||||
import com.google.devtools.ksp.processing.SymbolProcessorEnvironment
|
||||
import com.google.devtools.ksp.symbol.KSAnnotated
|
||||
import com.google.devtools.ksp.symbol.KSClassDeclaration
|
||||
import com.google.devtools.ksp.symbol.KSFile
|
||||
import com.google.devtools.ksp.symbol.KSVisitorVoid
|
||||
import com.intellij.vim.annotations.ExCommand
|
||||
import kotlinx.serialization.encodeToString
|
||||
import kotlinx.serialization.json.Json
|
||||
import java.nio.file.Files
|
||||
import kotlin.io.path.Path
|
||||
import kotlin.io.path.writeText
|
||||
|
||||
class ExCommandProcessor(private val environment: SymbolProcessorEnvironment): SymbolProcessor {
|
||||
private val visitor = EXCommandVisitor()
|
||||
private val commandToClass = mutableMapOf<String, String>()
|
||||
|
||||
private val json = Json { prettyPrint = true }
|
||||
|
||||
override fun process(resolver: Resolver): List<KSAnnotated> {
|
||||
val exCommandsFile = environment.options["ex_commands_file"]
|
||||
if (exCommandsFile == null) return emptyList()
|
||||
|
||||
resolver.getAllFiles().forEach { it.accept(visitor, Unit) }
|
||||
|
||||
val generatedDirPath = Path(environment.options["generated_directory"]!!)
|
||||
Files.createDirectories(generatedDirPath)
|
||||
|
||||
val filePath = generatedDirPath.resolve(exCommandsFile)
|
||||
val sortedCommandToClass = commandToClass.toList().sortedWith(compareBy({ it.first }, { it.second })).toMap()
|
||||
val fileContent = json.encodeToString(sortedCommandToClass)
|
||||
filePath.writeText(fileContent)
|
||||
|
||||
return emptyList()
|
||||
}
|
||||
|
||||
private inner class EXCommandVisitor : KSVisitorVoid() {
|
||||
@OptIn(KspExperimental::class)
|
||||
override fun visitClassDeclaration(classDeclaration: KSClassDeclaration, data: Unit) {
|
||||
val exCommandAnnotation = classDeclaration.getAnnotationsByType(ExCommand::class).firstOrNull() ?: return
|
||||
val commands = exCommandAnnotation.command.split(",")
|
||||
for (command in commands) {
|
||||
commandToClass[command] = classDeclaration.qualifiedName!!.asString()
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitFile(file: KSFile, data: Unit) {
|
||||
file.declarations.forEach { it.accept(this, Unit) }
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,78 +0,0 @@
|
||||
/*
|
||||
* Copyright 2003-2025 The IdeaVim authors
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style
|
||||
* license that can be found in the LICENSE.txt file or at
|
||||
* https://opensource.org/licenses/MIT.
|
||||
*/
|
||||
|
||||
package com.intellij.vim.processors
|
||||
|
||||
import com.google.devtools.ksp.KspExperimental
|
||||
import com.google.devtools.ksp.getAnnotationsByType
|
||||
import com.google.devtools.ksp.processing.Resolver
|
||||
import com.google.devtools.ksp.processing.SymbolProcessor
|
||||
import com.google.devtools.ksp.processing.SymbolProcessorEnvironment
|
||||
import com.google.devtools.ksp.symbol.KSAnnotated
|
||||
import com.google.devtools.ksp.symbol.KSClassDeclaration
|
||||
import com.google.devtools.ksp.symbol.KSFile
|
||||
import com.google.devtools.ksp.symbol.KSFunctionDeclaration
|
||||
import com.google.devtools.ksp.symbol.KSVisitorVoid
|
||||
import com.intellij.vim.api.VimPlugin
|
||||
import kotlinx.serialization.encodeToString
|
||||
import kotlinx.serialization.json.Json
|
||||
import java.nio.file.Files
|
||||
import kotlin.io.path.Path
|
||||
import kotlin.io.path.writeText
|
||||
|
||||
// Used for processing VimPlugin annotations
|
||||
class ExtensionsProcessor(private val environment: SymbolProcessorEnvironment) : SymbolProcessor {
|
||||
private val visitor = ExtensionsVisitor()
|
||||
private val declaredExtensions = mutableListOf<KspExtensionBean>()
|
||||
|
||||
private val json = Json { prettyPrint = true }
|
||||
|
||||
override fun process(resolver: Resolver): List<KSAnnotated> {
|
||||
val extensionsFile = environment.options["extensions_file"]
|
||||
if (extensionsFile == null) return emptyList()
|
||||
|
||||
resolver.getAllFiles().forEach { it.accept(visitor, Unit) }
|
||||
|
||||
val generatedDirPath = Path(environment.options["generated_directory"]!!)
|
||||
Files.createDirectories(generatedDirPath)
|
||||
|
||||
val filePath = generatedDirPath.resolve(environment.options["extensions_file"]!!)
|
||||
val sortedExtensions = declaredExtensions.toList().sortedWith(compareBy { it.extensionName })
|
||||
|
||||
val fileContent = json.encodeToString(sortedExtensions)
|
||||
filePath.writeText(fileContent)
|
||||
|
||||
return emptyList()
|
||||
}
|
||||
|
||||
|
||||
private inner class ExtensionsVisitor : KSVisitorVoid() {
|
||||
@OptIn(KspExperimental::class)
|
||||
override fun visitFunctionDeclaration(function: KSFunctionDeclaration, data: Unit) {
|
||||
val pluginAnnotation = function.getAnnotationsByType(VimPlugin::class).firstOrNull() ?: return
|
||||
val pluginName = pluginAnnotation.name
|
||||
val functionPath = function.simpleName.asString()
|
||||
|
||||
// Extensions are not declared as part of class, however, when Kotlin code is decompiled to Java,
|
||||
// function `fun init()` in a file File.kt, will be a static method in a class FileKt since Java
|
||||
// does not support top-level functions. Then, it can be loaded with class loader.
|
||||
|
||||
val surroundingFileName = function.containingFile?.fileName?.removeSuffix(".kt") ?: return
|
||||
val packageName = function.packageName.asString()
|
||||
|
||||
val className = "$packageName.${surroundingFileName}Kt"
|
||||
|
||||
val kspExtensionBean = KspExtensionBean(pluginName, functionPath, className)
|
||||
declaredExtensions.add(kspExtensionBean)
|
||||
}
|
||||
|
||||
override fun visitFile(file: KSFile, data: Unit) {
|
||||
file.declarations.forEach { it.accept(this, Unit) }
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,14 +0,0 @@
|
||||
/*
|
||||
* Copyright 2003-2025 The IdeaVim authors
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style
|
||||
* license that can be found in the LICENSE.txt file or at
|
||||
* https://opensource.org/licenses/MIT.
|
||||
*/
|
||||
|
||||
package com.intellij.vim.processors
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class KspExtensionBean(val extensionName: String, val functionName: String, val className: String)
|
@@ -1,64 +0,0 @@
|
||||
/*
|
||||
* Copyright 2003-2023 The IdeaVim authors
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style
|
||||
* license that can be found in the LICENSE.txt file or at
|
||||
* https://opensource.org/licenses/MIT.
|
||||
*/
|
||||
|
||||
package com.intellij.vim.processors
|
||||
|
||||
import com.google.devtools.ksp.KspExperimental
|
||||
import com.google.devtools.ksp.getAnnotationsByType
|
||||
import com.google.devtools.ksp.processing.Resolver
|
||||
import com.google.devtools.ksp.processing.SymbolProcessor
|
||||
import com.google.devtools.ksp.processing.SymbolProcessorEnvironment
|
||||
import com.google.devtools.ksp.symbol.KSAnnotated
|
||||
import com.google.devtools.ksp.symbol.KSClassDeclaration
|
||||
import com.google.devtools.ksp.symbol.KSFile
|
||||
import com.google.devtools.ksp.symbol.KSVisitorVoid
|
||||
import com.intellij.vim.annotations.VimscriptFunction
|
||||
import kotlinx.serialization.encodeToString
|
||||
import kotlinx.serialization.json.Json
|
||||
import java.nio.file.Files
|
||||
import kotlin.io.path.Path
|
||||
import kotlin.io.path.writeText
|
||||
|
||||
class VimscriptFunctionProcessor(private val environment: SymbolProcessorEnvironment) : SymbolProcessor {
|
||||
private val visitor = VimscriptFunctionVisitor()
|
||||
private val nameToClass = mutableMapOf<String, String>()
|
||||
|
||||
private val json = Json { prettyPrint = true }
|
||||
|
||||
override fun process(resolver: Resolver): List<KSAnnotated> {
|
||||
val vimscriptFunctionsFile = environment.options["vimscript_functions_file"]
|
||||
if (vimscriptFunctionsFile == null) return emptyList()
|
||||
|
||||
resolver.getAllFiles().forEach { it.accept(visitor, Unit) }
|
||||
|
||||
val generatedDirPath = Path(environment.options["generated_directory"]!!)
|
||||
Files.createDirectories(generatedDirPath)
|
||||
|
||||
val filePath = generatedDirPath.resolve(vimscriptFunctionsFile)
|
||||
val sortedNameToClass = nameToClass.toList().sortedWith(compareBy({ it.first }, { it.second })).toMap()
|
||||
val fileContent = json.encodeToString(sortedNameToClass)
|
||||
filePath.writeText(fileContent)
|
||||
|
||||
return emptyList()
|
||||
}
|
||||
|
||||
// todo inspection that annotation is properly used on proper classes
|
||||
private inner class VimscriptFunctionVisitor : KSVisitorVoid() {
|
||||
@OptIn(KspExperimental::class)
|
||||
override fun visitClassDeclaration(classDeclaration: KSClassDeclaration, data: Unit) {
|
||||
val vimscriptFunctionAnnotation = classDeclaration.getAnnotationsByType(VimscriptFunction::class).firstOrNull() ?: return
|
||||
val functionName = vimscriptFunctionAnnotation.name
|
||||
nameToClass[functionName] = classDeclaration.qualifiedName!!.asString()
|
||||
}
|
||||
|
||||
override fun visitFile(file: KSFile, data: Unit) {
|
||||
file.declarations.forEach { it.accept(this, Unit) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,20 +0,0 @@
|
||||
/*
|
||||
* Copyright 2003-2023 The IdeaVim authors
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style
|
||||
* license that can be found in the LICENSE.txt file or at
|
||||
* https://opensource.org/licenses/MIT.
|
||||
*/
|
||||
|
||||
package com.intellij.vim.providers
|
||||
|
||||
import com.google.devtools.ksp.processing.SymbolProcessor
|
||||
import com.google.devtools.ksp.processing.SymbolProcessorEnvironment
|
||||
import com.google.devtools.ksp.processing.SymbolProcessorProvider
|
||||
import com.intellij.vim.processors.CommandOrMotionProcessor
|
||||
|
||||
class CommandOrMotionProcessorProvider : SymbolProcessorProvider {
|
||||
override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor {
|
||||
return CommandOrMotionProcessor(environment)
|
||||
}
|
||||
}
|
@@ -1,20 +0,0 @@
|
||||
/*
|
||||
* Copyright 2003-2023 The IdeaVim authors
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style
|
||||
* license that can be found in the LICENSE.txt file or at
|
||||
* https://opensource.org/licenses/MIT.
|
||||
*/
|
||||
|
||||
package com.intellij.vim.providers
|
||||
|
||||
import com.google.devtools.ksp.processing.SymbolProcessor
|
||||
import com.google.devtools.ksp.processing.SymbolProcessorEnvironment
|
||||
import com.google.devtools.ksp.processing.SymbolProcessorProvider
|
||||
import com.intellij.vim.processors.ExCommandProcessor
|
||||
|
||||
class ExCommandProcessorProvider : SymbolProcessorProvider {
|
||||
override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor {
|
||||
return ExCommandProcessor(environment)
|
||||
}
|
||||
}
|
@@ -1,20 +0,0 @@
|
||||
/*
|
||||
* Copyright 2003-2025 The IdeaVim authors
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style
|
||||
* license that can be found in the LICENSE.txt file or at
|
||||
* https://opensource.org/licenses/MIT.
|
||||
*/
|
||||
|
||||
package com.intellij.vim.providers
|
||||
|
||||
import com.google.devtools.ksp.processing.SymbolProcessor
|
||||
import com.google.devtools.ksp.processing.SymbolProcessorEnvironment
|
||||
import com.google.devtools.ksp.processing.SymbolProcessorProvider
|
||||
import com.intellij.vim.processors.ExtensionsProcessor
|
||||
|
||||
class ExtensionsProcessorProvider: SymbolProcessorProvider {
|
||||
override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor {
|
||||
return ExtensionsProcessor(environment)
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user