Skip to content

Commit 05bf455

Browse files
committed
Version update to 3.1.0
1 parent 0e5de75 commit 05bf455

29 files changed

+470
-2001
lines changed

.github/workflows/pre-release.yml

Lines changed: 21 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -54,64 +54,29 @@ jobs:
5454
- name: Quick validation tests
5555
if: github.event.inputs.test_intensity == 'quick' || github.event_name == 'pull_request'
5656
run: |
57-
echo "🏃 Running quick validation tests..."
58-
59-
# Generate small test files
60-
python analyzeMFT.py --generate-test-mft quick_test.mft --test-records 20
61-
62-
# Test core functionality
63-
python analyzeMFT.py -f quick_test.mft -o quick.csv --csv
64-
python analyzeMFT.py -f quick_test.mft -o quick.db --sqlite
65-
66-
# Basic validation
67-
[ -s quick.csv ] && echo "✅ CSV export working"
57+
echo "🏃 Running quick validation tests..." python analyzeMFT.py --generate-test-mft quick_test.mft --test-records 20 python analyzeMFT.py -f quick_test.mft -o quick.csv --csv
58+
python analyzeMFT.py -f quick_test.mft -o quick.db --sqlite [ -s quick.csv ] && echo "✅ CSV export working"
6859
[ -s quick.db ] && echo "✅ SQLite export working"
6960
7061
- name: Standard validation tests
7162
if: github.event.inputs.test_intensity == 'standard' || github.event.inputs.test_intensity == ''
7263
run: |
73-
echo "🧪 Running standard validation tests..."
74-
75-
# Generate test files
76-
python analyzeMFT.py --generate-test-mft std_normal.mft --test-records 100 --test-type normal
77-
python analyzeMFT.py --generate-test-mft std_anomaly.mft --test-records 50 --test-type anomaly
78-
79-
# Test all export formats
80-
python analyzeMFT.py -f std_normal.mft -o std.csv --csv -v
64+
echo "🧪 Running standard validation tests..." python analyzeMFT.py --generate-test-mft std_normal.mft --test-records 100 --test-type normal
65+
python analyzeMFT.py --generate-test-mft std_anomaly.mft --test-records 50 --test-type anomaly python analyzeMFT.py -f std_normal.mft -o std.csv --csv -v
8166
python analyzeMFT.py -f std_normal.mft -o std.json --json -v
8267
python analyzeMFT.py -f std_normal.mft -o std.db --sqlite -v
83-
python analyzeMFT.py -f std_normal.mft -o std.xml --xml -v
84-
85-
# Test profiles
86-
python analyzeMFT.py --list-profiles
68+
python analyzeMFT.py -f std_normal.mft -o std.xml --xml -v python analyzeMFT.py --list-profiles
8769
python analyzeMFT.py -f std_normal.mft -o std_quick.csv --profile quick -v
88-
python analyzeMFT.py -f std_normal.mft -o std_forensic.csv --profile forensic -v
89-
90-
# Test config
91-
python analyzeMFT.py --create-config test_config.json
92-
python analyzeMFT.py -f std_normal.mft -o std_config.csv --config test_config.json -v
93-
94-
# Test chunking and hashing
95-
python analyzeMFT.py -f std_normal.mft -o std_chunk.csv --chunk-size 25 -v
96-
python analyzeMFT.py -f std_normal.mft -o std_hash.csv --hash -v
97-
98-
# Validate outputs
99-
python -c "
100-
import csv, json, sqlite3
101-
# Validate CSV
102-
with open('std.csv') as f:
70+
python analyzeMFT.py -f std_normal.mft -o std_forensic.csv --profile forensic -v python analyzeMFT.py --create-config test_config.json
71+
python analyzeMFT.py -f std_normal.mft -o std_config.csv --config test_config.json -v python analyzeMFT.py -f std_normal.mft -o std_chunk.csv --chunk-size 25 -v
72+
python analyzeMFT.py -f std_normal.mft -o std_hash.csv --hash -v python -c "
73+
import csv, json, sqlite3with open('std.csv') as f:
10374
rows = list(csv.reader(f))
10475
assert len(rows) > 1, 'CSV should have data'
105-
print(f'✅ CSV has {len(rows)-1} records')
106-
107-
# Validate JSON
108-
with open('std.json') as f:
76+
print(f'✅ CSV has {len(rows)-1} records')with open('std.json') as f:
10977
data = json.load(f)
11078
assert len(data) > 0, 'JSON should have data'
111-
print(f'✅ JSON has {len(data)} records')
112-
113-
# Validate SQLite
114-
conn = sqlite3.connect('std.db')
79+
print(f'✅ JSON has {len(data)} records')conn = sqlite3.connect('std.db')
11580
cursor = conn.cursor()
11681
cursor.execute('SELECT COUNT(*) FROM mft_records')
11782
count = cursor.fetchone()[0]
@@ -123,14 +88,8 @@ conn.close()
12388
- name: Comprehensive validation tests
12489
if: github.event.inputs.test_intensity == 'comprehensive'
12590
run: |
126-
echo "🔬 Running comprehensive validation tests..."
127-
128-
# Generate larger test files
129-
python analyzeMFT.py --generate-test-mft comp_normal.mft --test-records 500 --test-type normal
130-
python analyzeMFT.py --generate-test-mft comp_anomaly.mft --test-records 200 --test-type anomaly
131-
132-
# Test all export formats with both files
133-
for format in csv json xml sqlite body timeline tsk; do
91+
echo "🔬 Running comprehensive validation tests..." python analyzeMFT.py --generate-test-mft comp_normal.mft --test-records 500 --test-type normal
92+
python analyzeMFT.py --generate-test-mft comp_anomaly.mft --test-records 200 --test-type anomaly for format in csv json xml sqlite body timeline tsk; do
13493
echo "Testing $format format..."
13594
case $format in
13695
csv) flag="--csv" ;;
@@ -144,18 +103,12 @@ conn.close()
144103

