GTF comparison script #11
Workflow file for this run
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: GTF Comparison Tests | |
on: | |
pull_request: | |
branches: [ "develop", "master" ] | |
paths: | |
- '3rd-party-tools/build-indices/**' | |
jobs: | |
test: | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: 3rd-party-tools/build-indices | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.x' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install pandas | |
- name: Create output directories | |
run: | | |
mkdir -p test_output/comparison_files | |
mkdir -p test_data/reference_outputs | |
- name: Verify test data | |
run: | | |
if [ ! -f "test_data/test1.gtf" ]; then | |
echo "Error: Required test file test_data/test1.gtf not found" | |
exit 1 | |
fi | |
if [ ! -f "Biotypes.tsv" ]; then | |
echo "Error: Required Biotypes.tsv file not found" | |
exit 1 | |
fi | |
echo "Test files present:" | |
ls -l test_data/test1.gtf Biotypes.tsv | |
- name: Run modify_gtf script | |
env: | |
PYTHONPATH: ${{ github.workspace }}/3rd-party-tools/build-indices | |
run: | | |
python modify_gtf.py \ | |
-i test_data/test1.gtf \ | |
-o test_output/modified_test1.gtf \ | |
-b Biotypes.tsv | |
if [ ! -f "test_output/modified_test1.gtf" ]; then | |
echo "Error: Modified GTF was not created" | |
exit 1 | |
fi | |
- name: Run comparison | |
id: comparison | |
env: | |
PYTHONPATH: ${{ github.workspace }}/3rd-party-tools/build-indices | |
run: | | |
python compare_gtfs.py \ | |
test_data/test1.gtf \ | |
test_output/modified_test1.gtf \ | |
--output-prefix test_output/comparison_files/comparison | |
- name: Run unit tests | |
id: unit_tests | |
env: | |
PYTHONPATH: ${{ github.workspace }}/3rd-party-tools/build-indices | |
run: python -m unittest test_gtf_comparison.py -v | |
- name: Create comparison summary | |
if: always() | |
run: | | |
{ | |
echo "GTF Comparison Summary" | |
echo "Generated on: $(date)" | |
echo | |
echo "Input GTF: test_data/test1.gtf" | |
echo "Modified GTF: test_output/modified_test1.gtf" | |
echo | |
for diff_type in structural gene attribute; do | |
echo "=== ${diff_type^} Differences ===" | |
if [ -f "test_output/comparison_files/comparison_${diff_type}_diff.txt" ]; then | |
cat "test_output/comparison_files/comparison_${diff_type}_diff.txt" | |
else | |
echo "No ${diff_type} differences file found" | |
fi | |
echo | |
done | |
} > test_output/comparison_files/summary.txt | |
- name: Zip comparison results | |
if: always() | |
run: | | |
if [ -d "test_output/comparison_files" ] && [ "$(ls -A test_output/comparison_files)" ]; then | |
cd test_output | |
zip -r comparison_results.zip comparison_files/ | |
cd .. | |
else | |
echo "No comparison files to zip" | |
touch test_output/comparison_results.zip | |
fi | |
- name: Upload test artifacts | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: gtf-test-results | |
path: | | |
3rd-party-tools/build-indices/test_output/comparison_results.zip | |
3rd-party-tools/build-indices/test_output/modified_test1.gtf | |
compression-level: 9 | |
- name: Check test results | |
if: always() | |
run: | | |
echo "=== Test Results Summary ===" | |
TESTS_FAILED=false | |
# Check unit tests result | |
if [ "${{ steps.unit_tests.outcome }}" == "success" ]; then | |
echo "✅ Unit tests passed" | |
else | |
echo "❌ Unit tests failed" | |
TESTS_FAILED=true | |
fi | |
# Check comparison results | |
if [ -f "test_output/comparison_files/comparison_structural_diff.txt" ]; then | |
if grep -q "differs in" test_output/comparison_files/comparison_structural_diff.txt; then | |
echo "❌ GTF comparison found differences" | |
cat test_output/comparison_files/summary.txt | |
TESTS_FAILED=true | |
else | |
echo "✅ GTF comparison passed" | |
fi | |
else | |
echo "❌ GTF comparison failed to generate output" | |
TESTS_FAILED=true | |
fi | |
if [ "$TESTS_FAILED" = true ]; then | |
exit 1 | |
fi |