Forgejo v16.0 출시 — 알림·PR 리뷰·Actions 기능 확장
(forgejo.org)- 2026년 7월 16일 출시된 Forgejo v16.0은 저장소별 알림 제어, 마이그레이션 진행률, 풀 리퀘스트 리뷰, Actions 및 API 기능을 확장함
- Git 미러의 HTTP 리디렉션을 차단해 SSRF 방어를 강화했으며, 이름이나 소유자가 바뀐 원격 저장소는 미러 주소를 직접 갱신해야 함
- 컨테이너에서 역방향 프록시 인증을 사용한다면 신뢰할 프록시 주소 범위를 명시해야 하며, 기본 웹 포트가 신뢰할 수 없는 네트워크에 노출된 일부 기존 구성은 더 이상 동작하지 않음
- 여러 줄 리뷰와
git blame --reverse기반 댓글 위치 추적, Actions 실행 우선순위, JWT 기반 Authorized Integrations, 워크플로 로그·아티팩트·취소 API가 추가됨 - v16.0은 비 LTS 릴리스로 2026년 10월 29일까지 지원되며, 업그레이드 전에 전체 백업을 만들고 모든 호환성 변경을 확인해야 함
출시와 업그레이드
- Forgejo v16.0은 2026년 7월 16일 출시된 경량 커뮤니티 개발형 자체 호스팅 코드 협업 플랫폼임
- 전체 변경 목록은 릴리스 노트에서 확인할 수 있으며, 전용 테스트 인스턴스도 제공됨
- 업그레이드 전 업그레이드 가이드에 따라 전체 백업을 만들고 모든 호환성 변경을 확인해야 함
- 업그레이드는 바이너리 또는 컨테이너 이미지를 v16.0 대응 버전으로 교체하는 방식임
- Forgejo v16.0.0 바이너리와 컨테이너 이미지를 제공함
- 컨테이너의
16.0태그를 사용하면 최신16.0.Y패치 릴리스를 자동으로 따라갈 수 있음
호환성 변경과 보안 강화
-
Git 미러의 SSRF 방어
[migrations].ALLOWED_DOMAINS,LOCKED_DOMAINS,ALLOW_LOCALNETWORKS가 일부 예외 상황에서 제대로 적용되지 않던 문제를 수정함- Git이 HTTP(S) 저장소 접근 중 리디렉션을 따라가 설정을 우회하지 못하도록
http.followRedirects=false를 적용함 - 이름이 바뀌었거나 새 소유자에게 이전된 원격 Forgejo 저장소는 리디렉션이 오류로 처리되므로, 기존 미러를 새 저장소 주소로 갱신해야 함
-
아바타 EXIF 제거 기능 삭제
- v13.0에서 추가한 아바타 이미지의 EXIF 메타데이터 제거 기능은 AGPL 라이브러리를 잘못 사용한 라이선스 문제로 삭제됨
- 다른 구현 방식을 검토하는 동안 해당 기능을 제거해 라이선스 준수 상태를 회복함
-
컨테이너의 신뢰할 프록시 설정
- 기존 Forgejo 컨테이너는
REVERSE_PROXY_TRUSTED_PROXIES = *를 기본값으로 사용함 - 다음 조건이 모두 충족되면 승인되지 않은 사용자가
X-WebAuth-User헤더를 이용해 다른 사용자를 가장할 수 있었음- Docker 또는 Podman 기반 컨테이너로 배포함
[service].ENABLE_REVERSE_PROXY_AUTHENTICATION=true로 설정함[security].REVERSE_PROXY_TRUSTED_PROXIES의 기본값*를 변경하지 않음- 기본
:3000웹 포트가 신뢰할 수 없는 네트워크에 노출돼 인증 역방향 프록시를 우회할 수 있음
- v16은 이런 구성의 역방향 프록시 설정을 더 이상 따르지 않으므로, 트래픽이 들어오는 신뢰할 프록시 주소 범위를 명시해야 함
- 환경 변수 설정 예시는
FORGEJO__security__REVERSE_PROXY_TRUSTED_PROXIES=127.0.0.0/8,::1/128,172.16.X.X/X임 app.ini에서는[security]아래REVERSE_PROXY_TRUSTED_PROXIES에 같은 주소 목록을 설정함
- 기존 Forgejo 컨테이너는
저장소와 조직 사용성
- 저장소 알림을 이슈(Issues), 풀 리퀘스트(Pull requests), 릴리스(Releases) 세 범주로 나눠 구독할 수 있음
- 재설계된 알림 백엔드는 앞으로 더 세밀한 설정을 지원할 기반이 됨
- 지나치게 많은 옵션을 노출하지 않으면서 사용자에게 알림 제어권을 제공하는 것이 목표임
- 저장소 마이그레이션 화면은 원본의 이슈와 풀 리퀘스트를 배치 단위로 옮기는 진행률을 표시해 장시간 작업이 멈췄는지 확인할 수 있음
- 기본 배치 크기는 45개이며, 진행률이 표시되는 최소 항목 수도 45개임
- 전체 크기가 필요하지 않은 위치에는 두 가지 축소 아바타를 생성해 대역폭 사용량과 로딩 시간을 줄임
- 조직 구성원 목록에서 직접 대화상자를 열어 새 구성원을 추가하고 한 번에 여러 팀에 배정할 수 있음
- Git이 수신 객체의 여러 불일치를 검사하고 거부해 저장소가 불일치하거나 손상된 상태가 되는 것을 방지함
- 백엔드 저장소에는 Git 예제 훅 파일을 더 이상 생성하지 않으며, 인스턴스 공통 Git 훅도 저장소마다 복제하지 않고 중앙에 보관함
- 저장소당 약 20KiB를 절약함
- 기존 저장소의 예제 및 중복 자동 생성 파일은 업그레이드 가이드에 따라 삭제할 수 있음
- 저장소 기능을 더 활성화하라는 안내가 신규 사용자에게 보이지 않던 v7.0.0 이후의 버그를 수정하고, 안내를 끄는 설정도 찾기 쉽게 바꿈
- “Enable more” 안내는 관리자나 저장소 소유자가 일부 저장소 기능을 명시적으로 비활성화한 경우에만 나타남
풀 리퀘스트와 코드 리뷰
- 풀 리퀘스트 페이지의 커밋 목록을 더 읽기 쉽고 화면 크기에 잘 대응하는 새 레이아웃으로 변경함
- 현재는 풀 리퀘스트 페이지에만 적용되며 다른 커밋 목록 화면으로 점진적으로 확대할 계획임
- 변경된 여러 줄을 하나의 리뷰 댓글에 연결하는 다중 행 리뷰를 지원함
Shift를 누른 상태에서 첫 행 옆의 더하기 버튼을 누르고 마지막 행까지 드래그하면 선택한 행들이 한 댓글에 연결됨
- 리뷰 댓글이 잘못된 diff나 화면 위치에 나타나거나 diff 연결을 잃던 문제를 수정함
- 기존
git blame은 댓글 대상 코드가 이후 커밋에서 이동하면 위치를 잘못 찾을 수 있었음 - 내부적으로
git blame --reverse를 사용해 코드 변경을 현재 위치까지 추적함 - 현재 풀 리퀘스트의 HEAD뿐만 아니라 리뷰어가 실제로 보고 있는 base와 head, 표시 중인 코드의 커밋을 기준으로 댓글 위치를 계산함
- 삭제된 행은 삭제 시점을 찾고 현재 diff의 같은 위치에서도 삭제 상태인지 확인한 뒤, 댓글을 배치하거나 오래된 댓글로 표시함
- 기존
Forgejo Actions와 JWT 통합
-
실행 우선순위와 워크플로 관리
- 개별 워크플로 실행을 수동으로 우선 처리 대상으로 지정할 수 있으며, Forgejo Actions는 이를 일반 실행보다 먼저 처리함
- 가능한 경우
if조건을 Forgejo가 직접 평가해 Forgejo Runner로 작업을 보내지 않으므로 실행을 더 빠르게 시작할 수 있음 - 완료된 워크플로 실행과 로그·아티팩트를 UI 또는 HTTP API에서 삭제할 수 있음
- 저장소 관리자 또는
write:repository권한이 있는 액세스 토큰만 삭제 가능함
- 저장소 관리자 또는
cron표현식은 기존CRON_TZ형식과 함께 GitHub 방식의 시간대 지정 문법도 지원함- 이전 버전에서 성공으로 표시하던 건너뛴 검사는 v16부터 skipped로 표시됨
-
Authorized Integrations
- v15에서 외부 시스템이 인증에 활용할 수 있는 JWT 생성 기능을 추가한 데 이어, v16은 JWT로 Forgejo API와 Git 접근을 인증하는 Authorized Integrations를 제공함
- 로컬 Forgejo Actions에서 사용하거나, 규칙을 구성해 임의의 JWT를 Forgejo가 검증하도록 설정할 수 있음
${{ forgejo.token }}의 일반 권한을 넘어서는 접근이 필요할 때 정적 액세스 토큰을 설정하고 향후 교체하지 않아도 됨- 워크플로 작성자가 예상 밖의 권한을 스스로 부여하는 기능은 노출하지 않음
- 여러 Forgejo 저장소에 걸쳐 사용할 수 있음
- 기술 요구사항을 충족하는 외부 시스템은 시스템 간 정적 비밀값 없이 사용자의 Authorized Integration을 통해 Forgejo API와 Git 저장소에 직접 접근할 수 있음
- 예시로 Amazon Web Services, GitHub Actions, GitLab CI/CD가 포함됨
Actions와 관리 API
- 전체 워크플로 실행 또는 개별 작업의 로그를 가져오는 API가 추가됨
- 아티팩트를 나열·다운로드·삭제하는 엔드포인트를 제공함
- 아티팩트 업로드용으로 문서화된 엔드포인트는 향후 작업 목록에 남아 있음
- 개별 워크플로 실행을 취소하는 API가 추가됨
/actions/run은 자동 토큰FORGEJO_TOKEN이 속한 워크플로 실행 정보를 반환함- 그 밖의 API 변경 사항은 다음과 같음
- 여러 엔드포인트가 반환하는 조직 모델에 생성 시간이 추가됨
- 풀 리퀘스트 검색에서 base와 head 브랜치 이름으로 필터링할 수 있음
- 인스턴스 관리자가 사용자 액세스 토큰을 나열·발급·삭제할 수 있음
- 사용자 목록을 2FA 상태로 필터링할 수 있음
지원 기간과 테스트 빌드
- 주요 릴리스는 3개월마다 나오며, 패치 릴리스는 포함된 버그나 보안 수정의 심각도에 따라 더 자주 배포됨
- v16.0은 비 LTS 릴리스로 2026년 10월 29일까지 지원됨
- v11.0 LTS는 2026년 7월 16일 지원이 종료됨
- v15.0 LTS는 2027년 7월 15일까지 지원됨
- v17.0은 2026년 10월 15일 출시 예정이며 2027년 1월 28일까지 지원될 예정임
v16.0/forgejo개발 브랜치의 최신 변경으로16.0-test일일 빌드를 생성해 테스트 인스턴스에 배포함- root OCI 이미지, rootless OCI 이미지, 바이너리를 제공함
- 빌드 이름은 유지되지만 매일 새 빌드로 교체됨
댓글과 토론
Lobste.rs 의견들
-
@pushcx, suggest 링크가 어디로 갔나?
vcs태그를 제안하려 했는데 이제 어떤 글에서도 링크가 보이지 않음- 나도 같은 현상을 겪고 있어서 이유를 알고 싶음
- 현재 이 글과 홈 화면의 대부분 글에서 suggest 링크가 보이며, https://lobste.rs/moderations 에도 계정에 대한 조치 내역이 없음. 버그인 듯함
-
모든 기여자, 특히 병합 팀에 감사함. 개인적으로 https://forgejo.org/2026-07-release-v16-0/#repository-units-hint 수정에 기여한 것이 자랑스러움
-
며칠 동안 https://forge.l3x.in 에 개인용 Forge를 구성하고 조정하며 GitHub에서 점진적으로 이전했는데, Forgejo 자체 호스팅은 매우 만족스러운 경험이었고 적극 추천함
SourceHut도 좋다고 들었지만 직접 써보지는 않았고, 지금은 Forgejo에 집중하고 있음 -
여러 줄 리뷰와 리뷰 댓글 위치 지정 기능이 반가움.
$JOB에는 코드 리뷰가 없어 익숙하지 않은데, 자유·오픈소스 프로젝트에 제출한 패치를 리뷰받을 때 댓글이 어느 코드 블록을 가리키는지 몇 차례 잘못 이해했음 -
세분화된 구독 설정이 매우 기대됨. GitHub에서 쓰던 기능이라 Forgejo에서 몹시 아쉬웠음
GitHub에서도 이슈와 PR이 새로 생성될 때 구독하는 기능을 오래전부터 바랐음. 가끔만 기여하는 프로젝트의 개발 현황을 따라가면서 관심 없는 알림 90%를 일일이 구독 해제하지 않아도 되기 때문임
Forgejo 저장소에 기능 요청을 등록했음: https://codeberg.org/forgejo/forgejo/issues/13494 -
홈랩에서 Forgejo를 한동안 운영해 왔으며 매우 만족함. Github.com에 있던 저장소 약 500개를 이전했는데 과정도 거의 불편하지 않았고, Forgejo와 러너를 k8s 안에서 실행 중임
Forgejo Runner가 GitHub Actions와 같은 워크플로 정의를 사용하는 점이 특히 편리했고, 로컬 러너에 올바른 레이블만 만들면 됐음
GitHub를 읽기 전용으로 남길지, 삭제할지, 동등한 미러로 유지할지는 아직 결정하지 못했음. 어느 쪽이든 이제 GitHub가 아니라 Forgejo 인스턴스로 직접 푸시하며, 모든 작업이 수초 단위로 훨씬 빨라짐