[MHDB Contribute] #1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: tdb2mhdb | |
on: | |
issues: | |
types: [opened] | |
jobs: | |
respond: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Verify whether issue is labeled with 'newTDB' | |
uses: actions/github-script@v5 | |
with: | |
script: | | |
const issueNumber = context.issue.number; | |
const issue = await github.rest.issues.get({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
issue_number: issueNumber, | |
}); | |
const labels = issue.data.labels.map(label => label.name); | |
if (!labels.includes('newTDB')) { | |
console.log("Issue doesn't contain 'newTDB' label, cancelling workflow"); | |
const { owner, repo } = context.repo; | |
const runId = context.runId; | |
await github.rest.actions.cancelWorkflowRun({ owner, repo, run_id: runId }); | |
} | |
- name: Check for ZIP file | |
uses: actions/github-script@v7 | |
id: respond | |
with: | |
script: | | |
const fs = require('fs'); | |
const issue = context.issue; | |
const regex = /(https:\/\/[^\s]+\.zip)\b/g; | |
const issueDetails = await github.rest.issues.get({ | |
owner: issue.owner, | |
repo: issue.repo, | |
issue_number: issue.number, | |
}); | |
const matches = issueDetails.data.body.match(regex); | |
console.log('Matches:', matches); | |
if (matches && matches.length > 0) { | |
fs.writeFileSync('match.txt', matches[0]); | |
} else { | |
fs.writeFileSync('match.txt', 'false'); | |
} | |
- name: Download file | |
id: download | |
run: | | |
file=$(cat match.txt) | |
file=$(echo $file | sed 's/\.zipLICENSE/\.zip/g') | |
echo $file | tee log.txt | |
wget -O task.zip $file || echo "::set-output name=failed::true" | |
- name: Send message if download failed | |
uses: actions/github-script@v7 | |
if: steps.download.outputs.failed == 'true' | |
with: | |
script: | | |
const issue = context.issue; | |
const message = '😢 I could not download the task ZIP file. Exiting now...'; | |
github.rest.issues.createComment({ | |
owner: issue.owner, | |
repo: issue.repo, | |
issue_number: issue.number, | |
body: message | |
}); | |
- name: Unzip file | |
if: steps.download.outputs.failed != 'true' | |
run: | | |
mkdir -p zipfolder | |
mkdir -p tdbs | |
unzip task.zip -d zipfolder | |
find ./zipfolder -type f -exec mv {} ./tdbs \; | |
find ./tdbs -type f -name ".*" -delete | |
ls -A tdbs | tee -a log.txt | |
- name: Verify file extensions | |
if: steps.download.outputs.failed != 'true' | |
id: verify | |
run: | | |
shopt -s nocasematch | |
if [ -z "$(ls -A tdbs)" ]; then | |
echo "No files found in structures directory" | |
echo "valid=false" >> $GITHUB_ENV | |
exit 0 | |
fi | |
for file in tdbs/*; do | |
extension="${file##*.}" | |
if [[ "$extension" != "tdb" && "$extension" != "dat" && "$extension" != "xml" ]]; then | |
echo "Invalid file extension: $file" | |
echo "valid=false" >> $GITHUB_ENV | |
exit 0 | |
fi | |
done | |
echo "valid=true" >> $GITHUB_ENV | |
- name: Send message if file extensions are invalid | |
uses: actions/github-script@v7 | |
if: env.valid == 'false' && steps.download.outputs.failed != 'true' | |
with: | |
script: | | |
const issue = context.issue; | |
const message = '😢 The files supplied in ZIP do not have one of the required extensions: `TDB`, `DAT` or `XML`. If you need another format to work, let us know!'; | |
github.rest.issues.createComment({ | |
owner: issue.owner, | |
repo: issue.repo, | |
issue_number: issue.number, | |
body: message | |
}); | |
- name: Set up Python 3.11 | |
uses: actions/setup-python@v5 | |
if: env.valid == 'true' | |
with: | |
python-version: "3.11" | |
cache: 'pip' | |
cache-dependency-path: 'requirements.txt' | |
- name: Install dependencies | |
if: env.valid == 'true' | |
run: | | |
python -m pip install -r requirements.txt | tee -a log.txt | |
git clone https://github.com/PhasesResearchLab/MHDB.git | |
- name: Run MHDB parsing scripts | |
if: env.valid == 'true' | |
run: | | |
for /R tdbs %%G in (*.tdb *.TDB) do ( | |
python -c "from mhdb.core import database, mongo; data = database.tdb2one('%%G'); data_collection = database.one2many(data); [mongo.TDBEntryGenerator(data=d, client_string='${{ secrets.CLIENT_STRING }}', db='MHDB', collection='community') for d in data_collection]" | |
) | |
- name: Run another step if Python step fails | |
if: failure() | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
const issue = context.issue; | |
const message = '😢 Something went wrong processing your TDB files...\nYou can see logs under Actions tab.'; | |
github.rest.issues.createComment({ | |
owner: issue.owner, | |
repo: issue.repo, | |
issue_number: issue.number, | |
body: message | |
}); | |
- name: Report results | |
if: env.valid == 'true' | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
const issue = context.issue; | |
let message = `🚀 All Done!\nEnjoy!` | |
github.rest.issues.createComment({ | |
owner: issue.owner, | |
repo: issue.repo, | |
issue_number: issue.number, | |
body: message | |
}); | |