Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 61 additions & 23 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -207,40 +207,78 @@ jobs:
name: pluginVerifier-result
path: ${{ github.workspace }}/build/reports/pluginVerifier

# Prepare a draft release for GitHub Releases page for the manual verification
# If accepted and published, the release workflow would be triggered
releaseDraft:
name: Release draft
if: github.event_name != 'pull_request'
# Bump the version, write the changelog, tag, and publish a GitHub release.
#
# This replaces a manual loop: edit pluginVersion in gradle.properties, edit CHANGELOG.md, keep the
# duplicate version in plugin.xml in sync (that duplicate is now gone), then find the draft release
# this job used to create and publish it by hand.
#
# Publishing the release triggers release.yml, which pushes to JetBrains Marketplace. So a merge to
# main now ships. Put [skip release] in the merge commit message to stop that for a given change.
release:
name: Release
if: |
github.event_name == 'push' &&
github.ref == 'refs/heads/main' &&
!contains(github.event.head_commit.message, '[skip release]')
needs: [ build, test, inspectCode, verify ]
runs-on: ubuntu-latest
permissions:
contents: write
steps:

# Check out the current repository
# Full history: the bump level and the changelog are both derived from commits since the last release
- name: Fetch Sources
uses: actions/checkout@v5
with:
fetch-depth: 0

# Remove old release drafts by using the curl request for the available releases with a draft flag
- name: Remove Old Release Drafts
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Setup Java
uses: actions/setup-java@v5
with:
distribution: zulu
java-version: 21

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v5
with:
cache-read-only: true

# major on [major] or BREAKING CHANGE, minor on [minor] or feat:, patch otherwise
- name: Determine next version
id: version
run: |
NEXT=$(scripts/next-version.sh)
LEVEL=$(scripts/next-version.sh --level-only)
echo "next=$NEXT" >> "$GITHUB_OUTPUT"
echo "Bumping $LEVEL to $NEXT"

- name: Apply version and changelog
run: |
sed -i "s|^pluginVersion *=.*|pluginVersion = ${{ steps.version.outputs.next }}|" gradle.properties
scripts/prepare-changelog.sh
./gradlew patchChangelog

# [skip ci] keeps this push from re-triggering the workflow
- name: Commit the bump
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add gradle.properties CHANGELOG.md
git commit -m "chore(release): ${{ steps.version.outputs.next }} [skip ci]"
git push origin HEAD:main

- name: Collect release notes
run: |
gh api repos/{owner}/{repo}/releases \
--jq '.[] | select(.draft == true) | .id' \
| xargs -I '{}' gh api -X DELETE repos/{owner}/{repo}/releases/{}
./gradlew getChangelog --no-header --quiet --console=plain \
--output-file=./build/tmp/release_note.txt

# Create a new release draft which is not publicly visible and requires manual acceptance
- name: Create Release Draft
# Creates the tag as well, pointing at the bump commit
- name: Publish release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
VERSION=$(./gradlew properties --property version --quiet --console=plain | tail -n 1 | cut -f2- -d ' ')
RELEASE_NOTE="./build/tmp/release_note.txt"
./gradlew getChangelog --unreleased --no-header --quiet --console=plain --output-file=$RELEASE_NOTE

gh release create $VERSION \
--draft \
--title $VERSION \
--notes-file $RELEASE_NOTE
gh release create "${{ steps.version.outputs.next }}" \
--target main \
--title "${{ steps.version.outputs.next }}" \
--notes-file ./build/tmp/release_note.txt
42 changes: 3 additions & 39 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,17 +44,9 @@ jobs:
with:
cache-read-only: true

# Update the Unreleased section with the current release note
- name: Patch Changelog
if: ${{ github.event.release.body != '' }}
env:
CHANGELOG: ${{ github.event.release.body }}
run: |
RELEASE_NOTE="./build/tmp/release_note.txt"
mkdir -p "$(dirname "$RELEASE_NOTE")"
echo "$CHANGELOG" > $RELEASE_NOTE

./gradlew patchChangelog --release-note-file=$RELEASE_NOTE
# No changelog step here. The release job in build.yml patches and commits CHANGELOG.md before the
# release is created, so doing it again would duplicate the section - and the pull request this
# workflow used to open to carry that edit back is no longer needed either.

