Duplicate changelog content
rotavio opened this issue · comments
Hello! We are trying to install news-fragment, and, for some reason, the previous contents of the CHANGELOG file is being duplicate at the begining.
This is the changelog created after the first run:
[//]: # (s-0.8.0)
# 0.8.0 (2022-10-13)
## Features
* New feature A.
[//]: # (e-0.8.0)
On following runs, this content is duplicated before the new text:
[//]: # (s-0.8.0)
# 0.8.0 (2022-10-13)
## Features
* New feature A.
[//]: # (e-0.8.0)
[//]: # (s-0.9.0)
# 0.9.0 (2022-10-13)
## Features
* New feature B.
[//]: # (e-0.9.0)
[//]: # (s-0.8.0)
# 0.8.0 (2022-10-13)
## Features
* New feature A.
[//]: # (e-0.8.0)
This occurs using both release-it and as standalone using burn.
We are using Node 16.16.0, and here is our config file:
.release-it.js
module.exports = {
"git": {
"changelog": false,
"requireCleanWorkingDir": false,
"requireUpstream": false,
"commit": true,
"tag": false,
"push": false,
},
"plugins": {
"news-fragments": {
"changelogFile": "CHANGELOG.md",
"fragmentsFolder": ".changes",
},
},
"npm": {
"publish": false,
},
"github": {
"release": false,
},
"gitlab": {
"release": false,
}
}```
Are we missing something here?
@jairhenrique, can you help, please?
@rotavio can you test this settings in package.json
instead of .release-it.js
?
+1
@rotavio @RayaneSlimani can you give more inputs about your environment, other configurations (package.json/os)?
Following this steps, I couldn't reproduce the problem.
⟩ nvm use 16.16.0
Now using Node v16.16.0 (npm 8.11.0) ~/.local/share/nvm/v16.16.0/bin/node
⟩ npm install --save news-fragments
# with the same content
⟩ touch .release-it.js
⟩ mkdir .changes
⟩ git init .
⟩ git commit -m "start"
⟩ npx news-fragments create misc "Feature A"
⟩ git add .
⟩ git commit -m "create feature a"
⟩ npx release-it
Empty changelog
? Select increment (next version): minor (0.1.0)
Changeset:
D .changes/1675166809506.misc
M package-lock.json
M package.json
? Commit (Release 0.1.0)? Yes
🏁 Done (in 15s.)
⟩ cat CHANGELOG.md
[//]: # (s-0.1.0)
# [0.1.0] - (2023-01-31)
## Misc
* Feature A.
[//]: # (e-0.1.0)
# CHANGELOG.md was not in git yet
⟩ git add .
⟩ git commit -m "create chagelog a"
⟩ npx news-fragments create misc "Feature B"
⟩ git add .
⟩ git commit -m "create chagelog b"
⟩ npx release-it
🚀 Let's release undefined (currently at 0.1.0)
Empty changelog
? Select increment (next version): minor (0.2.0)
Changeset:
D .changes/1675166884436.misc
M CHANGELOG.md
M package-lock.json
M package.json
? Commit (Release 0.2.0)? Yes
🏁 Done (in 11s.)
all right
⟩ cat CHANGELOG.md
[//]: # (s-0.2.0)
# [0.2.0] - (2023-01-31)
## Misc
* Feature B.
[//]: # (e-0.2.0)
[//]: # (s-0.1.0)
# [0.1.0] - (2023-01-31)
## Misc
* Feature A.
[//]: # (e-0.1.0)
Thank's @jairhenrique, but i'm stuck :/
node : v18.13.0
yarn : 1.22.19
npm : 8.19.3
Ubuntu 22.10
npx news-fragments create removals 'Removals 1'
npx news-fragments create removals 'Removals 2'
npx news-fragments create removals 'Removals 3'
git add *
git commit -m ...
npx release-it
...
CHANGELOG.md is ok for now
[//]: # (s-2.0.2)
### 🪄 : 2.0.2 - [ 📅 : 2023-01-31]
## ❌ Removals
* 📋 Removals 1.
* 📋 Removals 2.
* 📋 Removals 3.
[//]: # (e-2.0.2)
Do the same for test for new release
npx news-fragments create removals 'Removals 1'
npx news-fragments create removals 'Removals 2'
npx news-fragments create removals 'Removals 3'
git add *
git commit -m ...
npx release-it
...
changelog update to
CHANGELOG.md
[//]: # (s-2.0.2)
### 🪄 : 2.0.2 - [ 📅 : 2023-01-31]
## ❌ Removals
* 📋 Removals 1.
* 📋 Removals 2.
* 📋 Removals 3.
[//]: # (e-2.0.2)
[//]: # (s-2.0.3)
### 🪄 : 2.0.3 - [ 📅 : 2023-01-31]
## ❌ Removals
* 📋 Removals 1.
* 📋 Removals 2.
* 📋 Removals 3.
[//]: # (e-2.0.3)
[//]: # (s-2.0.2)
### 🪄 : 2.0.2 - [ 📅 : 2023-01-31]
## ❌ Removals
* 📋 Removals 1.
* 📋 Removals 2.
* 📋 Removals 3.
[//]: # (e-2.0.2)
My package.json
"release-it": "@^15.6.0"
"news-fragments": "^2.0.10",
"release-it": {
"plugins": {
"news-fragments": {
"changelogFile": "CHANGELOG.md",
"changelogTemplate": "### 🪄 : {{newVersion}} - [ 📅 : {{bumpDate}}]\n{{#fragments}}## {{title}}\n{{#each fragmentEntries}}* 📋 {{this}}\n{{/each}}{{/fragments}}",
"fragmentsTypes": [
{
"title": "📢 New features",
"extension": "feature"
},
{
"title": "🐞 Bugfixes",
"extension": "bugfix"
},
{
"title": "😉 Improvements",
"extension": "improvements"
},
{
"title": "🧪 Tests & dependencies",
"extension": "test"
},
{
"title": "📄 Misc",
"extension": "misc"
},
{
"title": "❌ Removals",
"extension": "removals"
}
]
}
}
},
@RayaneSlimani I really can't reproduce this error :(
Can you do a test for me?
On your .node_modules/news-fragments/src/build-template.js
can you apply this diff and run release-it
?
diff --git a/src/build-template.js b/src/build-template.js
index 766cd83..d5481f7 100644
--- a/src/build-template.js
+++ b/src/build-template.js
@@ -18,15 +18,11 @@ export const renderTemplate = function (changelogTemplate, data, version) {
};
export const saveChangelogToFile = function (filePath, renderedTemplate) {
- const fileDescriptor = fs.openSync(filePath, "a+");
-
const oldData = fs.readFileSync(filePath);
const newData = new Buffer.from(renderedTemplate);
- fs.writeSync(fileDescriptor, newData, 0, newData.length, 0);
- fs.writeSync(fileDescriptor, oldData, 0, oldData.length, newData.length);
-
- fs.closeSync(fileDescriptor);
+ fs.unlinkSync(filePath);
+ fs.appendFileSync(filePath, newData + oldData);
};
Error when i npx news-fragments burn 2.0.0
, i got this error now,
Error: ENOENT: no such file or directory, open 'CHANGELOG.md'
at Object.openSync (node:fs:600:3)
at Object.readFileSync (node:fs:468:35)
at saveChangelogToFile (.../node_modules/news-fragments/src/build-template.js:23:22)
at burn ((.../node_modules/news-fragments/src/cli/burn.js:46:3)
at .../node_modules/news-fragments/src/cli/index.js:46:5
export const saveChangelogToFile = function (filePath, renderedTemplate) {
// const fileDescriptor = fs.openSync(filePath, "a+");
const oldData = fs.readFileSync(filePath);
const newData = new Buffer.from(renderedTemplate);
// fs.writeSync(fileDescriptor, newData, 0, newData.length, 0);
// fs.writeSync(fileDescriptor, oldData, 0, oldData.length, newData.length);
// fs.closeSync(fileDescriptor);
fs.unlinkSync(filePath);
fs.appendFileSync(filePath, newData + oldData);
};
update :
It's ok when i hav already CHANGELOG.md created. :D
maybe add a catch when the file does not exist ? and create it ?
export const saveChangelogToFile = function (filePath, renderedTemplate) {
// const fileDescriptor = fs.openSync(filePath, "a+");
if (!fs.existsSync(filePath)) {
// asynchronously create a directory
fs.writeFileSync(filePath, renderedTemplate)
// first burn will be two fold so we return.
return
}
const oldData = fs.readFileSync(filePath);
const newData = new Buffer.from(renderedTemplate);
// fs.writeSync(fileDescriptor, newData, 0, newData.length, 0);
// fs.writeSync(fileDescriptor, oldData, 0, oldData.length, newData.length);
// fs.closeSync(fileDescriptor);
// Check if the file exists
fs.unlinkSync(filePath);
fs.appendFileSync(filePath, newData + oldData);
};
@rotavio @RayaneSlimani 2.0.11 has been released, please test it!
@rotavio update ur package ;)
https://www.npmjs.com/package/news-fragments/v/2.0.11
Ty @jairhenrique for this quick release
render after 4 test :D
[//]: # (s-2.0.3)
### 🪄 : 2.0.3 - [ 📅 : 2023-02-01]
## ❌ Removals
* 📋 Removals 1.
* 📋 Removals 2.
* 📋 Removals 3.
[//]: # (e-2.0.3)
[//]: # (s-2.0.2)
### 🪄 : 2.0.2 - [ 📅 : 2023-02-01]
## ❌ Removals
* 📋 Removals 1.
* 📋 Removals 2.
[//]: # (e-2.0.2)
[//]: # (s-2.0.1)
### 🪄 : 2.0.1 - [ 📅 : 2023-02-01]
## ❌ Removals
* 📋 Removals 1.
* 📋 Removals 2.
[//]: # (e-2.0.1)
[//]: # (s-2.0.0)
### 🪄 : 2.0.0 - [ 📅 : 2023-02-01]
## ❌ Removals
* 📋 Removals 1.
* 📋 Removals 2.
* 📋 Removals 3.
[//]: # (e-2.0.0)
➜ git:(master) ✗ npx news-fragments create removals 'Removals 1'
Fragment fragments/1675254695016.removals created with success!%
➜ git:(master) ✗ npx news-fragments create removals 'Removals 2'
Fragment fragments/1675254702705.removals created with success!%
➜ git:(master) ✗ npx news-fragments create removals 'Removals 3'
Fragment fragments/1675254705680.removals created with success!%
➜ git:(master) ✗ npx news-fragments burn 2.0.0
1 fragments burned in CHANGELOG.md%
➜ git:(master) ✗ npx news-fragments create removals 'Removals 1'
Fragment fragments/1675254727381.removals created with success!%
➜ git:(master) ✗ npx news-fragments create removals 'Removals 2'
Fragment fragments/1675254729772.removals created with success!%
➜ git:(master) ✗ npx news-fragments burn 2.0.1
1 fragments burned in CHANGELOG.md%
➜ git:(master) ✗ npx news-fragments create removals 'Removals 1'
Fragment fragments/1675254736204.removals created with success!%
➜ git:(master) ✗ npx news-fragments create removals 'Removals 2'
Fragment fragments/1675254738100.removals created with success!%
➜ git:(master) ✗ npx news-fragments burn 2.0.2
1 fragments burned in CHANGELOG.md%
➜ git:(master) ✗ npx news-fragments create removals 'Removals 1'
Fragment fragments/1675254748767.removals created with success!%
➜ git:(master) ✗ npx news-fragments create removals 'Removals 2'
Fragment fragments/1675254750437.removals created with success!%
➜ git:(master) ✗ npx news-fragments create removals 'Removals 3'
Fragment fragments/1675254756444.removals created with success!%
➜ git:(master) ✗ npx news-fragments burn 2.0.3
1 fragments burned in CHANGELOG.md%
I will wait for @rotavio feedback before close this issue.
@jairhenrique For my part, issue is closed :)
@rotavio I will close this issue. If you have any problem, tell us.