Skip to content

[MHDB Contribute]

[MHDB Contribute] #1

Workflow file for this run

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
});