Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: generate changelog based on conventional commits #5487

Merged
merged 8 commits into from May 16, 2023

Conversation

nflaig
Copy link
Member

@nflaig nflaig commented May 12, 2023

Motivation

More structured and readable Changelog.

Part of #1773 and follow up to #5342 which already enforces conventional commit PR titles.

Description

  • Predefined changelog sections
  • Sort commits by type and scope
    • assign each commit to section based on type
    • group commits by scope within each section
  • Update PR title checker types based on predefined sections
  • Update known authors

Running the following command will produce this CHANGELOG.md

node scripts/generate_changelog.mjs v1.8.0 ae3fda6548e83be3994197ad2961d798c01c2975 CHANGELOG.md

Related resources

@nflaig nflaig requested a review from a team as a code owner May 12, 2023 12:18
dapplion
dapplion previously approved these changes May 12, 2023
Copy link
Contributor

@dapplion dapplion left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@github-actions
Copy link
Contributor

github-actions bot commented May 12, 2023

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: e251a68 Previous: f417c35 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 845.01 us/op 469.27 us/op 1.80
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 43.750 us/op 45.085 us/op 0.97
BLS verify - blst-native 1.1827 ms/op 1.2044 ms/op 0.98
BLS verifyMultipleSignatures 3 - blst-native 2.4050 ms/op 2.4535 ms/op 0.98
BLS verifyMultipleSignatures 8 - blst-native 5.1590 ms/op 5.2710 ms/op 0.98
BLS verifyMultipleSignatures 32 - blst-native 18.660 ms/op 19.142 ms/op 0.97
BLS aggregatePubkeys 32 - blst-native 24.956 us/op 25.377 us/op 0.98
BLS aggregatePubkeys 128 - blst-native 97.919 us/op 99.156 us/op 0.99
getAttestationsForBlock 55.187 ms/op 53.643 ms/op 1.03
isKnown best case - 1 super set check 260.00 ns/op 250.00 ns/op 1.04
isKnown normal case - 2 super set checks 254.00 ns/op 242.00 ns/op 1.05
isKnown worse case - 16 super set checks 257.00 ns/op 244.00 ns/op 1.05
CheckpointStateCache - add get delete 4.9040 us/op 4.9060 us/op 1.00
validate gossip signedAggregateAndProof - struct 2.7481 ms/op 2.7595 ms/op 1.00
validate gossip attestation - struct 1.3011 ms/op 1.3154 ms/op 0.99
pickEth1Vote - no votes 1.2287 ms/op 1.2186 ms/op 1.01
pickEth1Vote - max votes 10.585 ms/op 8.4420 ms/op 1.25
pickEth1Vote - Eth1Data hashTreeRoot value x2048 8.5251 ms/op 8.3446 ms/op 1.02
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 14.843 ms/op 13.069 ms/op 1.14
pickEth1Vote - Eth1Data fastSerialize value x2048 637.50 us/op 625.64 us/op 1.02
pickEth1Vote - Eth1Data fastSerialize tree x2048 7.1832 ms/op 4.4769 ms/op 1.60
bytes32 toHexString 488.00 ns/op 475.00 ns/op 1.03
bytes32 Buffer.toString(hex) 340.00 ns/op 336.00 ns/op 1.01
bytes32 Buffer.toString(hex) from Uint8Array 547.00 ns/op 541.00 ns/op 1.01
bytes32 Buffer.toString(hex) + 0x 345.00 ns/op 334.00 ns/op 1.03
Object access 1 prop 0.16700 ns/op 0.16000 ns/op 1.04
Map access 1 prop 0.16000 ns/op 0.16900 ns/op 0.95
Object get x1000 6.6640 ns/op 6.6120 ns/op 1.01
Map get x1000 0.61000 ns/op 0.60200 ns/op 1.01
Object set x1000 54.580 ns/op 50.964 ns/op 1.07
Map set x1000 43.287 ns/op 42.970 ns/op 1.01
Return object 10000 times 0.23440 ns/op 0.23110 ns/op 1.01
Throw Error 10000 times 4.0910 us/op 4.1105 us/op 1.00
fastMsgIdFn sha256 / 200 bytes 3.4130 us/op 3.3550 us/op 1.02
fastMsgIdFn h32 xxhash / 200 bytes 281.00 ns/op 274.00 ns/op 1.03
fastMsgIdFn h64 xxhash / 200 bytes 394.00 ns/op 387.00 ns/op 1.02
fastMsgIdFn sha256 / 1000 bytes 11.429 us/op 11.365 us/op 1.01
fastMsgIdFn h32 xxhash / 1000 bytes 404.00 ns/op 396.00 ns/op 1.02
fastMsgIdFn h64 xxhash / 1000 bytes 464.00 ns/op 458.00 ns/op 1.01
fastMsgIdFn sha256 / 10000 bytes 102.79 us/op 102.31 us/op 1.00
fastMsgIdFn h32 xxhash / 10000 bytes 1.8820 us/op 1.9020 us/op 0.99
fastMsgIdFn h64 xxhash / 10000 bytes 1.3200 us/op 1.3390 us/op 0.99
enrSubnets - fastDeserialize 64 bits 1.2830 us/op 1.2530 us/op 1.02
enrSubnets - ssz BitVector 64 bits 496.00 ns/op 474.00 ns/op 1.05
enrSubnets - fastDeserialize 4 bits 177.00 ns/op 163.00 ns/op 1.09
enrSubnets - ssz BitVector 4 bits 496.00 ns/op 472.00 ns/op 1.05
prioritizePeers score -10:0 att 32-0.1 sync 2-0 100.71 us/op 99.646 us/op 1.01
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 134.33 us/op 136.26 us/op 0.99
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 179.12 us/op 155.32 us/op 1.15
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 297.93 us/op 295.23 us/op 1.01
prioritizePeers score 0:0 att 64-1 sync 4-1 352.13 us/op 353.46 us/op 1.00
array of 16000 items push then shift 1.6028 us/op 1.6406 us/op 0.98
LinkedList of 16000 items push then shift 8.7650 ns/op 8.7760 ns/op 1.00
array of 16000 items push then pop 72.277 ns/op 75.526 ns/op 0.96
LinkedList of 16000 items push then pop 8.4220 ns/op 8.5280 ns/op 0.99
array of 24000 items push then shift 2.3282 us/op 2.3515 us/op 0.99
LinkedList of 24000 items push then shift 8.6120 ns/op 8.6080 ns/op 1.00
array of 24000 items push then pop 71.680 ns/op 74.515 ns/op 0.96
LinkedList of 24000 items push then pop 8.3550 ns/op 8.4460 ns/op 0.99
intersect bitArray bitLen 8 13.021 ns/op 13.123 ns/op 0.99
intersect array and set length 8 73.604 ns/op 74.361 ns/op 0.99
intersect bitArray bitLen 128 43.351 ns/op 43.593 ns/op 0.99
intersect array and set length 128 1.0122 us/op 1.0269 us/op 0.99
Buffer.concat 32 items 2.5550 us/op 2.5890 us/op 0.99
Uint8Array.set 32 items 2.0490 us/op 2.0850 us/op 0.98
pass gossip attestations to forkchoice per slot 2.2557 ms/op 2.5184 ms/op 0.90
computeDeltas 2.9275 ms/op 2.9698 ms/op 0.99
computeProposerBoostScoreFromBalances 1.7838 ms/op 1.7552 ms/op 1.02
altair processAttestation - 250000 vs - 7PWei normalcase 2.0603 ms/op 2.1457 ms/op 0.96
altair processAttestation - 250000 vs - 7PWei worstcase 3.2740 ms/op 3.3269 ms/op 0.98
altair processAttestation - setStatus - 1/6 committees join 128.11 us/op 137.68 us/op 0.93
altair processAttestation - setStatus - 1/3 committees join 266.35 us/op 277.87 us/op 0.96
altair processAttestation - setStatus - 1/2 committees join 350.92 us/op 367.53 us/op 0.95
altair processAttestation - setStatus - 2/3 committees join 452.23 us/op 463.61 us/op 0.98
altair processAttestation - setStatus - 4/5 committees join 630.59 us/op 656.71 us/op 0.96
altair processAttestation - setStatus - 100% committees join 744.05 us/op 758.30 us/op 0.98
altair processBlock - 250000 vs - 7PWei normalcase 15.981 ms/op 18.390 ms/op 0.87
altair processBlock - 250000 vs - 7PWei normalcase hashState 26.481 ms/op 23.991 ms/op 1.10
altair processBlock - 250000 vs - 7PWei worstcase 45.670 ms/op 52.627 ms/op 0.87
altair processBlock - 250000 vs - 7PWei worstcase hashState 65.265 ms/op 63.375 ms/op 1.03
phase0 processBlock - 250000 vs - 7PWei normalcase 2.0196 ms/op 1.9473 ms/op 1.04
phase0 processBlock - 250000 vs - 7PWei worstcase 27.544 ms/op 28.090 ms/op 0.98
altair processEth1Data - 250000 vs - 7PWei normalcase 418.74 us/op 461.40 us/op 0.91
vc - 250000 eb 1 eth1 1 we 0 wn 0 - smpl 15 6.7790 us/op 6.6430 us/op 1.02
vc - 250000 eb 0.95 eth1 0.1 we 0.05 wn 0 - smpl 219 19.237 us/op 19.790 us/op 0.97
vc - 250000 eb 0.95 eth1 0.3 we 0.05 wn 0 - smpl 42 8.0820 us/op 8.2530 us/op 0.98
vc - 250000 eb 0.95 eth1 0.7 we 0.05 wn 0 - smpl 18 6.1500 us/op 6.6340 us/op 0.93
vc - 250000 eb 0.1 eth1 0.1 we 0 wn 0 - smpl 1020 74.020 us/op 78.666 us/op 0.94
vc - 250000 eb 0.03 eth1 0.03 we 0 wn 0 - smpl 11777 592.45 us/op 630.55 us/op 0.94
vc - 250000 eb 0.01 eth1 0.01 we 0 wn 0 - smpl 16384 909.64 us/op 908.03 us/op 1.00
vc - 250000 eb 0 eth1 0 we 0 wn 0 - smpl 16384 831.19 us/op 870.52 us/op 0.95
vc - 250000 eb 0 eth1 0 we 0 wn 0 nocache - smpl 16384 2.1262 ms/op 2.3116 ms/op 0.92
vc - 250000 eb 0 eth1 1 we 0 wn 0 - smpl 16384 1.4481 ms/op 1.5135 ms/op 0.96
vc - 250000 eb 0 eth1 1 we 0 wn 0 nocache - smpl 16384 3.5885 ms/op 3.8361 ms/op 0.94
Tree 40 250000 create 310.50 ms/op 305.14 ms/op 1.02
Tree 40 250000 get(125000) 173.78 ns/op 184.94 ns/op 0.94
Tree 40 250000 set(125000) 830.59 ns/op 982.57 ns/op 0.85
Tree 40 250000 toArray() 16.487 ms/op 19.163 ms/op 0.86
Tree 40 250000 iterate all - toArray() + loop 16.708 ms/op 19.352 ms/op 0.86
Tree 40 250000 iterate all - get(i) 65.020 ms/op 71.136 ms/op 0.91
MutableVector 250000 create 10.936 ms/op 9.3434 ms/op 1.17
MutableVector 250000 get(125000) 6.0930 ns/op 6.4200 ns/op 0.95
MutableVector 250000 set(125000) 229.53 ns/op 246.29 ns/op 0.93
MutableVector 250000 toArray() 2.5543 ms/op 2.6010 ms/op 0.98
MutableVector 250000 iterate all - toArray() + loop 2.6548 ms/op 2.6708 ms/op 0.99
MutableVector 250000 iterate all - get(i) 1.4441 ms/op 1.4983 ms/op 0.96
Array 250000 create 2.3618 ms/op 2.3851 ms/op 0.99
Array 250000 clone - spread 1.0840 ms/op 1.1337 ms/op 0.96
Array 250000 get(125000) 0.53800 ns/op 0.56300 ns/op 0.96
Array 250000 set(125000) 0.60700 ns/op 0.63700 ns/op 0.95
Array 250000 iterate all - loop 105.43 us/op 92.091 us/op 1.14
effectiveBalanceIncrements clone Uint8Array 300000 31.590 us/op 24.603 us/op 1.28
effectiveBalanceIncrements clone MutableVector 300000 348.00 ns/op 351.00 ns/op 0.99
effectiveBalanceIncrements rw all Uint8Array 300000 167.64 us/op 166.05 us/op 1.01
effectiveBalanceIncrements rw all MutableVector 300000 79.350 ms/op 80.085 ms/op 0.99
phase0 afterProcessEpoch - 250000 vs - 7PWei 112.89 ms/op 111.71 ms/op 1.01
phase0 beforeProcessEpoch - 250000 vs - 7PWei 41.913 ms/op 40.076 ms/op 1.05
altair processEpoch - mainnet_e81889 326.62 ms/op 317.60 ms/op 1.03
mainnet_e81889 - altair beforeProcessEpoch 68.693 ms/op 67.022 ms/op 1.02
mainnet_e81889 - altair processJustificationAndFinalization 17.677 us/op 17.597 us/op 1.00
mainnet_e81889 - altair processInactivityUpdates 5.4070 ms/op 5.1579 ms/op 1.05
mainnet_e81889 - altair processRewardsAndPenalties 49.779 ms/op 65.449 ms/op 0.76
mainnet_e81889 - altair processRegistryUpdates 2.5030 us/op 2.4360 us/op 1.03
mainnet_e81889 - altair processSlashings 532.00 ns/op 457.00 ns/op 1.16
mainnet_e81889 - altair processEth1DataReset 618.00 ns/op 472.00 ns/op 1.31
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.2248 ms/op 1.2318 ms/op 0.99
mainnet_e81889 - altair processSlashingsReset 4.5880 us/op 3.9290 us/op 1.17
mainnet_e81889 - altair processRandaoMixesReset 4.2530 us/op 6.4900 us/op 0.66
mainnet_e81889 - altair processHistoricalRootsUpdate 668.00 ns/op 610.00 ns/op 1.10
mainnet_e81889 - altair processParticipationFlagUpdates 2.4870 us/op 2.2990 us/op 1.08
mainnet_e81889 - altair processSyncCommitteeUpdates 672.00 ns/op 484.00 ns/op 1.39
mainnet_e81889 - altair afterProcessEpoch 125.06 ms/op 123.15 ms/op 1.02
phase0 processEpoch - mainnet_e58758 341.85 ms/op 356.19 ms/op 0.96
mainnet_e58758 - phase0 beforeProcessEpoch 135.09 ms/op 131.04 ms/op 1.03
mainnet_e58758 - phase0 processJustificationAndFinalization 18.377 us/op 15.656 us/op 1.17
mainnet_e58758 - phase0 processRewardsAndPenalties 53.891 ms/op 61.908 ms/op 0.87
mainnet_e58758 - phase0 processRegistryUpdates 8.2310 us/op 7.2050 us/op 1.14
mainnet_e58758 - phase0 processSlashings 671.00 ns/op 452.00 ns/op 1.48
mainnet_e58758 - phase0 processEth1DataReset 503.00 ns/op 460.00 ns/op 1.09
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.0084 ms/op 982.90 us/op 1.03
mainnet_e58758 - phase0 processSlashingsReset 3.7650 us/op 3.8070 us/op 0.99
mainnet_e58758 - phase0 processRandaoMixesReset 5.1460 us/op 4.9720 us/op 1.03
mainnet_e58758 - phase0 processHistoricalRootsUpdate 925.00 ns/op 540.00 ns/op 1.71
mainnet_e58758 - phase0 processParticipationRecordUpdates 5.7600 us/op 3.6910 us/op 1.56
mainnet_e58758 - phase0 afterProcessEpoch 96.323 ms/op 95.280 ms/op 1.01
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.2582 ms/op 1.2240 ms/op 1.03
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.4832 ms/op 1.5697 ms/op 0.94
altair processInactivityUpdates - 250000 normalcase 23.920 ms/op 25.694 ms/op 0.93
altair processInactivityUpdates - 250000 worstcase 26.247 ms/op 26.444 ms/op 0.99
phase0 processRegistryUpdates - 250000 normalcase 8.6360 us/op 5.5460 us/op 1.56
phase0 processRegistryUpdates - 250000 badcase_full_deposits 290.29 us/op 238.94 us/op 1.21
phase0 processRegistryUpdates - 250000 worstcase 0.5 135.78 ms/op 112.19 ms/op 1.21
altair processRewardsAndPenalties - 250000 normalcase 72.908 ms/op 67.313 ms/op 1.08
altair processRewardsAndPenalties - 250000 worstcase 72.923 ms/op 71.501 ms/op 1.02
phase0 getAttestationDeltas - 250000 normalcase 7.5050 ms/op 6.5656 ms/op 1.14
phase0 getAttestationDeltas - 250000 worstcase 7.2653 ms/op 6.6235 ms/op 1.10
phase0 processSlashings - 250000 worstcase 4.0187 ms/op 3.1931 ms/op 1.26
altair processSyncCommitteeUpdates - 250000 194.77 ms/op 169.07 ms/op 1.15
BeaconState.hashTreeRoot - No change 291.00 ns/op 258.00 ns/op 1.13
BeaconState.hashTreeRoot - 1 full validator 56.457 us/op 51.507 us/op 1.10
BeaconState.hashTreeRoot - 32 full validator 616.39 us/op 505.14 us/op 1.22
BeaconState.hashTreeRoot - 512 full validator 7.2397 ms/op 5.3571 ms/op 1.35
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 72.316 us/op 61.834 us/op 1.17
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 935.25 us/op 904.34 us/op 1.03
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 13.050 ms/op 11.026 ms/op 1.18
BeaconState.hashTreeRoot - 1 balances 57.754 us/op 46.862 us/op 1.23
BeaconState.hashTreeRoot - 32 balances 474.39 us/op 438.55 us/op 1.08
BeaconState.hashTreeRoot - 512 balances 6.0102 ms/op 3.9764 ms/op 1.51
BeaconState.hashTreeRoot - 250000 balances 83.979 ms/op 75.190 ms/op 1.12
aggregationBits - 2048 els - zipIndexesInBitList 31.116 us/op 15.108 us/op 2.06
regular array get 100000 times 36.337 us/op 32.402 us/op 1.12
wrappedArray get 100000 times 36.956 us/op 32.374 us/op 1.14
arrayWithProxy get 100000 times 17.533 ms/op 16.742 ms/op 1.05
ssz.Root.equals 643.00 ns/op 534.00 ns/op 1.20
byteArrayEquals 628.00 ns/op 513.00 ns/op 1.22
shuffle list - 16384 els 7.5892 ms/op 6.6500 ms/op 1.14
shuffle list - 250000 els 109.50 ms/op 97.558 ms/op 1.12
processSlot - 1 slots 10.401 us/op 8.6620 us/op 1.20
processSlot - 32 slots 1.4920 ms/op 1.3023 ms/op 1.15
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 41.752 ms/op 35.685 ms/op 1.17
getCommitteeAssignments - req 1 vs - 250000 vc 3.1677 ms/op 2.8929 ms/op 1.10
getCommitteeAssignments - req 100 vs - 250000 vc 4.4343 ms/op 4.1057 ms/op 1.08
getCommitteeAssignments - req 1000 vs - 250000 vc 4.7711 ms/op 4.4416 ms/op 1.07
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 5.3700 ns/op 4.2500 ns/op 1.26
state getBlockRootAtSlot - 250000 vs - 7PWei 1.0966 us/op 1.0171 us/op 1.08
computeProposers - vc 250000 12.662 ms/op 10.587 ms/op 1.20
computeEpochShuffling - vc 250000 119.48 ms/op 100.23 ms/op 1.19
getNextSyncCommittee - vc 250000 201.60 ms/op 172.89 ms/op 1.17
computeSigningRoot for AttestationData 15.790 us/op 12.954 us/op 1.22
hash AttestationData serialized data then Buffer.toString(base64) 2.6407 us/op 2.3680 us/op 1.12
toHexString serialized data 1.4560 us/op 1.0335 us/op 1.41
Buffer.toString(base64) 382.18 ns/op 307.29 ns/op 1.24

