diff --git a/.CI/ReSim/prepare_pr.sh b/.CI/ReSim/prepare_pr.sh new file mode 100644 index 0000000000..c2bb77c958 --- /dev/null +++ b/.CI/ReSim/prepare_pr.sh @@ -0,0 +1,7 @@ +event_number=$1 +# checkout the pull request +docker run --name compile_msl --rm --volume shared_data:/shared_data wsm_image /shared_data/run_scripts/git_pr_pull.sh $event_number +# compile msl binaries +docker run --name compile_msl --rm --volume shared_data:/shared_data wsm_image /shared_data/run_scripts/compile_msl.sh /shared_data/repos/pr_testing/ModelicaStandardLibrary +# delete old PRs with same number (in case of a new commit on a PR) +docker run --name compile_msl --rm --volume shared_data:/shared_data dymola_image /shared_data/run_scripts/delete_old_PRs.sh $event_number \ No newline at end of file diff --git a/.CI/ReSim/run_pr.sh b/.CI/ReSim/run_pr.sh new file mode 100644 index 0000000000..deb92e9655 --- /dev/null +++ b/.CI/ReSim/run_pr.sh @@ -0,0 +1,33 @@ +event_number=$1 +master_hash=$2 +pkg_name=$3 + +# Run Modelica in all tools +tools=$4 + +for tool in $tools +do + uppertool=$tool | tr 'a-z' 'A-Z' + docker run --rm --name $tool\_pr_compare_$event_number\_$pkg_name --volume shared_data:/shared_data $tool\_image python /shared_data/run_scripts/$uppertool\_PR_compare.py $master_hash $event_number $pkg_name +done + +#docker run --rm --name dymola_pr_compare_$event_number\_$pkg_name --volume shared_data:/shared_data dymola_image python /shared_data/run_scripts/Dymola_PR_compare.py $master_hash $event_number $pkg_name +#docker run --rm --name om_pr_compare_$event_number\_$pkg_name --volume shared_data:/shared_data om_image python /shared_data/run_scripts/OM_PR_compare.py $master_hash $event_number $pkg_name +#docker run --rm --name wsm_pr_compare_$event_number\_$pkg_name --volume shared_data:/shared_data wsm_image python /shared_data/run_scripts/WSM_PR_compare.py $master_hash $event_number $pkg_name + +# create an overview over all tools +docker run --name create_overview_$event_number\_$pkg_name --volume shared_data:/shared_data om_image python /shared_data/run_scripts/overview_report.py $event_number $pkg_name + +# clear published directory (web server) +if [ -d "/var/www/html/prs/$event_number/$pkg_name" ]; then + rm -rf "/var/www/html/prs/$event_number/$pkg_name" +fi +if [ ! -d "/var/www/html/prs/$event_number" ]; then + mkdir /var/www/html/prs/$event_number +fi +mkdir /var/www/html/prs/$event_number/$pkg_name + +# copy data to webserver directory +docker cp create_overview_$event_number\_$pkg_name:/shared_data/resim_output/PRs/PR_$event_number/$pkg_name/report /var/www/html/prs/$event_number/$pkg_name +docker rm create_overview_$event_number\_$pkg_name +exit $(head -n 1 /var/www/html/prs/$event_number/$pkg_name/status.txt) \ No newline at end of file diff --git a/.github/workflows/resimCI.yml b/.github/workflows/resimCI.yml new file mode 100644 index 0000000000..60b7373267 --- /dev/null +++ b/.github/workflows/resimCI.yml @@ -0,0 +1,73 @@ +name: CI ReSim + +on: + workflow_run: + workflows: ["Trigger CI ReSim"] + types: + - completed + +jobs: + resim_checks: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v6 + with: + ref: ${{ github.event.workflow_run.head_sha }} + + - name: Get PR number + uses: 8BitJonny/gh-get-current-pr@4.0.0 + id: PR + with: + sha: ${{ github.event.workflow_run.head_sha }} + filterOutClosed: true + filterOutDraft: true + + - name: Run ReSim + if: steps.PR.outputs.pr_found == 'true' + run: | + echo "LTX_PR_SERVER=${{ vars.LTX_PR_SERVER }}" + echo "LTX_SCRIPT_LOCATION=${{ vars.LTX_SCRIPT_LOCATION }}" + echo "LTX_TESTING_TOOLS=${{ vars.LTX_TESTING_TOOLS }}" + + - name: Report status back to PR + if: steps.PR.outputs.pr_found == 'true' + uses: actions/github-script@v8 + with: + script: | + const run = context.payload.workflow_run; + const sha = run.head_sha; + const conclusion = run.conclusion; + let state; + switch (conclusion) { + case "success": + state = "success"; + break; + case "failure": + case "timed_out": + case "action_required": + state = "failure"; + break; + case "cancelled": + case "skipped": + state = "error"; + break; + default: + state = "error"; + } + const prNumber = process.env.PR_NUMBER || null; + const ltxServer = process.env.LTX_PR_SERVER; + const targetUrl = prNumber ? `${ltxServer}/${prNumber}/` : ltxServer; + await github.rest.repos.createCommitStatus({ + owner: context.repo.owner, + repo: context.repo.repo, + sha: sha, + state: state, + context: "CI / resim_checks", + description: `ReSim finished with ${conclusion}`, + target_url: targetUrl + }); + env: + PR_NUMBER: ${{ steps.PR.outputs.number }} + LTX_PR_SERVER: ${{ vars.LTX_PR_SERVER }} \ No newline at end of file diff --git a/.github/workflows/resimCI_trigger.yml b/.github/workflows/resimCI_trigger.yml new file mode 100644 index 0000000000..ae412db09c --- /dev/null +++ b/.github/workflows/resimCI_trigger.yml @@ -0,0 +1,12 @@ +name: Trigger CI ReSim + +on: + pull_request: + +jobs: + trigger_resim_checks: + runs-on: ubuntu-latest + + steps: + - name: Trigger ReSim from PR + run: echo "🚀 Let's go" \ No newline at end of file diff --git a/Modelica/Blocks/Sources.mo b/Modelica/Blocks/Sources.mo index 8fbd5f270a..eab3ebf486 100644 --- a/Modelica/Blocks/Sources.mo +++ b/Modelica/Blocks/Sources.mo @@ -1595,7 +1595,7 @@ parameter Real table[:, 2]=[0, 0; 1, 1; 2, 4]; parameter Real table[:, :] = fill(0.0, 0, 2) "Table matrix (time = first column; e.g., table=[0, 0; 1, 1; 2, 4])" annotation (Dialog(group="Table data definition",enable=not tableOnFile)); - parameter String tableName="NoName" + parameter String tableName = "NoName" "Table name on file or in function usertab (see docu)" annotation (Dialog(group="Table data definition",enable=tableOnFile)); parameter String fileName="NoName" "File where matrix is stored"