Pencatatan Changelog

Standarisasi pencatatan Changelog untuk kolaborasi yang lebih baik

Versi 1.0.0
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

### Added

- v1.1 Brazilian Portuguese translation.
- v1.1 German Translation
- v1.1 Spanish translation.
- v1.1 Italian translation.
- v1.1 Polish translation.
- v1.1 Ukrainian translation.

### Changed

- Use frontmatter title & description in each language version template
- Replace broken OpenGraph image with an appropriately-sized Keep a Changelog 
  image that will render properly (although in English for all languages)
- Fix OpenGraph title & description for all languages so the title and 
description when links are shared are language-appropriate

### Removed

- Trademark sign previously shown after the project description in version 
0.3.0

## [1.1.1] - 2023-03-05

### Added

- Arabic translation (#444).
- v1.1 French translation.
- v1.1 Dutch translation (#371).
- v1.1 Russian translation (#410).
- v1.1 Japanese translation (#363).
- v1.1 Norwegian Bokmål translation (#383).
- v1.1 "Inconsistent Changes" Turkish translation (#347).
- Default to most recent versions available for each languages.
- Display count of available translations (26 to date!).
- Centralize all links into `/data/links.json` so they can be updated easily.

### Fixed

- Improve French translation (#377).
- Improve id-ID translation (#416).
- Improve Persian translation (#457).
- Improve Russian translation (#408).
- Improve Swedish title (#419).
- Improve zh-CN translation (#359).
- Improve French translation (#357).
- Improve zh-TW translation (#360, #355).
- Improve Spanish (es-ES) transltion (#362).
- Foldout menu in Dutch translation (#371).
- Missing periods at the end of each change (#451).
- Fix missing logo in 1.1 pages.
- Display notice when translation isn't for most recent version.
- Various broken links, page versions, and indentations.

### Changed

- Upgrade dependencies: Ruby 3.2.1, Middleman, etc.

### Removed

- Unused normalize.css file.
- Identical links assigned in each translation file.
- Duplicate index file for the english version.

## [1.1.0] - 2019-02-15

### Added

- Danish translation (#297).
- Georgian translation from (#337).
- Changelog inconsistency section in Bad Practices.

### Fixed

- Italian translation (#332).
- Indonesian translation (#336).

## [1.0.0] - 2017-06-20

### Added

- New visual identity by [@tylerfortune8](https://github.com/tylerfortune8).
- Version navigation.
- Links to latest released version in previous versions.
- "Why keep a changelog?" section.
- "Who needs a changelog?" section.
- "How do I make a changelog?" section.
- "Frequently Asked Questions" section.
- New "Guiding Principles" sub-section to "How do I make a changelog?".
- Simplified and Traditional Chinese translations from [@tianshuo](https://github.com/tianshuo).
- German translation from [@mpbzh](https://github.com/mpbzh) & [@Art4](https://github.com/Art4).
- Italian translation from [@azkidenz](https://github.com/azkidenz).
- Swedish translation from [@magol](https://github.com/magol).
- Turkish translation from [@emreerkan](https://github.com/emreerkan).
- French translation from [@zapashcanon](https://github.com/zapashcanon).
- Brazilian Portuguese translation from [@Webysther](https://github.com/Webysther).
- Polish translation from [@amielucha](https://github.com/amielucha) & [@m-aciek](https://github.com/m-aciek).
- Russian translation from [@aishek](https://github.com/aishek).
- Czech translation from [@h4vry](https://github.com/h4vry).
- Slovak translation from [@jkostolansky](https://github.com/jkostolansky).
- Korean translation from [@pierceh89](https://github.com/pierceh89).
- Croatian translation from [@porx](https://github.com/porx).
- Persian translation from [@Hameds](https://github.com/Hameds).
- Ukrainian translation from [@osadchyi-s](https://github.com/osadchyi-s).

### Changed

- Start using "changelog" over "change log" since it's the common usage.
- Start versioning based on the current English version at 0.3.0 to help
  translation authors keep things up-to-date.
- Rewrite "What makes unicorns cry?" section.
- Rewrite "Ignoring Deprecations" sub-section to clarify the ideal
  scenario.
- Improve "Commit log diffs" sub-section to further argument against
  them.
- Merge "Why can’t people just use a git log diff?" with "Commit log
  diffs".
- Fix typos in Simplified Chinese and Traditional Chinese translations.
- Fix typos in Brazilian Portuguese translation.
- Fix typos in Turkish translation.
- Fix typos in Czech translation.
- Fix typos in Swedish translation.
- Improve phrasing in French translation.
- Fix phrasing and spelling in German translation.

### Removed

- Section about "changelog" vs "CHANGELOG".

## [0.3.0] - 2015-12-03

### Added

- RU translation from [@aishek](https://github.com/aishek).
- pt-BR translation from [@tallesl](https://github.com/tallesl).
- es-ES translation from [@ZeliosAriex](https://github.com/ZeliosAriex).

## [0.2.0] - 2015-10-06

### Changed

- Remove exclusionary mentions of "open source" since this project can
  benefit both "open" and "closed" source projects equally.

## [0.1.0] - 2015-10-06

### Added

- Answer "Should you ever rewrite a change log?".

### Changed

- Improve argument against commit logs.
- Start following [SemVer](https://semver.org) properly.

## [0.0.8] - 2015-02-17

### Changed

- Update year to match in every README example.
- Reluctantly stop making fun of Brits only, since most of the world
  writes dates in a strange way.

### Fixed

- Fix typos in recent README changes.
- Update outdated unreleased diff link.

## [0.0.7] - 2015-02-16

### Added

- Link, and make it obvious that date format is ISO 8601.

### Changed

- Clarified the section on "Is there a standard change log format?".

### Fixed

- Fix Markdown links to tag comparison URL with footnote-style links.

## [0.0.6] - 2014-12-12

### Added

- README section on "yanked" releases.

## [0.0.5] - 2014-08-09

### Added

- Markdown links to version tags on release headings.
- Unreleased section to gather unreleased changes and encourage note
  keeping prior to releases.

## [0.0.4] - 2014-08-09

### Added

- Better explanation of the difference between the file ("CHANGELOG")
  and its function "the change log".

### Changed

- Refer to a "change log" instead of a "CHANGELOG" throughout the site
  to differentiate between the file and the purpose of the file — the
  logging of changes.

### Removed

- Remove empty sections from CHANGELOG, they occupy too much space and
  create too much noise in the file. People will have to assume that the
  missing sections were intentionally left out because they contained no
  notable changes.

## [0.0.3] - 2014-08-09

### Added

- "Why should I care?" section mentioning The Changelog podcast.

## [0.0.2] - 2014-07-10

### Added

- Explanation of the recommended reverse chronological release ordering.

## [0.0.1] - 2014-05-31

### Added

- This CHANGELOG file to hopefully serve as an evolving example of a
  standardized open source project CHANGELOG.
- CNAME file to enable GitHub Pages custom domain.
- README now contains answers to common questions about CHANGELOGs.
- Good examples and basic guidelines, including proper date formatting.
- Counter-examples: "What makes unicorns cry?".

[unreleased]: https://github.com/olivierlacan/keep-a-changelog/compare/v1.1.1...HEAD
[1.1.1]: https://github.com/olivierlacan/keep-a-changelog/compare/v1.1.0...v1.1.1
[1.1.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v1.0.0...v1.1.0
[1.0.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.3.0...v1.0.0
[0.3.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.2.0...v0.3.0
[0.2.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.1.0...v0.2.0
[0.1.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.8...v0.1.0
[0.0.8]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.7...v0.0.8
[0.0.7]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.6...v0.0.7
[0.0.6]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.5...v0.0.6
[0.0.5]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.4...v0.0.5
[0.0.4]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.3...v0.0.4
[0.0.3]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.2...v0.0.3
[0.0.2]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.1...v0.0.2
[0.0.1]: https://github.com/olivierlacan/keep-a-changelog/releases/tag/v0.0.1

Apa itu changelog?

Changelog adalah sebuah file yang berisi daftar perubahan yang diurutkan secara kronologis untuk setiap versi dari sebuah proyek.

Kenapa perlu untuk mencatat changelog?

Untuk mempermudah pengguna dan kontributor melihat perubahan apa saja yang terjadi antara setiap rilis (atau versi) dari sebuah proyek.

Siapa yang membutuhkan changelog?

Semua orang membutuhkannya. Baik pengguna ataupun pengembang, setiap orang yang menggunakan perangkat lunak adalah manusia yang peduli tentang apa yang ada di dalam perangkat lunak tersebut. Ketika perangkat lunak berubah, mereka ingin tahu apa yang berubah dan mengapa.

Bagaimana cara membuat changelog yang baik?

Prinsip-prinsip Dasar

  • Changelog ditulis untuk manusia, bukan mesin.
  • Harus ada catatan untuk setiap versi.
  • Setiap tipe perubahan yang sama harus dikelompokkan.
  • Versi dan seksi harus dapat dirujuk.
  • Versi yang terakhir harus ditulis di paling atas.
  • Tanggal rilis setiap versi harus ditulis.
  • Berikan informasi jika kalian menggunakan Semantic Versioning.

Jenis-jenis perubahan

  • Added/Ditambahkan untuk fitur yang baru.
  • Changed/Diubah untuk perubahan di fitur yang sudah ada.
  • Deprecated/Akan Dihilangkan untuk fitur yang akan dihapus dalam waktu dekat.
  • Removed/Dihilangkan untuk fitur yang sudah dihapus.
  • Fixed/Diperbaiki untuk setiap perbaikan bugs.
  • Security/Keamanan jika ada celah keamanan.

Apa yang bisa saya lakukan untuk mempermudah pemeliharaan changelog?

Sisakan bagian Unreleased/Belum Dirilis di bagian paling atas file changelog untuk mencatat perubahan yang akan datang.

Hal ini berguna untuk dua hal:

  • Orang-orang bisa melihat perubahan apa saja yang akan datang.
  • Saat waktu rilis datang, tinggal pindahkan bagian Unreleased/Belum Dirilis ke catatan rilis versi baru di bawah.

Apakah changelog bisa menjadi tidak bermanfaat?

Bisa, berikut beberapa skenario ketika changelog menjadi tidak bermanfaat:

Menggunakan Commit log diffs sebagai changelog

Menggunakan commit log diffs (catatan perbedaan setiap commit) bisa membuat changelog susah untuk dibaca. Commit dengan judul yang tidak jelas, dokumentasi perubahan, dan sebagainya, malah akan membuat changelog terlalu berisik dan susah dibaca.

Tujuan utama dari commit adalah untuk mencatat setiap perubahan dari source code. Beberapa proyek merapikan commitnya, beberapa tidak.

Tujuan dari changelog adalah untuk mencatat perubahan yang pantas untuk dicatat, bisa jadi beberapa commit dijadikan satu catatan untuk lebih memudahkan pembaca.

Mengabaikan Deprecations (fitur yang akan dihilangkan)

Saat menaikkan versi, harus ditulis dengan jelas apa saja yang kira-kira bisa membuat sistem tidak berjalan. Sebaiknya terdapat versi yang mencatat apa saja yang akan dihilangkan, lalu menghapus fitur yang dihilangkan, dan naikkan lagi ke versi dengan fitur yang sudah dihilangkan.

Jika kalian tidak mengubah apapun, tetap catat fitur yang akan dihilangkan, fitur yang sudah dihilangkan, dan perubahan-perubahan lain yang bisa membuat sistem tidak berjalan.

Perbedaan Format Tanggal

Format tanggal regional berbeda-beda sesuai dengan budaya masing-masing, dan seringkali perbedaan ini susah untuk dipahami dan dimengerti. Penggunaan format tanggal 2017-07-17 lebih mudah untuk dimengerti, karena diurutkan berdasarkan unit terbesar: tahun, bulan, dan tanggal. Format ini juga merupakan Standar ISO, sehingga inilah yang dipakai untuk pencatatan changelog.

Pertanyaan yang Sering Ditanyakan

Apakah ada standar untuk format changelog?

Tidak, ada format GNU untuk changelog, atau format 2 paragraf GNU NEWS. Keduanya tidak benar-benar cukup, gunakan format yang disetujui tim masing-masing.

Proyek ini ditujukan untuk membuat aturan changelog yang lebih baik berdasarkan observasi beberapa changelog di komunitas open source dan menyatukan mereka.

Kritik yang membangun, diskusi, dan saran untuk perbaikan sangat diterima.

Apa nama file yang cocok untuk file changelog?

Gunakan nama CHANGELOG.md, beberapa proyek menggunakan HISTORY, NEWS atau RELEASE.

Sebenarnya tidak terlalu susah untuk menamai file changelog, cukup berikan nama yang mudah dikenali oleh orang-orang supaya mudah untuk dibaca.

Apa itu GitHub Releases?

Github Release adalah salah satu insiatif dari GitHub untuk membuat changelog berdasarkan git tags, contohnya, tag dengan nama v1.0.0. Isi dari changelog bisa ditulis manual atau menggunakan pesan yang ditulis bersamaan dengan tags.

GitHub Releases membuat changelog yang tidak portable dan hanya bisa bekerja dengan baik di lingkup GitHub. Sangat mungkin untuk membuat GitHub Releases terlihat mirip dengan format pencatatan changelog yang dijelaskan di sini, tapi butuh usaha ekstra.

Versi GitHub releases yang sekarang juga tidak terlalu umum untuk orang-orang, dan hanya bisa dibuka melalui sub menu di GitHub, berbeda dengan file-file seperti (README, CONTRIBUTING, dsb.) yang langsung terlihat saat proyek pertama kali dibuka. Keterbatasan lainnya adalah tidak adanya link di GitHub releases.

Apakah Changelog Bisa Diparse Secara Otomatis?

Susah, karena orang-orang menggunakan versi dan format changelog yang berbeda-beda.

Vandamme adalah Ruby Gem yang dibuat oleh tim Gemnasium yang bisa mem-parsing (tetapi tidak semua) changelog proyek open source.

Bagaimana dengan Rilis YANKED (rilis yang dibatalkan)?

Rilis yang dibatalkan adalah rilis yang dibatalkan, bisa jadi karena ada bug yang fatal dan permasalahan keamanan. Versi ini sering tidak dimasukkan ke changelog, padahal seharusnya ditulis sebagaimana berikut.

## 0.0.5 - 2014-12-13 [YANKED/DIBATALKAN]

Tag [YANKED/DIBATALKAN] ditulis dengan jelas supaya orang memperhatikannya, dan dikurung dengan kurung kotak supaya mudah untuk diparse.

Bolehkah Menulis Ulang Changelog?

Tentu saja, ada banyak alasan bagus untuk menulis ulang changelog, salah satunya untuk rilis-rilis yang lupa untuk dituliskan di beberapa proyek.

Juga sangat mungkin saat menulis ulang, kalian ingat tentang perubahan yang bisa membuat sistem tidak bekerja yang belum dituliskan. Dalam hal ini, sangat penting untuk mengubah changelog supaya datanya lebih akurat.

Bagaimana Saya Bisa Berkontribusi?

Dokumen ini bukan kebenaran absolut, ini hanyalah opini yang dikumpulkan dari beberapa informasi dan contoh yang kami kumpulkan.

Ini karena kami ingin komunitas terus berdiskusi untuk mencapai konsensus yang terbaik untuk pencatatan changelog.

Jadi silahkan, kirimkan saran.

Percakapan

Kami mengisi acara di Podcast Changelog untuk berbicara tentang kenapa maintainer dan kontributor harus peduli dengan changelog, dan motivasi dari proyek ini.