-
Notifications
You must be signed in to change notification settings - Fork 55
172 lines (150 loc) · 7.04 KB
/
erc-registry-indexer.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
name: ERC Registry Indexer
on:
push:
branches:
[
1081-erc-registry-phase-2-add-an-option-to-execute-the-indexing-tool-as-a-github-dispatch-workflow,
]
workflow_dispatch:
inputs:
HEDERA_NETWORK:
description: 'Target Hedera Network (e.g., previewnet, testnet, mainnet).'
required: true
MIRROR_NODE_URL:
description: 'Mirror Node Base URL (e.g., https://testnet.mirrornode.hedera.com).'
required: true
STARTING_POINT:
description: 'Starting Point (e.g., a contractId, a contract address, ect.). Leave empty to start from the beginning or from last saved starting point.'
required: false
jobs:
index-and-update:
name: Index ERC Contracts on Hedera ${{ github.event.inputs.HEDERA_NETWORK }} and Update Registry
runs-on: smart-contracts-linux-large
env:
INDEXER_PATH: ./tools/erc-repository-indexer/erc-contract-indexer
steps:
- name: Harden Runner
uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2
with:
egress-policy: audit
- name: Checkout repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
submodules: recursive
- name: Use Node.js [20]
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
with:
node-version: 20
- name: Set Environment Variables
run: |
echo "HEDERA_NETWORK=previewnet" >> ${{ env.INDEXER_PATH }}/.env
echo "MIRROR_NODE_URL=https://previewnet.mirrornode.hedera.com" >> ${{ env.INDEXER_PATH }}/.env
echo "STARTING_POINT=${{ github.event.inputs.STARTING_POINT }}" >> ${{ env.INDEXER_PATH }}/.env
- name: Install Dependencies
run: |
cd ${{env.INDEXER_PATH}}
npm install
- name: Backup Existing Registry
run: |
mkdir -p ${{ env.INDEXER_PATH }}/backup
if [ -d "${{ env.INDEXER_PATH }}/erc-registry/previewnet" ] && [ "$(ls -A ${{ env.INDEXER_PATH }}/erc-registry/previewnet/*.json 2>/dev/null)" ]; then
cp ${{ env.INDEXER_PATH }}/erc-registry/previewnet/*.json ${{ env.INDEXER_PATH }}/backup/
echo "Backup successful."
else
echo "No JSON files found to back up."
fi
- name: Start Timer
id: timer_start
run: echo "START_TIME=$(date +%s)" >> $GITHUB_ENV
- name: Start ERC Registry Indexer
run: |
cd ${{env.INDEXER_PATH}}
npm start
- name: Stop Timer
id: timer_end
run: echo "END_TIME=$(date +%s)" >> $GITHUB_ENV
- name: Calculate Duration
id: calculate_duration
run: |
DURATION=$((END_TIME - START_TIME))
if [ "$DURATION" -lt 60 ]; then
FORMATTED_DURATION="${DURATION} seconds"
elif [ "$DURATION" -lt 3600 ]; then
MINUTES=$((DURATION / 60))
SECONDS=$((DURATION % 60))
FORMATTED_DURATION="${MINUTES} minute(s) and ${SECONDS} second(s)"
else
HOURS=$((DURATION / 3600))
MINUTES=$(((DURATION % 3600) / 60))
FORMATTED_DURATION="${HOURS} hour(s) and ${MINUTES} minute(s)"
fi
echo "INDEXING_DURATION=${FORMATTED_DURATION}" >> $GITHUB_ENV
- name: Count New Records
id: count_records
run: |
cd ${{ env.INDEXER_PATH }}
# Determine the length of ERC-20 records
if [ -f backup/erc-20.json ]; then
node -e "console.log('backup erc20 lenth:', $(jq '. | length' backup/erc-20.json));"
node -e "console.log('backup erc721 lenth:', $(jq '. | length' backup/erc-721.json));"
NEW_ERC20_RECORDS=$(jq -s '.[1] - .[0] | length' backup/erc-20.json erc-registry/previewnet/erc-20.json)
node -e "console.log('NEW_ERC20_RECORDS:', $(jq -s '.[1] - .[0] | length' backup/erc-20.json erc-registry/previewnet/erc-20.json));"
else
NEW_ERC20_RECORDS=$(jq '. | length' erc-registry/previewnet/erc-20.json)
fi
# Determine the length of ERC-721 records
if [ -f backup/erc-721.json ]; then
NEW_ERC721_RECORDS=$(jq -s '.[1] - .[0] | length' backup/erc-721.json erc-registry/previewnet/erc-721.json)
else
NEW_ERC721_RECORDS=$(jq '. | length' erc-registry/previewnet/erc-721.json)
fi
# Export the results to GitHub environment variables
echo "NEW_ERC20_RECORDS=${NEW_ERC20_RECORDS}" >> $GITHUB_ENV
echo "NEW_ERC721_RECORDS=${NEW_ERC721_RECORDS}" >> $GITHUB_ENV
- name: Delete backup registry folder
run: |
if [ -d ${{ env.INDEXER_PATH }}/backup ]; then
rm -rf ${{ env.INDEXER_PATH }}/backup
echo "Deleted backup folder."
else
echo "backup folder not found, skipping deletion."
fi
- name: Import GPG Key
id: gpg_importer
uses: step-security/ghaction-import-gpg@6c8fe4d0126a59d57c21f87c9ae5dd3451fa3cca # v6.1.0
with:
git_commit_gpgsign: true
git_tag_gpgsign: true
git_user_signingkey: true
gpg_private_key: ${{ secrets.GPG_KEY_CONTENTS }}
passphrase: ${{ secrets.GPG_KEY_PASSPHRASE }}
- name: Get Current Date
id: current_date
run: echo "CURRENT_DATE=$(date -u +"%m-%d-%Y")" >> $GITHUB_ENV
- name: Debug Node.js Environment
run: |
cd ./tools/erc-repository-indexer/erc-contract-indexer
node -e "console.log('NEW_ERC20_RECORDS:', ${{ env.NEW_ERC20_RECORDS }});"
node -e "console.log('NEW_ERC721_RECORDS:', ${{ env.NEW_ERC721_RECORDS }});"
- name: Create Pull Request
uses: peter-evans/create-pull-request@5e914681df9dc83aa4e4905692ca88beb2f9e91f # v7.0.5
with:
branch: ERC-Registry-Periodical-Update/${{ github.run_id }}
commit-message: 'chore: update ERC Registry with latest ERC-20 and ERC-721 tokens on Hedera ${{github.event.inputs.HEDERA_NETWORK}}'
committer: ${{ steps.gpg_importer.outputs.name }} <${{ steps.gpg_importer.outputs.email }}>
author: ${{ steps.gpg_importer.outputs.name }} <${{ steps.gpg_importer.outputs.email }}>
token: ${{ secrets.GH_ACCESS_TOKEN }}
delete-branch: true
signoff: true
title: 'chore: update ERC Registry with latest ERC-20 and ERC-721 tokens on Hedera ${{github.event.inputs.HEDERA_NETWORK}}'
body: >
**Description**:
This PR updates the ERC Registry to include the most recent ERC-20 and ERC-721 tokens.
**Registry Update Summary**:
- **Hedera Network**: ${{ github.event.inputs.HEDERA_NETWORK }}
- **New ERC-20 Records Added**: ${{ env.NEW_ERC20_RECORDS }}
- **New ERC-721 Records Added**: ${{ env.NEW_ERC721_RECORDS }}
- **Indexing Duration**: ${{ env.INDEXING_DURATION }}
- **Current Date**: ${{ env.CURRENT_DATE }}
labels: 'internal'
assignees: 'swirlds-automation'