Ping for rebuild 3 #561
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
# File .github/workflows/ci.yml | |
name: CI Job to Generate JUnit Reports with Diff and Allure Reports | |
on: | |
schedule: | |
- cron: 17 0 * * * # nightly run; 17th minute to decrease odds of delayed or dropped job | |
push: | |
branches: | |
- main | |
pull_request_target: | |
branches: | |
- main | |
permissions: | |
contents: write # Grant write permissions for contents | |
pages: write | |
actions: write | |
checks: write # Grant write permissions for checks, only effective on push | |
pull-requests: write # Explicitly grant write permissions for pull requests | |
jobs: | |
generate-reports: | |
runs-on: ubuntu-latest | |
env: | |
JOB_TYPE: ${{ github.event_name == 'schedule' && 'nightly' || 'ci' }} | |
REPO_URL: https://github.com/${{ github.repository }} | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Ensure just-results branch exists | |
run: | | |
git ls-remote --heads ${{ env.REPO_URL }} just-results | |
if [ $? -ne 0 ]; then | |
echo "just-results branch does not exist. Creating it." | |
git init previous-results | |
cd previous-results | |
git checkout -b just-results | |
touch current_test_results.txt | |
git add current_test_results.txt | |
git commit -m "Initialize just-results branch" | |
git remote add origin ${{ env.REPO_URL }} | |
# Configure Git to use the GITHUB_TOKEN | |
git config --global user.name "${{ github.actor }}" | |
git config --global user.email "${{ github.actor }}@users.noreply.github.com" | |
git config --global http.https://github.com/.extraheader "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" | |
git push origin just-results | |
else | |
echo "just-results branch exists. Cloning it." | |
git clone --single-branch --branch just-results --depth 1 ${{ env.REPO_URL }} previous-results | |
fi | |
- name: Copy Previous Test Results | |
run: | | |
if [ -f "previous-results/current_test_results.txt" ]; then | |
cp previous-results/current_test_results.txt previous_test_results.txt | |
else | |
echo "No previous test results found." | |
fi | |
- name: Make Install Script Executable | |
run: chmod +x INSTALL.sh | |
- name: Run Install Script to install Mettalog | |
run: | | |
. ./INSTALL.sh --easy | |
sudo chmod -R 777 . | |
echo $PATH >> $GITHUB_PATH | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.x' | |
- name: Install python packages | |
run: | | |
pip install ansi2html | |
pip install hyperon | |
pip install junit2html | |
- name: Make Scripts Executable | |
run: chmod +x scripts/*.sh | |
- name: Run Test Script to Generate Input File | |
continue-on-error: true | |
run: | | |
TIMESTAMP=$(date +"%Y-%m-%dT%H:%M:%S") | |
BASELINE_COMPAT_PATH=reports/tests_output/now | |
echo "TIMESTAMP=$TIMESTAMP" >> $GITHUB_ENV | |
echo "BASELINE_COMPAT_PATH=$BASELINE_COMPAT_PATH" >> $GITHUB_ENV | |
mkdir -p $BASELINE_COMPAT_PATH | |
if [ "${{ env.JOB_TYPE }}" == "nightly" ]; then | |
./scripts/run_nightly_tests.sh -t $TIMESTAMP | |
else | |
./scripts/run_commit_tests.sh -t $TIMESTAMP | |
fi | |
env: | |
TERM: xterm-256color | |
- name: Parse Test Results | |
run: | | |
# Extract test IDs and their statuses into a sorted file | |
awk -F '|' '{print $2 "|" $3}' /tmp/SHARED.UNITS | grep -E 'PASS|FAIL' | sort > current_test_results.txt | |
- name: Compare Test Results | |
run: | | |
if [ -f "previous_test_results.txt" ]; then | |
if diff previous_test_results.txt current_test_results.txt > /dev/null; then | |
echo "No changes in test results." | |
echo "TEST_CHANGED=false" >> $GITHUB_ENV | |
else | |
echo "Changes detected in test results." | |
echo "TEST_CHANGED=true" >> $GITHUB_ENV | |
fi | |
else | |
echo "No previous test results to compare." | |
echo "TEST_CHANGED=true" >> $GITHUB_ENV | |
fi | |
# Save Current Test Results to just-results branch | |
- name: Save Current Test Results to just-results branch | |
if: env.TEST_CHANGED == 'true' | |
run: | | |
cp current_test_results.txt previous-results/ | |
cd previous-results | |
# Configure Git user information | |
git config user.name "${{ github.actor }}" | |
git config user.email "${{ github.actor }}@users.noreply.github.com" | |
# Configure Git to use the GITHUB_TOKEN for authentication | |
git config --global http.https://github.com/.extraheader "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" | |
# Stage and commit changes | |
git add current_test_results.txt | |
git commit -m "Update test results" | |
# Push changes to the just-results branch | |
git push origin just-results | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
# Continue only if tests changed | |
- name: Run JUnit Report Generation Script | |
if: env.TEST_CHANGED == 'true' | |
continue-on-error: true | |
run: | | |
python3 scripts/into_junit.py /tmp/SHARED.UNITS ${{ env.TIMESTAMP }} 1 > junit.xml | |
- name: Convert JUnit XML to Standard HTML Report | |
if: env.TEST_CHANGED == 'true' | |
continue-on-error: true | |
run: | | |
cat junit.xml | |
junit2html junit.xml ${{ env.BASELINE_COMPAT_PATH }}/junit-standard-report.html | |
- name: Convert JUnit XML to Matrix HTML Report | |
if: env.TEST_CHANGED == 'true' | |
continue-on-error: true | |
run: | | |
junit2html --report-matrix ${{ env.BASELINE_COMPAT_PATH }}/junit-matrix-report.html junit.xml | |
- name: Upload JUnit XML Report | |
if: env.TEST_CHANGED == 'true' | |
continue-on-error: true | |
uses: actions/upload-artifact@v4 | |
with: | |
name: junit-report | |
path: junit.xml | |
- name: Upload Standard HTML Report | |
if: env.TEST_CHANGED == 'true' | |
continue-on-error: true | |
uses: actions/upload-artifact@v4 | |
with: | |
name: junit-standard-html-report | |
path: ${{ env.BASELINE_COMPAT_PATH }}/junit-standard-report.html | |
- name: Upload Matrix HTML Report | |
if: env.TEST_CHANGED == 'true' | |
continue-on-error: true | |
uses: actions/upload-artifact@v4 | |
with: | |
name: junit-matrix-html-report | |
path: ${{ env.BASELINE_COMPAT_PATH }}/junit-matrix-report.html | |
- name: Upload Test Output Log Files | |
if: env.TEST_CHANGED == 'true' | |
continue-on-error: true | |
uses: actions/upload-artifact@v4 | |
with: | |
name: test-output-logs | |
path: ${{ env.BASELINE_COMPAT_PATH }} | |
- name: Display JUnit Test Results | |
if: (github.event_name == 'push') && (env.TEST_CHANGED == 'true') # Only run this step on pushes to main if there are changes | |
uses: dorny/test-reporter@v1 | |
with: | |
name: 'JUnit Results' | |
path: 'junit.xml' | |
reporter: 'java-junit' | |
fail-on-error: false | |
- name: Provide Report Links | |
if: env.TEST_CHANGED == 'true' | |
run: | | |
echo "JUnit reports are available as artifacts." | |
- name: Generate environment.properties | |
if: env.TEST_CHANGED == 'true' | |
run: | | |
python scripts/generate_allure_environment.py ${{ github.sha }} ${{ github.ref_name }} > environment.properties | |
- name: Upload environment.properties | |
if: env.TEST_CHANGED == 'true' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: environment | |
path: environment.properties | |
- name: Get Allure history | |
if: env.TEST_CHANGED == 'true' | |
uses: actions/checkout@v4 | |
with: | |
ref: test-results | |
path: test-results | |
- name: Download JUnit XML Results | |
if: env.TEST_CHANGED == 'true' | |
uses: actions/download-artifact@v4 | |
with: | |
name: junit-report | |
path: build/allure-results | |
- name: Include environment properties | |
if: env.TEST_CHANGED == 'true' | |
uses: actions/download-artifact@v4 | |
with: | |
name: environment | |
path: build/allure-results | |
- name: Generate Allure Report | |
if: env.TEST_CHANGED == 'true' | |
uses: simple-elf/allure-report-action@master | |
id: allure-report | |
with: | |
allure_results: build/allure-results | |
gh_pages: test-results | |
allure_report: allure-report | |
allure_history: allure-history | |
subfolder: ${{ env.SUBFOLDER }} | |
keep_reports: 120 | |
env: | |
SUBFOLDER: ${{ env.JOB_TYPE }} | |
- name: Copy JUnit HTML Reports to GitHub Pages Directory | |
if: env.TEST_CHANGED == 'true' | |
run: | | |
sudo chmod 777 . -R | |
ls -lA allure-history | |
mkdir -p allure-history/${{ env.BASELINE_COMPAT_PATH }} | |
cp -f ${{ env.BASELINE_COMPAT_PATH }}/* reports/tests_output/baseline-compat/ | |
cp -rf reports/* allure-history/reports/ | |
- name: Copy Help Docs to GitHub Pages Directory | |
if: env.TEST_CHANGED == 'true' | |
run: | | |
mkdir -p allure-history/help-docs/ | |
cp -r ./docs/* allure-history/help-docs/ | |
- name: Generate Root Index for GitHub Pages | |
if: env.TEST_CHANGED == 'true' | |
run: | | |
echo "<html>" > allure-history/index.html | |
echo "<head><title>Project Reports and Documentation</title></head>" >> allure-history/index.html | |
echo "<body>" >> allure-history/index.html | |
echo "<h1>Project Reports and Documentation</h1>" >> allure-history/index.html | |
echo "<ul>" >> allure-history/index.html | |
echo "<li><a href='./ci/'>Allure CI Reports</a></li>" >> allure-history/index.html | |
echo "<li><a href='./nightly/'>Allure Nightly Reports</a></li>" >> allure-history/index.html | |
echo "<li><a href='./${{ env.BASELINE_COMPAT_PATH }}/junit-standard-report.html'>JUnit Standard Report</a></li>" >> allure-history/index.html | |
echo "<li><a href='./${{ env.BASELINE_COMPAT_PATH }}/junit-matrix-report.html'>JUnit Matrix Report</a></li>" >> allure-history/index.html | |
#echo "<li><a href='./help-docs/'>Help Documentation</a></li>" >> allure-history/index.html | |
echo "</ul>" >> allure-history/index.html | |
echo "</body>" >> allure-history/index.html | |
echo "</html>" >> allure-history/index.html | |
- name: Deploy Allure reports, JUnit HTML reports, and help docs to GitHub Pages | |
if: env.TEST_CHANGED == 'true' | |
uses: peaceiris/actions-gh-pages@v4 | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
personal_token: ${{ secrets.GITHUB_TOKEN }} | |
publish_branch: test-results | |
publish_dir: allure-history | |
- name: Auto-Approve the Pull Request | |
if: github.event_name == 'pull_request_target' | |
uses: hmarr/auto-approve-action@v4 | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} |