[ci] Improve the final release artifact

This commit is contained in:
Nemo 2022-05-14 18:30:02 +05:30
parent 9114e918a0
commit 5dd903adde
9 changed files with 145 additions and 21 deletions

View File

@ -25,11 +25,7 @@ jobs:
tagging_message: "v${{ steps.update_data.outputs.version }}"
- name: Create Release
run: |
git diff --ignore-all-space -U0 HEAD^ *.csv|egrep -oe '^([+-]IN\w{10})' > /tmp/release.txt
echo "$(cat /tmp/release.txt | wc -l) Changes" > /tmp/release.md
echo '```diff' >> /tmp/release.md
cat /tmp/release.txt >> /tmp/release.md
echo '```' >> /tmp/release.md
gh release create "v${{ steps.update_data.outputs.version }}" --notes-file /tmp/release.md *.csv
pip install -r requirements.txt
make release "version=v${{ steps.update_data.outputs.version }}"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

3
.gitignore vendored
View File

@ -1,2 +1,3 @@
pup
pup.zip
release.md
pup.zip

View File

@ -5,6 +5,17 @@ all: INE INF IN9 update
INE INF IN9:
./fetch.sh $@
old:
git show HEAD^:INE.csv > /tmp/INE.csv
git show HEAD^:INF.csv > /tmp/INF.csv
git show HEAD^:IN9.csv > /tmp/IN9.csv
release.md: old
python3 diff.py > release.md
release: release.md
gh release create "$(version)" --notes-file release.md IN*.csv
update:
echo "::set-output name=version::$(version)"
sed -i "s/^version.*/version: $(version)/" CITATION.cff

View File

@ -40,14 +40,14 @@
},
{
"description": "Description for the security",
"example": "ITI MUTUAL FUND LIQUID FUND REG GROWTH",
"example": "UTI MUTUAL FUND LIQUID FUND REG GROWTH",
"name": "Description",
"title": "ISIN Description",
"title": "Security Description",
"type": "string"
},
{
"description": "Name of the issuer that issued this security",
"example": "ITI MUTUAL FUND",
"example": "UTI MUTUAL FUND",
"name": "Issuer",
"title": "Name of the Issuer",
"type": "string"
@ -56,7 +56,7 @@
"description": "Description of the type of security",
"example": "MUTUAL FUND UNIT (TRASE)",
"name": "Type",
"title": "Security Type",
"title": "Issuer Type",
"type": "string"
},
{
@ -88,14 +88,14 @@
},
{
"description": "Description for the security",
"example": "ITI MUTUAL FUND LIQUID FUND REG GROWTH",
"example": "UTI MUTUAL FUND LIQUID FUND REG GROWTH",
"name": "Description",
"title": "ISIN Description",
"title": "Security Description",
"type": "string"
},
{
"description": "Name of the issuer that issued this security",
"example": "ITI MUTUAL FUND",
"example": "UTI MUTUAL FUND",
"name": "Issuer",
"title": "Name of the Issuer",
"type": "string"
@ -104,7 +104,7 @@
"description": "Description of the type of security",
"example": "MUTUAL FUND UNIT (TRASE)",
"name": "Type",
"title": "Security Type",
"title": "Issuer Type",
"type": "string"
},
{
@ -136,14 +136,14 @@
},
{
"description": "Description for the security",
"example": "ITI MUTUAL FUND LIQUID FUND REG GROWTH",
"example": "UTI MUTUAL FUND LIQUID FUND REG GROWTH",
"name": "Description",
"title": "ISIN Description",
"title": "Security Description",
"type": "string"
},
{
"description": "Name of the issuer that issued this security",
"example": "ITI MUTUAL FUND",
"example": "UTI MUTUAL FUND",
"name": "Issuer",
"title": "Name of the Issuer",
"type": "string"
@ -152,7 +152,7 @@
"description": "Description of the type of security",
"example": "MUTUAL FUND UNIT (TRASE)",
"name": "Type",
"title": "Security Type",
"title": "Issuer Type",
"type": "string"
},
{

25
diff.py Normal file
View File

@ -0,0 +1,25 @@
from csv_diff import load_csv, compare
import json
from mako.template import Template
template = Template(filename='release.mako')
added,removed,changed = [],[],[]
def chunks(lst, n):
"""Yield successive n-sized chunks from lst."""
for i in range(0, len(lst), n):
yield lst[i:i + n]
for i in ['E', 'F', '9']:
diff = compare(
load_csv(open("/tmp/IN%s.csv" % i), key="ISIN"),
load_csv(open("IN%s.csv" % i), key="ISIN"),
True
)
# print(diff)
added += diff['added']
changed += diff['changed']
removed += diff['removed']
print(template.render(added=added, changed=changed, removed=removed))

View File

@ -53,7 +53,7 @@ CLASS="$1"
total=$(fetch_total_pages "$CLASS")
echo "::group::$CLASS (Total=$total)"
rm "$CLASS.csv"
cp header.csv "$CLASS.csv"
fetch_class "$CLASS" $total
echo "::endgroup::"

View File

@ -1 +1 @@
ISIN,Description,Issuer,"Security Type",Status
ISIN,Description,Issuer,Type,Status

1 ISIN Description Issuer Security Type Type Status

85
release.mako Normal file
View File

@ -0,0 +1,85 @@
## Generates a single diff for a single row, ignoring the Status field
<%def name="singlediff(row)">
@@ ${row['key']}
%for k in row['changes']:
%if k != 'Status':
-${k}:${row['changes'][k][0]}
+${k}:${row['changes'][k][1]}
%endif
%endfor
</%def>
## Get description from a changed row
## Either from the changed or unchanged portion
<%def name="description(row)">
% if 'Description' in row['unchanged']:
${row['unchanged']['Description']}
%else:
${row['changes']['Description'][1]}
%endif
</%def>
<h2>Additions</h2>
The following new ISINs were added:
ISIN|Description|Issuer|Type|Status
----|-----------|------|---------------|------
% for row in added:
`${row['ISIN']}`|${row['Description']}|${row['Issuer']}|${row['Type']}|${row['Status'].title()}
% endfor
<h2>Changes</h2>
The following ISINs changed their status:
<table>
<thead>
<tr>
<th>ISIN</th>
<th>Description</th>
<th>Old Status</th>
<th>New Status</th>
</tr>
</thead>
<tbody>
% for row in changed:
% if 'Status' in row['changes']:
<tr>
<td><code>${row['key']}</code></td>
<td>${description(row)}</td>
<td>${row['changes']['Status'][0].title()}</td>
<td>${row['changes']['Status'][1].title()}</td>
</tr>
% endif
% endfor
</tbody>
</table>
## This will usually contain the description
The following ISINs changed other fields:
```diff
% for row in changed:
% if 'Status' not in row['changes']:
${singlediff(row)}
% endif
% endfor
```
## Removals are currently happening accidentally because NSDL website returns a 5xx
%if len(removed) > 0:
<h2>Removals</h2>
The following ISINs were completely removed (likely in error):
ISIN|Description|Issuer|Type|Status
----|-----------|------|---------------|------
% for row in removed:
`${row['ISIN']}`|${row['Description']}|${row['Issuer']}|${row['Type']}|${row['Status'].title()}
% endfor
%endif

6
requirements.txt Normal file
View File

@ -0,0 +1,6 @@
click==8.1.3
csv-diff==1.1
dictdiffer==0.9.0
Mako==1.2.0
MarkupSafe==2.1.1
six==1.16.0