Fixed issues in fhirr4 and ci workflows #28
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: CI | |
on: | |
pull_request: | |
types: | |
- opened | |
- synchronize | |
env: | |
R4_PATTERN: '*/*' | |
FHIRR4_PATTERN: 'fhirr4/*/*' | |
UTILS_PATTERN: 'utils/*/*' | |
GITHUB_WORKFLOWS_DIR: '.github' | |
jobs: | |
setup: | |
runs-on: ubuntu-latest | |
outputs: | |
project-matrix: ${{ steps.unique-project-paths.outputs.BALLERINA_PROJECT_PATHS }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Extract Unique Ballerina Project Paths from Changed Files | |
id: unique-project-paths | |
run: | | |
# Get changed files of PR from github API | |
PR_DETAILS=$(curl -sSL \ | |
"https://api.github.com/repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/files") | |
CHANGED_FILES=$(echo "$PR_DETAILS" | jq -r '.[].filename') | |
echo "Changed Files: " | |
echo "${CHANGED_FILES}" | |
# Convert CHANGED_FILES to an array | |
readarray -t CHANGED_FILES_ARRAY <<<"${CHANGED_FILES}" | |
# Remove duplicates from the CHANGED_FILES_ARRAY | |
declare -A UNIQUE_PATHS_MAP | |
for file in "${CHANGED_FILES_ARRAY[@]}"; do | |
if [[ $file == $UTILS_PATTERN ]]; then | |
EXTRACTED_PATH=$(echo "$file" | cut -d '/' -f 1-2) | |
elif [[ $file == $FHIRR4_PATTERN ]]; then | |
EXTRACTED_PATH=$(echo "$file" | cut -d '/' -f 1-6) | |
elif [[ $file == $R4_PATTERN ]]; then | |
EXTRACTED_PATH=$(echo "$file" | cut -d '/' -f 1) | |
fi | |
if [[ $EXTRACTED_PATH && $EXTRACTED_PATH != $GITHUB_WORKFLOWS_DIR ]]; then | |
UNIQUE_PATHS_MAP[$EXTRACTED_PATH]=1 | |
fi | |
done | |
# Print the unique ballerina project paths | |
echo "Extracted Unique Ballerina Project Paths: " | |
for EXTRACTED_PATH in "${!UNIQUE_PATHS_MAP[@]}"; do | |
echo "$EXTRACTED_PATH" | |
done | |
# Create the JSON array with elements enclosed in double quotes | |
UNIQUE_PATHS_JSON=$(for key in "${!UNIQUE_PATHS_MAP[@]}"; do echo "\"$key\""; done | jq -s -c .) | |
echo "UNIQUE_PATHS_JSON: " | |
echo "${UNIQUE_PATHS_JSON}" | |
echo "BALLERINA_PROJECT_PATHS=${UNIQUE_PATHS_JSON}" >> $GITHUB_OUTPUT | |
build: | |
needs: [ setup ] | |
runs-on: ubuntu-latest | |
env: | |
JAVA_OPTS: -Xmx4G | |
if: ${{ needs.setup.outputs.project-matrix != '[]' }} | |
strategy: | |
matrix: | |
path: ${{ fromJson(needs.setup.outputs.project-matrix) }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Ballerina Build | |
if: ${{ matrix.path != 'fhirr4/ballerina/src/main/resources/fhirservice' }} | |
uses: ballerina-platform/[email protected] | |
with: | |
args: pack | |
env: | |
WORKING_DIR: ./${{ matrix.path }} | |
JAVA_HOME: /usr/lib/jvm/default-jvm | |
- name: Setup Maven | |
if: ${{ matrix.path == 'fhirr4/ballerina/src/main/resources/fhirservice' }} | |
uses: actions/setup-java@v2 | |
with: | |
java-version: '11' | |
distribution: 'temurin' | |
- name: Setup latest Ballerina version | |
uses: ballerina-platform/[email protected] | |
if: ${{ matrix.path == 'fhirr4/ballerina/src/main/resources/fhirservice' }} | |
with: | |
version: 2201.7.0 | |
- name: Create settings.xml | |
if: ${{ matrix.path == 'fhirr4/ballerina/src/main/resources/fhirservice' }} | |
run: echo '<settings> | |
<servers> | |
<server> | |
<id>ballerina-language-repo</id> | |
<username>${{ github.actor }}</username> | |
<password>${{ secrets.PAT_TOKEN }}</password> | |
</server> | |
</servers> | |
</settings>' > ~/.m2/settings.xml | |
- name: Run maven build | |
if: ${{ matrix.path == 'fhirr4/ballerina/src/main/resources/fhirservice' }} | |
run: | | |
mvn clean install -f fhirr4 | |
test: | |
needs: [ setup ] | |
runs-on: ubuntu-latest | |
env: | |
JAVA_OPTS: -Xmx4G | |
if: ${{ needs.setup.outputs.project-matrix != '[]' }} | |
strategy: | |
matrix: | |
path: ${{ fromJson(needs.setup.outputs.project-matrix) }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Ballerina Test | |
if: ${{ matrix.path != 'fhirr4/ballerina/src/main/resources/fhirservice' }} | |
uses: ballerina-platform/[email protected] | |
with: | |
args: test --code-coverage | |
env: | |
WORKING_DIR: ./${{ matrix.path }} | |
JAVA_HOME: /usr/lib/jvm/default-jvm | |
- name: Read Ballerina Test Results | |
if: ${{ matrix.path != 'fhirr4/ballerina/src/main/resources/fhirservice' }} | |
id: test_results | |
run: | | |
if [ -f "./${{ matrix.path }}/target/report/test_results.json" ]; then | |
content=`cat ./${{ matrix.path }}/target/report/test_results.json` | |
content="${content//'%'/'%25'}" | |
content="${content//$'\n'/'%0A'}" | |
content="${content//$'\r'/'%0D'}" | |
echo "Covered Code Lines : $(echo "$content" | jq -r '.coveredLines')" | |
echo "Total Code Lines : $(echo "$content" | jq -r '.missedLines') + $(echo "$content" | jq -r '.coveredLines')" | |
echo "Code Coverage Percentage : $(echo "$content" | jq -r '.coveragePercentage')" | |
else | |
# echo "TEST_RESULTS_JSON=" >> $GITHUB_OUTPUT | |
echo "No test results file found." | |
fi |