From aa58bd7e14c5ca056929fa3f82e50646898c58b2 Mon Sep 17 00:00:00 2001 From: acampbel Date: Fri, 26 May 2023 08:25:29 -0400 Subject: [PATCH 1/9] Add a model --- models/myf14.slx | Bin 0 -> 61748 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 models/myf14.slx diff --git a/models/myf14.slx b/models/myf14.slx new file mode 100644 index 0000000000000000000000000000000000000000..646d52329d34017fecfd04e1fb7db34eae18b16f GIT binary patch literal 61748 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 literal 0 HcmV?d00001 From 1e9af10bdf710ce3045ad4fb0612c22e7ce7b797 Mon Sep 17 00:00:00 2001 From: Andy Campbell <47190204+acampbel@users.noreply.github.com> Date: Mon, 8 Jan 2024 13:52:10 -0500 Subject: [PATCH 2/9] Update matlab-ci.yml --- .github/workflows/matlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/matlab-ci.yml b/.github/workflows/matlab-ci.yml index 1ee7317..61132ad 100644 --- a/.github/workflows/matlab-ci.yml +++ b/.github/workflows/matlab-ci.yml @@ -25,7 +25,7 @@ jobs: - uses: actions/checkout@v2 - name: Start display server - if: matrix.platform == 'ubuntu-latest' + if: ${{ matrix.platform == 'ubuntu-latest' }} run: | sudo apt-get install xvfb Xvfb :99 & From 7ba957359547dffc5341558cefc53a0ec07e7162 Mon Sep 17 00:00:00 2001 From: Andy Campbell <47190204+acampbel@users.noreply.github.com> Date: Mon, 8 Jan 2024 15:09:01 -0500 Subject: [PATCH 3/9] Update matlab-ci.yml --- .github/workflows/matlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/matlab-ci.yml b/.github/workflows/matlab-ci.yml index 61132ad..573fc9a 100644 --- a/.github/workflows/matlab-ci.yml +++ b/.github/workflows/matlab-ci.yml @@ -33,7 +33,7 @@ jobs: # Sets up MATLAB on the GitHub Actions runner - name: Setup MATLAB - uses: matlab-actions/setup-matlab@v1 + uses: matlab-actions/setup-matlab@v2-beta with: release: ${{ matrix.release }} From de0e817eb4c7123fa61d88490a959ed9ba70ba62 Mon Sep 17 00:00:00 2001 From: apuvvala Date: Sun, 2 Jun 2024 07:50:30 -0400 Subject: [PATCH 4/9] buildfile --- buildfile.m | 167 ---------------------------------------------------- 1 file changed, 167 deletions(-) delete mode 100644 buildfile.m diff --git a/buildfile.m b/buildfile.m deleted file mode 100644 index 813068d..0000000 --- a/buildfile.m +++ /dev/null @@ -1,167 +0,0 @@ -function plan = buildfile - -plan = buildplan(localfunctions); - -plan("test").Dependencies = ["mex", "pcode","setup"]; -plan("toolbox").Dependencies = ["lint", "test", "doc"]; - -plan("doc").Dependencies = "docTest"; -plan("docTest").Dependencies = "setup"; - -plan("install").Dependencies = "integTest"; -plan("integTest").Dependencies = "toolbox"; - -plan("lintAll") = matlab.buildtool.Task("Description","Find code issues in source and tests"); -plan("lintAll").Dependencies = ["lint", "lintTests"]; - -plan.DefaultTasks = "integTest"; -end - -function setupTask(context) -% Setup paths for the build -addpath(fullfile(context.Plan.RootFolder,"toolbox")); -addpath(fullfile(context.Plan.RootFolder,"toolbox","doc")); -end - -function lintTask(~) -% Find static code issues - -issues = codeIssues(["toolbox", "pcode"]); -if ~isempty(issues.Issues) - disp(formattedDisplayText(issues.Issues,"SuppressMarkup",true)); - disp("Detected code issues in source") -end -if ~isempty(issues.SuppressedIssues) - disp(formattedDisplayText(issues.SuppressedIssues,"SuppressMarkup",true)); - disp("Detected suppressed issues in source") -end -end - -function mexTask(~) -% Compile mex files - -mex mex/convec.c -outdir toolbox/; -end - -function docTask(~) -% Generate the doc pages -connector.internal.startConnectionProfile("loopbackHttps"); -com.mathworks.matlabserver.connector.api.Connector.ensureServiceOn(); - -export("toolbox/doc/GettingStarted.mlx","toolbox/doc/GettingStarted.html"); -end - -function docTestTask(~) -% Test the doc and examples - -results = runtests("tests/doc"); -disp(results); -assertSuccess(results); -end - -function testTask(~) -% Run the unit tests - -results = runtests("tests"); -disp(results); -assertSuccess(results); -end - -function lintTestsTask(~) -% Find code issues in test code - -issues = codeIssues("tests"); -if ~isempty(issues.Issues) - disp(formattedDisplayText(issues.Issues,"SuppressMarkup",feature("hotlinks"))); - disp("Detected code issues in tests") -end -if ~isempty(issues.SuppressedIssues) - disp(formattedDisplayText(issues.SuppressedIssues,"SuppressMarkup",feature("hotlinks"))); - disp("Detected suppressed issues in tests") -end -end - -function toolboxTask(~) -% Create an mltbx toolbox package -dir toolbox/*.mex* -matlab.addons.toolbox.packageToolbox("Mass-Spring-Damper.prj","release/Mass-Spring-Damper.mltbx"); -end - -function pcodeTask(context) -% Obfuscate m-files - -% Grab the help text for the pcoded function to generate a help-only m-file -mfile = "pcode/springMassDamperDesign.m"; - -helpText = deblank(string(help(mfile))); -helpText = split(helpText,newline); -helpText = replaceBetween(helpText, 1, 1, "%"); % Add comment symbols - -% Write the file -fid = fopen("toolbox/springMassDamperDesign.m","w"); -closer = onCleanup(@() fclose(fid)); -fprintf(fid, "%s\n", helpText); - -% Now pcode the file -startDir = cd("toolbox/"); -cleaner = onCleanup(@() cd(startDir)); -pcode(fullfile(context.Plan.RootFolder,"pcode/springMassDamperDesign.m")); - -end - -function cleanTask(~) -% Clean all derived artifacts - -derivedFiles = [... - "toolbox/springMassDamperDesign.m" - "toolbox/springMassDamperDesign.p" - "toolbox/convec." + mexext - "toolbox/doc/GettingStarted.html" - "release/Mass-Spring-Damper.mltbx" - ]; - -arrayfun(@deleteFile, derivedFiles); -end - -function integTestTask(~) -% Run integration tests - -import matlab.addons.toolbox.installToolbox; -import matlab.addons.toolbox.uninstallToolbox; - -sourceFile = which("simulateSystem"); - -% Remove source -sourcePaths = cellstr(fullfile(pwd, ["toolbox", "toolbox" + filesep + "doc"])); -origPath = rmpath(sourcePaths{:}); -pathCleaner = onCleanup(@() path(origPath)); - -% Install Toolbox -tbx = installToolbox("release/Mass-Spring-Damper.mltbx"); -tbxCleaner = onCleanup(@() uninstallToolbox(tbx)); - -assert(~strcmp(sourceFile,which("simulateSystem")), ... - "Did not setup integ environment toolbox correctly"); - -results = runtests("tests","IncludeSubfolders",true); -disp(results); -assertSuccess(results); - -clear pathCleaner tbxCleaner; -assert(strcmp(sourceFile,which("simulateSystem")), ... - "Did not restore integ environment correctly"); - -end - -function installTask(~) -% Install the toolbox locally -matlab.addons.toolbox.installToolbox("release/Mass-Spring-Damper.mltbx"); -end - - -function deleteFile(file) -if exist(file,"file") - delete(file); -end -end - From a5d8771efe887a840cb0d9c19dbb60d935939aba Mon Sep 17 00:00:00 2001 From: apuvvala Date: Sun, 2 Jun 2024 07:51:11 -0400 Subject: [PATCH 5/9] introducing buildfile --- buildfile.m | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 buildfile.m diff --git a/buildfile.m b/buildfile.m new file mode 100644 index 0000000..d1bab2b --- /dev/null +++ b/buildfile.m @@ -0,0 +1,32 @@ +function plan = buildfile +import matlab.buildtool.tasks.* +import matlabtest.plugins.codecoverage.StandaloneReport +import matlab.unittest.plugins.codecoverage.CoberturaFormat + +plan = buildplan(localfunctions); + +plan("clean") = CleanTask; + +plan("check") = CodeIssuesTask; + +plan("test") = TestTask(SourceFiles="toolbox").addCodeCoverage([StandaloneReport("mystandalonereport.html") CoberturaFormat("cov.xml")]); + +plan("test").Dependencies = ["setup" "mex" "pcode"]; + +% plan("mex") = MexTask.forEachFile("mex\*.c", "toolbox"); + +plan("mex") = MexTask("mex\convec.c", "toolbox"); + +plan("pcode") = PcodeTask("pcode", "toolbox"); + +% plan("toolbox") = ToolboxTask.fromToolboxProject("Mass-Spring-Damper.prj"); +% plan("toolbox").Dependencies = ["check" "test"]; + +% plan.DefaultTasks = "toolbox"; +plan.DefaultTasks = ["check" "test"]; +end + +function setupTask(~) +addpath("toolbox"); +addpath(fullfile("toolbox", "doc")); +end From 013aa9af7d61df441da946b289d54f2aa199a226 Mon Sep 17 00:00:00 2001 From: Ajay Puvvala <115959883+apuvvala-mw@users.noreply.github.com> Date: Sun, 2 Jun 2024 07:54:17 -0400 Subject: [PATCH 6/9] Update matlab-ci.yml Updated ci.yml --- .github/workflows/matlab-ci.yml | 102 ++++++++++++++------------------ 1 file changed, 44 insertions(+), 58 deletions(-) diff --git a/.github/workflows/matlab-ci.yml b/.github/workflows/matlab-ci.yml index 573fc9a..fba3f6a 100644 --- a/.github/workflows/matlab-ci.yml +++ b/.github/workflows/matlab-ci.yml @@ -3,76 +3,62 @@ name: MATLAB Build # Controls when the action will run. -on: - push: # Runs on push events - pull_request: # Runs on pull requests - workflow_dispatch: # Allows you to run this workflow manually from the Actions tab +on: + # Triggers the workflow on push or pull request events but only for the main branch + push: + branches: [ main ] + pull_request: + branches: [ main ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: jobs: # This workflow contains a single job called "build" build: - strategy: - matrix: - platform: [ubuntu-latest, windows-latest, macos-latest] - release: [R2022b, latest] - # The type of runner that the job will run on - runs-on: ${{ matrix.platform }} + runs-on: ubuntu-latest # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - - name: Start display server - if: ${{ matrix.platform == 'ubuntu-latest' }} - run: | - sudo apt-get install xvfb - Xvfb :99 & - echo "DISPLAY=:99" >> $GITHUB_ENV - - # Sets up MATLAB on the GitHub Actions runner - - name: Setup MATLAB - uses: matlab-actions/setup-matlab@v2-beta + # Sets up MATLAB on a GitHub-hosted runner + - name: Set up MATLAB + uses: matlab-actions/setup-matlab@v2 with: - release: ${{ matrix.release }} + release: R2024a # Runs a set of commands using the runners shell - - name: Run toolbox build - uses: matlab-actions/run-build@v1 - - # Runs a set of commands using the runners shell - - name: Run all tests - uses: matlab-actions/run-tests@v1 - with: - source-folder: . - test-results-pdf: artifacts/report/test-report.pdf - test-results-junit: artifacts/results/test-results.xml - code-coverage-cobertura: artifacts/coverage/coverage.xml + #- name: Run all tests + # uses: matlab-actions/run-tests@v2 + # with: + # source-folder: code - - - name: Upload Test Report - if: ${{ always() }} - uses: actions/upload-artifact@v3 + - name: Cache buildtool artifacts + id: buildtool-cache + uses: actions/cache@v4 with: - # Artifact name - name: Test Report - # A file, directory or wildcard pattern that describes what to upload - path: artifacts/report/test-report.pdf - - - name: Upload Test Results - if: ${{ always() }} - uses: actions/upload-artifact@v3 - with: - # Artifact name - name: Test Report - # A file, directory or wildcard pattern that describes what to upload - path: artifacts/results/test-results.xml - - - name: Upload Test Coverage - uses: actions/upload-artifact@v3 - with: - # Artifact name - name: Test Coverage - # A file, directory or wildcard pattern that describes what to upload - path: artifacts/coverage/coverage.xml + path: | + .buildtool + results + key: ${{ runner.os }}-buildtool-cache-${{ github.ref }} + + # Run MATLAB build + - name: Run the default "test" task in the build file + uses: matlab-actions/run-build@v2 + + #- name: List contents of .buildtool + # run: ls -la .buildtool/**/* + + #- name: Lookup test task trace + # uses: matlab-actions/run-command@v2 + # with: + # command: lookUpTestTaskTrace + + # You can use "run-command" to execute custom MATLAB scripts, functions, or statements + #- name: Run custom testing procedure + # uses: matlab-actions/run-command@v2 + # with: + # command: disp('Running my custom testing procedure!'); addpath('code'); results = runtests('IncludeSubfolders', true); assertSuccess(results); From 68a76975d1aa56e2f77849f2f545d71a66ff3d4b Mon Sep 17 00:00:00 2001 From: apuvvala Date: Sun, 2 Jun 2024 07:59:03 -0400 Subject: [PATCH 7/9] Do not generate code coverage for now --- buildfile.m | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/buildfile.m b/buildfile.m index d1bab2b..0aa937d 100644 --- a/buildfile.m +++ b/buildfile.m @@ -1,7 +1,7 @@ function plan = buildfile import matlab.buildtool.tasks.* -import matlabtest.plugins.codecoverage.StandaloneReport -import matlab.unittest.plugins.codecoverage.CoberturaFormat +% import matlabtest.plugins.codecoverage.StandaloneReport +% import matlab.unittest.plugins.codecoverage.CoberturaFormat plan = buildplan(localfunctions); @@ -9,7 +9,8 @@ plan("check") = CodeIssuesTask; -plan("test") = TestTask(SourceFiles="toolbox").addCodeCoverage([StandaloneReport("mystandalonereport.html") CoberturaFormat("cov.xml")]); +% plan("test") = TestTask(SourceFiles="toolbox").addCodeCoverage([StandaloneReport("mystandalonereport.html") CoberturaFormat("cov.xml")]); +plan("test") = TestTask; plan("test").Dependencies = ["setup" "mex" "pcode"]; From fda30d893f90ac2a2be377db5d1435fc596f1cb9 Mon Sep 17 00:00:00 2001 From: apuvvala Date: Sun, 2 Jun 2024 08:05:06 -0400 Subject: [PATCH 8/9] backslash --- buildfile.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildfile.m b/buildfile.m index 0aa937d..9dff516 100644 --- a/buildfile.m +++ b/buildfile.m @@ -16,7 +16,7 @@ % plan("mex") = MexTask.forEachFile("mex\*.c", "toolbox"); -plan("mex") = MexTask("mex\convec.c", "toolbox"); +plan("mex") = MexTask("mex/convec.c", "toolbox"); plan("pcode") = PcodeTask("pcode", "toolbox"); From 13e3bbcfeeddc95c259c771ad1b97b05983f25fd Mon Sep 17 00:00:00 2001 From: Ajay Puvvala Date: Tue, 4 Feb 2025 13:13:38 -0500 Subject: [PATCH 9/9] changed mass to 2500 --- buildfile.m | 3 ++- pcode/springMassDamperDesign.m | 2 +- toolbox/simulateSystem.m | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/buildfile.m b/buildfile.m index 9dff516..443ccd9 100644 --- a/buildfile.m +++ b/buildfile.m @@ -10,7 +10,8 @@ plan("check") = CodeIssuesTask; % plan("test") = TestTask(SourceFiles="toolbox").addCodeCoverage([StandaloneReport("mystandalonereport.html") CoberturaFormat("cov.xml")]); -plan("test") = TestTask; +% plan("test") = TestTask(); +plan("test") = TestTask(SourceFiles="toolbox"); plan("test").Dependencies = ["setup" "mex" "pcode"]; diff --git a/pcode/springMassDamperDesign.m b/pcode/springMassDamperDesign.m index c684477..0d5dc76 100755 --- a/pcode/springMassDamperDesign.m +++ b/pcode/springMassDamperDesign.m @@ -12,4 +12,4 @@ design.k = 5e6; % Spring Constant design.c = 5e5; -%design.c = 2*m*sqrt(design.k/m); % Damping Coefficient to be critically damped +% design.c = 2*m*sqrt(design.k/m); % Damping Coefficient to be critically damped diff --git a/toolbox/simulateSystem.m b/toolbox/simulateSystem.m index 3ec7574..86d0705 100755 --- a/toolbox/simulateSystem.m +++ b/toolbox/simulateSystem.m @@ -11,7 +11,8 @@ % Constant variables z0 = [-0.1; 0]; % Initial Position and Velocity -m = 1500; % Mass +% m = 1500; % Mass +m = 2500; % Mass odefun = @(t,z) [0 1; -k/m -c/m]*z; [t, z] = ode45(odefun, [0, 1], z0);