145104
python analyzeMFT.py -f comp_normal.mft -o "comp_normal.$format" $flag -v
146105
python analyzeMFT.py -f comp_anomaly.mft -o "comp_anomaly.$format" $flag -v
147-
done
148-
149-
# Test all profiles with different chunk sizes
150-
for profile in default quick forensic performance; do
106+
done for profile in default quick forensic performance; do
151107
for chunk in 10 50 100; do
152108
echo "Testing profile $profile with chunk size $chunk..."
153109
python analyzeMFT.py -f comp_normal.mft -o "comp_${profile}_${chunk}.csv" --profile $profile --chunk-size $chunk -v
154110
done
155-
done
156-
157-
# Memory and performance test
158-
echo "Running performance test..."
111+
done echo "Running performance test..."
159112
python -c "
160113
import time, subprocess, os
161114
start = time.time()
@@ -167,17 +120,8 @@ print(f'⚡ Processed {size} bytes in {duration:.2f}s ({500/duration:.1f} rec/s)
167120
168121
- name: Security and error handling tests
169122
run: |
170-
echo "🔒 Running security and error handling tests..."
171-
172-
# Test with invalid inputs
173-
python analyzeMFT.py -f nonexistent.mft -o error.csv 2>&1 | grep -q "Error\|No such file" && echo "✅ Proper error handling for missing files"
174-
175-
# Test with invalid MFT data
176-
echo "Invalid MFT data" > invalid.mft
177-
python analyzeMFT.py -f invalid.mft -o invalid.csv 2>&1 | grep -q "Error\|Invalid" && echo "✅ Proper error handling for invalid MFT files"
178-
179-
# Test permission handling
180-
touch readonly.mft
123+
echo "🔒 Running security and error handling tests..." python analyzeMFT.py -f nonexistent.mft -o error.csv 2>&1 | grep -q "Error\|No such file" && echo "✅ Proper error handling for missing files" echo "Invalid MFT data" > invalid.mft
124+
python analyzeMFT.py -f invalid.mft -o invalid.csv 2>&1 | grep -q "Error\|Invalid" && echo "✅ Proper error handling for invalid MFT files" touch readonly.mft
181125
chmod 000 readonly.mft 2>/dev/null || echo "Skipping permission test on this platform"
182126
python analyzeMFT.py -f readonly.mft -o readonly.csv 2>&1 | grep -q "Error\|Permission" && echo "✅ Proper error handling for permission issues" || echo "⚠️ Permission test skipped"
183127
chmod 644 readonly.mft 2>/dev/null || true
@@ -271,39 +215,16 @@ print(f'⚡ Processed {size} bytes in {duration:.2f}s ({500/duration:.1f} rec/s)
271215
run: |
272216
gh release create "v${{ needs.pre-release-tests.outputs.version }}" \
273217
--title "Release v${{ needs.pre-release-tests.outputs.version }}" \
274-
--notes "## analyzeMFT v${{ needs.pre-release-tests.outputs.version }}
275-
276-
### ✨ What's New
277-
- Automated release with comprehensive testing
278-
- All functionality validated across multiple platforms
279-
280-
### 🧪 Test Results
281-
- ✅ All export formats working (CSV, JSON, XML, SQLite, Body, Timeline, TSK)
218+
--notes "## analyzeMFT v${{ needs.pre-release-tests.outputs.version }} - Automated release with comprehensive testing
219+
- All functionality validated across multiple platforms - ✅ All export formats working (CSV, JSON, XML, SQLite, Body, Timeline, TSK)
282220
- ✅ All analysis profiles working (Default, Quick, Forensic, Performance)
283221
- ✅ Configuration system working
284222
- ✅ Chunked processing working
285223
- ✅ Hash computation working
286224
- ✅ Error handling working
287-
- ✅ Cross-platform compatibility verified
288-
289-
### 📦 Installation
290-
\`\`\`bash
225+
- ✅ Cross-platform compatibility verified \`\`\`bash
291226
pip install analyzeMFT
292-
\`\`\`
293-
294-
### 🚀 Quick Start
295-
\`\`\`bash
296-
# Generate test MFT file
297-
python analyzeMFT.py --generate-test-mft test.mft --test-records 100
298-
299-
# Analyze and export to CSV
300-
python analyzeMFT.py -f test.mft -o output.csv --csv -v
301-
302-
# Analyze and export to SQLite database
303-
python analyzeMFT.py -f test.mft -o output.db --sqlite -v
304-
305-
# Use forensic analysis profile
306-
python analyzeMFT.py -f test.mft -o forensic.csv --profile forensic -v
227+
\`\`\` \`\`\`bash python analyzeMFT.py --generate-test-mft test.mft --test-records 100 python analyzeMFT.py -f test.mft -o output.csv --csv -v python analyzeMFT.py -f test.mft -o output.db --sqlite -v python analyzeMFT.py -f test.mft -o forensic.csv --profile forensic -v
307228
\`\`\`"
308229
env:
309230
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

0 commit comments

Comments
 (0)