cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Choose Language Hide Translation Bar
pauldeen
Level VI

jmpaddin development on Github

I would like to migrate my add-in development to github and enable easy updating.

  1. If I push code, a github action should run that zips the source folder up and creates the latest.jmpaddin in the root of the repo.
  2. In the add-in I want to have a button that checks the latest.jmpaddin from the repo and downloads and installs if it is newer than the current version.

Before I go deep into developing this: is there anybody that already built something like this. Anything you can share?

1 ACCEPTED SOLUTION

Accepted Solutions
pauldeen
Level VI

Re: jmpaddin development on Github

I have a working version.

Here is my code repository, code contributions are welcome!

https://github.com/PaulAntonDeen/Auto-Updating-Addin 

View solution in original post

7 REPLIES 7
ih
Super User (Alumni) ih
Super User (Alumni)

Re: jmpaddin development on Github

Build

I just started working on this for my own add-ins, I got as far as a powershell script that I can kick off in GitLab using YAML, but I haven't dove into GitHub's CI yet.  Here is my first-draft build script:

 

View more...
#PowerShell
#Config
#  Set output file name
$FilePathPrefix = "JMPValidation"

#Run Unit Tests


#NaturalDocs
& "C:\Program Files (x86)\Natural Docs\NaturalDocs.exe" "NaturalDocs"


#Save temporary copy of files
$TempPath = "AddinFilesTempForBuild/"

if (Test-Path $TempPath) {
    Remove-Item -Recurse -Force -Confirm:$false $TempPath
}
New-Item -Path $TempPath -ItemType Directory

Copy-Item -Recurse -Path "AddinFiles\*" -Destination $TempPath

#Update temporary copy of files
$updatetime = Get-Date ((Get-Date).ToUniversalTime()) -UFormat %s
$updatetime = [math]::Round($updatetime) + 2082823200
$customMetadataPath = $TempPath+"customMetadata.jsl"
(Get-Content $customMetadataPath) `
    -replace 'List\( \"buildDate\", (\d+) \),', ('List( "buildDate", '+$updatetime+' ),') |
  Out-File $customMetadataPath
$content = Get-Content -path $customMetadataPath

#Make add-in file
$ZipFileName = $FilePathPrefix+".zip"
$AddinFileName = $FilePathPrefix+".jmpaddin"
if (Test-Path $ZipFileName) {
    Remove-Item -Recurse -Force -Confirm:$false  $ZipFileName
}
if (Test-Path $AddinFileName) {
    Remove-Item -Recurse -Force -Confirm:$false  $AddinFileName
}
$compress = @{
    Path = $TempPath+"\*"
    CompressionLevel = "Fastest"
    DestinationPath = $ZipFileName
}
Compress-Archive @compress
Rename-Item -Path $ZipFileName -NewName $AddinFileName

#Cleanup
if (Test-Path $TempPath) {
    Remove-Item -Recurse -Force -Confirm:$false $TempPath
}

Auto-Updating

Check out this article:

Add-In Manager, Part 2: Deploying auto-updating add-ins to users 

 

pauldeen
Level VI

Re: jmpaddin development on Github

I have a working version.

Here is my code repository, code contributions are welcome!

https://github.com/PaulAntonDeen/Auto-Updating-Addin 

Michael_MXAK
Level IV

Re: jmpaddin development on Github

We have built something similar at our company, and we gave a talk on it at last year's JDS! As Easy as Uploading a Photo: Building, Sharing, and Updating Add-ins Automatica... - JMP User Commu...

 

We use GitLab but conceptually it's similar. We've included a ZIP of our build scripts at the link above.

pauldeen
Level VI

Re: jmpaddin development on Github

Thanks, I did actually look at that before I started. I need to look into GitLab some more maybe.

vince_faller
Super User (Alumni)

Re: jmpaddin development on Github

I ran ours on tag for releases, but we had multiple developers and we wanted to have more general testing than what we had for all merge requests.  One thing that tripped me up REAL hard when having a CI pipeline run was having the pipeline run things as system.  I had to use PSExec to get past some JMP dialogs (just the first time).  

Vince Faller - Predictum
Michael_MXAK
Level IV

Re: jmpaddin development on Github

I ran ours on tag for releases, but we had multiple developers and we wanted to have more general testing than what we had for all merge requests.

Our solution as implemented immediately builds the add-in for any new commit on a branch named `beta` from literally anyone in our company who wants to contribute, and we have a staged multi-branch release that's owned by our maintainers who QC contributions on a two-week cycle for `main` branch releases. This introduces instantaneous builds but also a measure of quality control. That said, I wouldn't leave the `beta` branch building on demand in a public repo on the wide internet, that only works because I can tell if someone is trying to be nefarious, who it is, and there'd be repercussions for doing so. 

 

We also include functionality that automatically adds any `Function()` defined in a namespace in the `importables` directory into the JMP Scripting Index for JMP 14+, parsing out details of the function to form the documentation in the index. See the video, PDF, or ZIP from my talk for details! Also, please feel free to adapt or adopt anything from our codebase. We're fans of open practices!

pauldeen
Level VI

Re: jmpaddin development on Github

Can you share your workflow yaml? Or were you also in GitLab?