# Publish the plugin to JetBrains Marketplace
- name: Publish Plugin
Expand All @@ -70,31 +62,3 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh release upload ${{ github.event.release.tag_name }} ./build/distributions/*

# Create a pull request
- name: Create Pull Request
if: ${{ github.event.release.body != '' }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
VERSION="${{ github.event.release.tag_name }}"
BRANCH="changelog-update-$VERSION"
LABEL="release changelog"

git config user.email "action@github.com"
git config user.name "GitHub Action"

git checkout -b $BRANCH
git commit -am "Changelog update - $VERSION"
git push --set-upstream origin $BRANCH

gh label create "$LABEL" \
--description "Pull requests with release changelog update" \
--force \
|| true

gh pr create \
--title "Changelog update - \`$VERSION\`" \
--body "Current pull request contains patched \`CHANGELOG.md\` file for the \`$VERSION\` version." \
--label "$LABEL" \
--head $BRANCH
12 changes: 12 additions & 0 deletions .mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"mcpServers": {
"egovconstant": {
"command": "node",
"args": ["tools/mcp/egovconstant-mcp.mjs"],
"env": {
"EGOVCONSTANT_HOST": "127.0.0.1",
"EGOVCONSTANT_PORT": "63342"
}
}
}
}
59 changes: 59 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,65 @@

# eGovConstant Changelog

## [2.0.0]
### Added
- 영어/한글 UI 동시 지원. IDE 언어 설정을 따르며, 기존에 하드코딩돼 있던 문자열 40여 개를 리소스 번들로 분리.
- 한글 초성 검색. `ㅅㅇㅈ` 로 `사용자`, `승인자`, `사업장` 등을 찾을 수 있습니다.
- 변수명 4종 표기 동시 제공 및 개별 복사/삽입: `camelCase`, `PascalCase`, `snake_case`, `CONSTANT_CASE`.
기존에는 3종을 만들어 두고 `camelCase` 만 사용했습니다.
- SQL, JavaScript/TypeScript 지원. 이에 따라 WebStorm, DataGrip, PyCharm Community 에도 설치할 수 있습니다.
표준 용어가 본래 DB 컬럼명을 위해 만들어진 만큼 SQL 은 `snake_case` 를 기본으로 씁니다.
- 즐겨찾기와 최근 사용 항목. 접두어 없이 자동 완성을 호출하면 최근 사용한 항목을 먼저 보여줍니다.
- 검색 결과에 매치 구간 하이라이팅. 동의어나 약어 일부로 매치된 이유를 확인할 수 있습니다.
- AI 코딩 에이전트 연동. IDE 내장 웹서버에 읽기 전용 조회 엔드포인트를 추가하고, 이를 감싸는 MCP 서버를
`tools/mcp/` 에 제공합니다. 에이전트가 변수명을 지어내는 대신 표준 사전을 조회할 수 있습니다.
- 검색어 기록, 결과 없음 상태 안내, 색인 진행 표시.

### Changed
- 검색 엔진을 역색인 기반으로 교체. `USER_NM` 의 `NM` 처럼 `_` 로 구분된 접미어가 검색됩니다.
이 표준의 핵심 패턴인 `NM`/`YMD`/`CD`/`NO`/`YN` 이 그동안 사실상 검색되지 않았습니다.
- 랭킹 재설계: 길이 정규화와 IDF 도입. `일자`(1,012건) `여부`(614건) 처럼 지나치게 흔한 접미어가
검색 신호를 잠식하던 문제와, 짧은 검색어에서 수백 건이 동점이 되던 문제를 해결.
- 사전 데이터와 설정을 프로젝트 단위에서 IDE 단위로 이전. 프로젝트를 여러 개 열어도 한 번만 로딩하며,
가져온 사전을 프로젝트마다 다시 가져올 필요가 없고, `.idea` 에 상태 파일이 생기지 않습니다.
기존 프로젝트의 데이터는 처음 열 때 자동으로 이전됩니다.
- 설정을 <kbd>Settings</kbd> → <kbd>Tools</kbd> → <kbd>eGovConstant</kbd> 로 이동. IDE 설정 검색에
노출되고 확인/취소가 동작합니다. 툴 창은 '사전'과 '가져오기' 두 탭으로 정리.
- 자동 완성 추천이 기본적으로 IDE 자체 추천보다 아래에 표시됩니다. 1.6.2 에서 위로 올렸으나, 이미 선언된
변수가 목록 아래로 밀리는 문제가 있어 되돌리고 설정으로 선택하도록 바꿨습니다.
- 검색 결과가 페이지 단위 이동에서 연속 스크롤로 바뀌었습니다.
- 라이트/다크 테마 대응 색상 체계와 아이콘 세트 신규 제작. 마켓플레이스 로고 추가.
- 자동 완성 목록의 부가 정보에 데이터 타입(`VARCHAR(100)` 등)을 표시.
- 표기 규칙 통일: `USER_ID_YN` → `userIdYn` / `user_id_yn`. 기존에는 `user_id_YN` 처럼 대소문자가
섞였습니다(번들 약어 1,230건 해당).
- 사전 가져오기 결과에 추가/병합/건너뜀 건수를 표시하고, 잘못된 항목은 해당 항목만 건너뜁니다.
- 번들 데이터 파일 정리로 크기 47% 감소 (3.73MB → 1.98MB).
- 버전 올리기와 CHANGELOG 작성, 릴리스 생성을 자동화.

### Fixed
- 표준 용어 149건이 조용히 사라지던 문제. 용어(TERM)와 단어(WORD)가 같은 영문 약어를 쓰면 하나가 다른
하나를 덮어쓰면서 도메인·포맷 정보까지 함께 사라졌습니다.
- 변수명 자동 완성 중 오류가 발생하던 문제. `val userNm` 처럼 중간에 대문자를 입력하면 재현됐습니다.
- 자동 완성 목록에 보이는 이름과 실제로 삽입되는 이름이 다르던 문제.
- '표준 용어로 변경'(Alt+Enter)이 실제 이름 변경이 아니라 커서 위치의 글자만 바꿔, 해당 변수를 사용하는
모든 곳이 컴파일되지 않게 되던 문제. 이제 사용처까지 함께 변경됩니다. 또한 JSON, Markdown 등 관련 없는
파일에서 이 메뉴가 나타나던 문제도 해결.
- 검색어가 사전에 없을 때 '결과 없음' 대신 전체 항목이 표시되던 문제.
- 추천 개수를 적게 설정하면 상위 결과가 아닌 임의의 항목이 표시되던 문제.
- 유형 필터를 걸면 일치하는 항목이 있는데도 결과가 비던 문제.
- 도메인 항목을 복사·삽입하면 한글이 코드에 삽입되던 문제(도메인 106건 전체). 이제 해당 항목은 변수명을
만들 수 없음을 안내합니다.
- 선택된 검색 결과의 유형 표시와 약어가 배경색과 겹쳐 읽기 어렵던 문제.
- 라이트 테마에서 툴 창 아이콘이 거의 보이지 않던 문제.
- 툴 창을 처음 열 때 IDE가 멈추던 문제.
- 검색 중 이전 검색 결과가 최신 결과를 덮어쓰던 문제.
- 툴 창을 키보드만으로 조작할 수 없던 문제. Enter 와 더블클릭으로 삽입, 검색창에서 ↓ 로 목록 이동.
- '초기화' 버튼이 확인 없이 가져온 사전을 전부 삭제하던 문제.
- 사전 가져오기 화면에서 `{` 를 입력할 수 없던 문제.
- 상세 정보에 '동의어: -', '허용값: -' 처럼 빈 값이 표시되던 문제.
- 한국어 Windows 에서 빌드하면 마켓플레이스 설명의 한글이 깨진 채 배포되던 문제.
- 사용자 화면에 내부 값(`TERM`, `WORD`, `XLSX`)이 그대로 노출되던 문제.

## [1.6.4]
### Added
- 변수 추천 개수 옵션 다양화: 추천 개수 설정을 5, 10, 20, 40개 중에서 선택할 수 있도록 개선.
Expand Down
Loading
Loading