by benchmarkbot/action

/**
* @type {Record<string, {heading: string; commitsByScope: Record<string, string[]>}>}
*/
const sections = {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking for feedback on what sections, headings and ordering we want to use here.

continue;
}

const [, type, scope, _breaking, subject] = conventionalCommit;
Copy link
Member Author

@nflaig nflaig May 12, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Breaking changes are not highlighted at the moment, possible solution could be to have an extra section ## Breaking Changes but based on how we used ! so far this would be too noisy as there are too many changes marked as breaking which are not user facing.

I think if we can restrain breaking commits as highlighted by ! to user facing changes it would be valuable as it provides a quick way for operators (or other downstream tooling) to just check this section to know if they are affected by any of the introduced changes.

Potential solutions to highlight breaking changes

  • separate Section (## Breaking Changes)
  • prefixing or suffixing line (**BREAKING CHANGE:** or [BREAKING])
  • using some kind of emoji at beginning of the line (⚠️)

Copy link
Member

@philknows philknows May 16, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have no strong opinion to either method. However as you already mentioned, we do have a lot of breaking changes which isn't necessarily useful to a non-developer user/operator of Lodestar. If it does affect a user, it'll likely be highlighted already on my manual summaries.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's not highlight breaking changes in the Changelog for now, until we have more clarity on it. Updated description of #5433 to discuss it there.

wemeetagain
wemeetagain previously approved these changes May 15, 2023
/**
* @type {Record<string, {heading: string; commitsByScope: Record<string, string[]>}>}
*/
const sections = {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Order and wording LGTM

const isPrCommitRg = /\(#\d+\)/;
const conventionalCommitRg = /^([a-z]+)(?:\((.*)\))?(?:(!))?: (.*)$/;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thats pretty a pretty fancy regexp. Did this get pulled from somewhere? Perhaps we can unit test it but that feels silly honestly for a workflow script...

Found this thread and it had a a pretty cool one in it to support emojis.

Not something I feel strongly about but thought was worth a mention. I put my faith in your trusting hands sir

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not in favor of adding tests for the script. I have verified that the output is correct.

As I also do not trust any regex, I created some test cases which I just executed locally.

a pretty cool one in it to support emojis

The regex allows emojis in the commit message itself. It is really not that strict, a more strict format will be enforced by the PR title checker.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added console logs to print out ignored commits (dc26df1), this should be sufficient for now to verify that the regex works and there are no false positives.

const authorEmail = shell(`git log --format='%ae' ${commitHash}^!`);
const authorName = shell(`git log --format='%an' ${commitHash}^!`);
const login = getCommitAuthorLogin(commitHash, authorEmail, authorName);

commitListStr += `- ${subject} (@${login})\n`;
const formattedCommit = `- ${scope ? `**${scope}:** ` : ""}${subject} (@${login})\n`;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Very nice touch looking up the author login name!! Always great to provide visibility to contributors

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, it is pretty nice, can easily see contributors of a release. That was already there in our initial version and does not seem to be easily supported by any other tools like release-please or semantic-release which is another good reason besides added complexity to not introduce additional tooling (for now).

matthewkeil
matthewkeil previously approved these changes May 15, 2023
Copy link
Member

@matthewkeil matthewkeil left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Excellent work! A couple of really nice touches in there!

@nflaig nflaig merged commit 1602f67 into unstable May 16, 2023
11 checks passed
@nflaig nflaig deleted the nflaig/conv-commit-changelog branch May 16, 2023 15:37
@wemeetagain
Copy link
Member

🎉 This PR is included in v1.9.0 🎉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants