Recipes for AutoPkg
autopkg / mosen-recipes Goto Github PK
View Code? Open in Web Editor NEWRecipes for osx application update management
License: MIT License
Recipes for osx application update management
License: MIT License
Recipes for AutoPkg
Tried to use the JSS recipe and got an error that it was unable to find the SmartGroupTemplate.xml
Hi,
I setup Munki to manage the Mac software updates for my computers, since the last update and the change of the CaralogURL I cannot get any Apple update, It reverted the CatalogURL to the old one and is not getting the updates.
My server is working, service is running. please help.
Thanks.
Error: Can't get download page for JetBrains Product: PhpStorm
Using the newer version pulled from the updated Sparkle Feed URL from #46, the PKG recipe now fails as per the below:
FileCreator
{'Input': {'file_content': '#!/bin/bash\n'
'\n'
'echo "postinstall script start******"\n'
'pwd\n'
'ls \n'
'# autopkg: do not run applet to append loginitem\n'
'# autopkg: TODO - may need to create a LaunchItem '
'to replace modification of login items\n'
'# TODO: only launch app if install is without '
'logout\n'
'#echo "Launching the app"\n'
'#open /Applications/i1Profiler/i1ProfilerTray.app\n'
'echo "Return Code:"\n'
'echo $?\n'
'echo "postinstall script end******"\n',
'file_path': '/Users/darren/Library/AutoPkg/Cache/com.github.mosen.pkg.i1Profiler/i1Profiler/pkgroot/i1ProfilerTrayComponent.pkg/Scripts/postinstall'}}
Traceback (most recent call last):
File "/Library/AutoPkg/autopkglib/FileCreator.py", line 41, in main
with open(self.env["file_path"], "w") as fileref:
FileNotFoundError: [Errno 2] No such file or directory: '/Users/darren/Library/AutoPkg/Cache/com.github.mosen.pkg.i1Profiler/i1Profiler/pkgroot/i1ProfilerTrayComponent.pkg/Scripts/postinstall'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Library/AutoPkg/autopkglib/__init__.py", line 676, in process
self.env = processor.process()
File "/Library/AutoPkg/autopkglib/__init__.py", line 483, in process
self.main()
File "/Library/AutoPkg/autopkglib/FileCreator.py", line 45, in main
raise ProcessorError(f"Can't create file at {self.env['file_path']}: {err}")
autopkglib.ProcessorError: Can't create file at /Users/darren/Library/AutoPkg/Cache/com.github.mosen.pkg.i1Profiler/i1Profiler/pkgroot/i1ProfilerTrayComponent.pkg/Scripts/postinstall: [Errno 2] No such file or directory: '/Users/darren/Library/AutoPkg/Cache/com.github.mosen.pkg.i1Profiler/i1Profiler/pkgroot/i1ProfilerTrayComponent.pkg/Scripts/postinstall'
File "/Library/AutoPkg/autopkglib/__init__.py", line 676, in process
self.env = processor.process()
Can't create file at /Users/darren/Library/AutoPkg/Cache/com.github.mosen.pkg.i1Profiler/i1Profiler/pkgroot/i1ProfilerTrayComponent.pkg/Scripts/postinstall: [Errno 2] No such file or directory: '/Users/darren/Library/AutoPkg/Cache/com.github.mosen.pkg.i1Profiler/i1Profiler/pkgroot/i1ProfilerTrayComponent.pkg/Scripts/postinstall'
Failed.
Receipt written to /Users/darren/Library/AutoPkg/Cache/com.github.mosen.pkg.i1Profiler/receipts/i1Profiler.pkg-receipt-20200918-103436.plist
The following recipes failed:
/Users/darren/Library/AutoPkg/RecipeRepos/com.github.autopkg.mosen-recipes/XRite/i1Profiler.pkg.recipe
Error in com.github.mosen.pkg.i1Profiler: Processor: FileCreator: Error: Can't create file at /Users/darren/Library/AutoPkg/Cache/com.github.mosen.pkg.i1Profiler/i1Profiler/pkgroot/i1ProfilerTrayComponent.pkg/Scripts/postinstall: [Errno 2] No such file or directory: '/Users/darren/Library/AutoPkg/Cache/com.github.mosen.pkg.i1Profiler/i1Profiler/pkgroot/i1ProfilerTrayComponent.pkg/Scripts/postinstall'
Looking at the pulled apart installer package, the package "i1ProfilerTrayComponent.pkg" is no longer included. I've reviewed the other packages for scripts and can't find any mention of an AppleScript line that the above was disabling.
I'd like a second opinion but it seems the AppleScript commands from the i1Profiler team are no longer included and we might be able to gut the majority of the work out of the PKG recipe?
Regarding FontExplorerXPro.pkg.recipe and the following comment:
https://github.com/autopkg/mosen-recipes/blob/master/Linotype/FontExplorerXPro.pkg.recipe#L9
"As of 4.2, FontExplorer X Pro no longer supports 'slipstreaming' the client license into the application bundle."
With FEX 4.2+, the license can be slipstreamed here:
FontExplorer X Pro.app/ClientLicense.fcl
I'd PR, but since the recipe doesn't create a pkg (it creates a dmg that contains a customized FEX application), I'm not entirely sure the goal of the recipe.
Hello mosen,
running your i1Profiler.munki recipe gives me the following error:
The following recipes failed:
i1Profiler.munki
Error in local.munki.i1Profiler: Processor: FileCreator: Error: Can't create file at /Users/master707/Library/AutoPkg/Cache/local.munki.i1Profiler/i1Profiler/pkgroot/i1ProfilerTrayComponent.pkg/Scripts/postinstall: [Errno 2] No such file or directory: u'/Users/master707/Library/AutoPkg/Cache/local.munki.i1Profiler/i1Profiler/pkgroot/i1ProfilerTrayComponent.pkg/Scripts/postinstall'
I guess they changed the structure of the package as the former postinstall script is now named to postflight and has the following path:
i1Profiler.pkg/i1profilerPostflight.pkg/Scripts/postflight
Or am I totally wrong?
Regards
Henning
Hello mosen,
when I run autopkg run -v FontExplorerXPro.munki I get the following error:
Processing FontExplorerXPro.munki...
SparkleUpdateInfoProvider
SparkleUpdateInfoProvider: Version retrieved from appcast: 128
SparkleUpdateInfoProvider: Found URL http://fex.linotype.com/update/client/mac/pro/plugins-4/PlugIns-small-128.zip
URLDownloader
URLDownloader: Storing new Last-Modified header: Wed, 16 Jul 2014 12:22:49 GMT
URLDownloader: Storing new ETag header: "3253907902"
URLDownloader: Downloaded /Users/master707/Library/AutoPkg/Cache/local.munki.FontExplorerXPro/downloads/PlugIns-small-128.zip
EndOfCheckPhase
MunkiImporter
creating pkginfo for /Users/master707/Library/AutoPkg/Cache/local.munki.FontExplorerXPro/downloads/PlugIns-small-128.zip failed: /Users/master707/Library/AutoPkg/Cache/local.munki.FontExplorerXPro/downloads/PlugIns-small-128.zip is not a valid installer item!
Failed.
Receipt written to /Users/master707/Library/AutoPkg/Cache/local.munki.FontExplorerXPro/receipts/FontExplorerXPro-receipt-20150323-093140.plist
The following recipes failed:
FontExplorerXPro.munki
Error in local.munki.FontExplorerXPro: Processor: MunkiImporter: Error: creating pkginfo for /Users/master707/Library/AutoPkg/Cache/local.munki.FontExplorerXPro/downloads/PlugIns-small-128.zip failed: /Users/master707/Library/AutoPkg/Cache/local.munki.FontExplorerXPro/downloads/PlugIns-small-128.zip is not a valid installer item!
The following new items were downloaded:
/Users/master707/Library/AutoPkg/Cache/local.munki.FontExplorerXPro/downloads/PlugIns-small-128.zip
and it seams that if the spaces in the post- and preuninstall script are not escaped like this:
<key>postinstall_script</key>
<string>#!/bin/sh
/Applications/FontExplorer\ X\ Pro.app/Contents/PlugIns/PlugIns.bundle/Contents/Resources/plugin-installer --install
exit 0
</string>
<key>preuninstall_script</key>
<string>#!/bin/sh
/Applications/FontExplorer\ X\ Pro.app/Contents/PlugIns/PlugIns.bundle/Contents/Resources/plugin-installer --uninstall
exit 0
the script fails.
Hello,
I'm using munki to update some applications on my network, I can see there is some apps with a 404 error, for example Wireshark.
I'm running the latest Munki tools, please help.
Thanks,
_
Looking for detail for: Wireshark, version latest...
Considering 1 items with name Wireshark from catalog production
Considering item Wireshark, version 2.4.0 with minimum os version required 10.5.0
Our OS version is 10.13.6
Found Wireshark, version 2.4.0 in catalog production
Looking for package org.wireshark.Wireshark.pkg, version 0.0.0.0
This package is not currently installed.
Need to install Wireshark
Downloading Wireshark 2.4.0 Intel 64-2.4.0.dmg from Wireshark 2.4.0 Intel 64-2.4.0.dmg
Downloading Wireshark 2.4.0 Intel 64-2.4.0.dmg from Wireshark 2.4.0 Intel 64-2.4.0.dmg
Downloading Wireshark 2.4.0 Intel 64-2.4.0.dmg...
Bytes received: 313
Status: 404
Headers: {u'Content-Length': u'313', u'Keep-Alive': u'timeout=5, max=100', u'Server': u'Apache', u'Connection': u'Keep-Alive', u'Date': u'Fri, 14 Sep 2018 14:46:20 GMT', u'Content-Type': u'text/html; charset=iso-8859-1'}
WARNING: Download of Wireshark failed: HTTP result 404: not found
_
Hi mosen,
if try to run the FontExplorerXPro.munki recipe with following Override:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Identifier</key>
<string>local.munki.FontExplorerXPro</string>
<key>Input</key>
<dict>
<key>MUNKI_REPO_SUBDIR</key>
<string>apps</string>
<key>NAME</key>
<string>FontExplorer X Pro</string>
<key>CLIENT_LICENSE</key>
<string>/Volumes/DS4600_RAID/Admin/ClientLicense.fcl</string>
</dict>
<key>ParentRecipe</key>
<string>com.github.mosen.munki.FontExplorerXPro</string>
</dict>
</plist>
I will be asked if I accept the license agreement and the run stops there waiting for input:
[someone@server:/Volumes/DS4600_RAID/Admin]1050$ autopkg run -vv FontExplorerXPro.munki
Processing FontExplorerXPro.munki...
URLDownloader
{'Input': {'filename': u'FontExplorer X Pro.dmg',
'url': u'http://www.fontexplorerx.com/download/free-trial/Mac'}}
URLDownloader: Item at URL is unchanged.
URLDownloader: Using existing /Users/someone/Library/AutoPkg/Cache/local.munki.FontExplorerXPro/downloads/FontExplorer X Pro.dmg
{'Output': {'pathname': u'/Users/someone/Library/AutoPkg/Cache/local.munki.FontExplorerXPro/downloads/FontExplorer X Pro.dmg'}}
EndOfCheckPhase
{'Input': {}}
{'Output': {}}
AppDmgVersioner
{'Input': {'dmg_path': u'/Users/someone/Library/AutoPkg/Cache/local.munki.FontExplorerXPro/downloads/FontExplorer X Pro.dmg'}}
Agree Y/N?
After entering "Y" the run proceeds and I am asked a second time
Agree Y/N? Y
AppDmgVersioner: Mounted disk image /Users/someone/Library/AutoPkg/Cache/local.munki.FontExplorerXPro/downloads/FontExplorer X Pro.dmg
AppDmgVersioner: BundleID: com.linotype.FontExplorerX
AppDmgVersioner: Version: 4.2.1
{'Output': {'app_name': u'FontExplorer X Pro.app',
'bundleid': u'com.linotype.FontExplorerX',
'version': u'4.2.1'}}
Copier
{'Input': {'destination_path': u'/Users/someone/Library/AutoPkg/Cache/local.munki.FontExplorerXPro/FontExplorer X Pro/FontExplorer X Pro.app',
'overwrite': True,
'source_path': u'/Users/someone/Library/AutoPkg/Cache/local.munki.FontExplorerXPro/downloads/FontExplorer X Pro.dmg/FontExplorer X Pro.app'}}
Agree Y/N? Y
And if I do subsequent runs it creates multiple packages and multiple packageinfos of the same version:
The following new items were imported:
Name Version Catalogs Pkginfo Path
---- ------- -------- ------------
FontExplorer X Pro 4.2.1 testing apps/FontExplorer X Pro-4.2.1.plist
The following new items were imported:
Name Version Catalogs Pkginfo Path
---- ------- -------- ------------
FontExplorer X Pro 4.2.1 testing apps/FontExplorer X Pro-4.2.1__1.plist
Is this the expected behavior or am I doing something terribly wrong?
Hello,
when I do (again on 10.6.8 Server ;-))
autopkg run i1Profiler.munki
with the following RecipeOverride:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Identifier</key>
<string>local.munki.i1Profiler</string>
<key>Input</key>
<dict>
<key>MUNKI_REPO_SUBDIR</key>
<string>apps</string>
</dict>
<key>ParentRecipe</key>
<string>com.github.mosen.munki.i1Profiler</string>
</dict>
</plist>
I get the following pkginfo in my repo:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>RestartAction</key>
<string>RequireRestart</string>
<key>_metadata</key>
<dict>
<key>created_by</key>
<string>someone</string>
<key>creation_date</key>
<date>2014-10-23T16:35:03Z</date>
<key>munki_version</key>
<string>2.0.0.2229</string>
<key>os_version</key>
<string>10.6.8</string>
</dict>
<key>autoremove</key>
<false/>
<key>blocking_applications</key>
<array>
<string>i1ProfilerTray</string>
<string>i1Profiler</string>
</array>
<key>catalogs</key>
<array>
<string>testing</string>
</array>
<key>description</key>
<string>i1Profiler Profile Creation Tool</string>
<key>display_name</key>
<string>i1Profiler</string>
<key>installed_size</key>
<integer>514560</integer>
<key>installer_item_hash</key>
<string>1424f87188ded5013779b49701b4bae499b39a7dc28971cc480481fdb769190e</string>
<key>installer_item_location</key>
<string>apps/i1Profiler Silent-36.3.5.3.3.pkg</string>
<key>installer_item_size</key>
<integer>162913</integer>
<key>minimum_os_version</key>
<string>10.6.0</string>
<key>name</key>
<string>i1Profiler</string>
<key>receipts</key>
<array>
<dict>
<key>optional</key>
<true/>
<key>packageid</key>
<string>com.xrite.hasp.installer.pkg</string>
<key>version</key>
<string>1.0</string>
</dict>
</array>
<key>unattended_install</key>
<true/>
<key>uninstall_method</key>
<string>removepackages</string>
<key>uninstallable</key>
<true/>
<key>version</key>
<string>36.3.5.3.3</string>
</dict>
</plist>
is this the supposed result? As when I run makepkginfo on the created an imported pkg I get the following:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>RestartAction</key>
<string>RequireRestart</string>
<key>_metadata</key>
<dict>
<key>created_by</key>
<string>someone</string>
<key>creation_date</key>
<date>2014-10-23T16:53:32Z</date>
<key>munki_version</key>
<string>2.0.0.2229</string>
<key>os_version</key>
<string>10.6.8</string>
</dict>
<key>autoremove</key>
<false/>
<key>catalogs</key>
<array>
<string>testing</string>
</array>
<key>description</key>
<string></string>
<key>display_name</key>
<string>i1Profiler</string>
<key>installed_size</key>
<integer>514560</integer>
<key>installer_item_hash</key>
<string>1424f87188ded5013779b49701b4bae499b39a7dc28971cc480481fdb769190e</string>
<key>installer_item_location</key>
<string>apps/i1Profiler Silent-36.3.5.3.3.pkg</string>
<key>installer_item_size</key>
<integer>162913</integer>
<key>minimum_os_version</key>
<string>10.5.0</string>
<key>name</key>
<string>i1Profiler Silent</string>
<key>receipts</key>
<array>
<dict>
<key>packageid</key>
<string>com.xrite.hasp.installer.pkg</string>
<key>version</key>
<string>1.0</string>
</dict>
<dict>
<key>installed_size</key>
<integer>181488</integer>
<key>packageid</key>
<string>com.xrite.i1Profiler.component.pkg</string>
<key>version</key>
<string>1.5.6.16479</string>
</dict>
<dict>
<key>installed_size</key>
<integer>80576</integer>
<key>packageid</key>
<string>com.xrite.i1Profiler.tray.component.pkg</string>
<key>version</key>
<string>1.5.6.16479</string>
</dict>
<dict>
<key>installed_size</key>
<integer>222535</integer>
<key>packageid</key>
<string>com.xrite.i1Profiler.SystemFolders.pkg</string>
<key>version</key>
<string>1.5.6.16479</string>
</dict>
<dict>
<key>installed_size</key>
<integer>29961</integer>
<key>packageid</key>
<string>com.xrite.xritedeviceservices.installer.pkg</string>
<key>version</key>
<string>36.3.5.3.3</string>
</dict>
</array>
<key>uninstall_method</key>
<string>removepackages</string>
<key>uninstallable</key>
<true/>
<key>version</key>
<string>36.3.5.3.3</string>
</dict>
</plist>
What I am doing wrong here :-). Any help would be highly appreciated
Regards
Henning
Hello,
on line 49 there is missing comma and recipe if failing because of this.
David
The recipe currently pulls a static version, having it pull the latest would be great.
Hi,
When using the recipe for Jetbrains PHPStorm and Pycharm (and might be the same for other Jetbrains products) the i386 and x86_64 is downloaded with https://github.com/autopkg/mosen-recipes/blob/master/JetBrains/JetbrainsURLProvider.py.
Is it possible to change the JetbrainsURLProvider.py to change it to downloading the Universal builds?
The URL for the Universal Build: https://download.jetbrains.com/webide/PhpStorm-2020.3.3-aarch64.dmg?_ga=2.230357339.653580123.1616099918-1422406915.1614795454
The downloads page say that it's for Apple Silicon, but when checking it has architecture: x86_64 and arm64.
https://www.jetbrains.com/phpstorm/download/#section=mac
I would love to create a pull request to change this, but I don't know how i would change the JetbrainsURLProvider.py.
Another possibility would to be wait if Jetbrains changes their default URL to the Universal build.
Thanks!
Seems as though the download URL is set to https://mysoftware.esko.com/public/downloads/Free/CT-LP%2014.1.1/Latest/Mac which generates a 404 when you go there.
I found the updated URL
https://mysoftware.esko.com/public/downloads/Free/CT-LP/Latest/Mac
strangely enough the first URL when used will download a DMG file but it is corrupt and will not mount.
Copier {'Input': {'destination_path': u'/Users/serveradmin/Library/AutoPkg/Cache/local.munki.CTLP/CT-LP.pkg', 'overwrite': True, 'source_path': u'/Users/serveradmin/Library/AutoPkg/Cache/local.munki.CTLP/downloads/CT-LP.dmg/CT-LP.pkg'}} Copier: hdiutil imageinfo error hdiutil: imageinfo failed - image not recognized with image /Users/serveradmin/Library/AutoPkg/Cache/local.munki.CTLP/downloads/CT-LP.dmg. /Users/serveradmin/Library/AutoPkg/Cache/local.munki.CTLP/downloads/CT-LP.dmg is not mounted Failed.
Thinking that updating the URL may fix the issue. Manually downloaded and imported the DMG fine.
Unfortunately Jamf isn't as smart about DMGs as Munki. The IntelliJ recipe set needs a pkg recipe that works alongside the JSS recipe to get a pkg uploaded to Jamf. Because… Jamf.
In testing the FirefoxESRPolicies.pkg
recipe I found that it would fail on the step where the policies.json
file is copied to the path within the Firefox.app bundle.
Copier: Copied /private/tmp/dmg.YkeUbA/Firefox.app to /Users/haircut/Library/AutoPkg/Cache/local.pkg.FirefoxESRPoliciesLAC/Firefox/Applications/Firefox.app
{'Output': {}}
Copier
{'Input': {'destination_path': u'/Users/haircut/Library/AutoPkg/Cache/local.pkg.FirefoxESRPoliciesLAC/Firefox/Applications/Firefox.app/Contents/Resources/distribution/policies.json',
'source_path': u'/Users/haircut/Library/AutoPkg/RecipeOverrides/policies.json'}}
Can't copy /Users/haircut/Library/AutoPkg/RecipeOverrides/policies.json to /Users/haircut/Library/AutoPkg/Cache/local.pkg.FirefoxESRPoliciesLAC/Firefox/Applications/Firefox.app/Contents/Resources/distribution/policies.json: [Errno 2] No such file or directory: u'/Users/haircut/Library/AutoPkg/Cache/local.pkg.FirefoxESRPoliciesLAC/Firefox/Applications/Firefox.app/Contents/Resources/distribution/policies.json'
Failed.
Through some poking I found that the Firefox.app/Contents/Resources/distribution
directory does not exist by default when Firefox ESR is downloaded. The Copier
processor is not able to create non-existent directories, thus the failure; the destination path does not exist.
To test, I modified the parent recipe (instead of my override) to inject an additional Copier step before the attempt to copy policies.json
. This step simply copies an empty distribution
directory from the %RECIPE_DIR%
.
<dict>
<key>Arguments</key>
<dict>
<key>source_path</key>
<string>%RECIPE_DIR%/distribution</string>
<key>destination_path</key>
<string>%pkgroot%/Applications/Firefox.app/Contents/Resources/distribution</string>
</dict>
<key>Processor</key>
<string>Copier</string>
</dict>
<dict>
<key>Arguments</key>
<dict>
<key>source_path</key>
<string>%RECIPE_DIR%/%POLICIES_FILENAME%</string>
<key>destination_path</key>
<string>%pkgroot%/Applications/Firefox.app/Contents/Resources/distribution/policies.json</string>
</dict>
<key>Processor</key>
<string>Copier</string>
</dict>
This adds the additional requirement of having this "dummy" distribution
directory in the %RECIPE_DIR%
path.
Perhaps a better solution would be to require that instead of just creating the policies.json
file in %RECIPE_DIR%
, one must create the full path distribution/policies.json
. Then, a single Copier
step could correctly copy the distribution
directory and its contents to the Firefox app bundle before packaging.
Hi,
We're seeing the below error message when using the i1Profiler.download.recipe:
Error in local.munki.i1Profiler-dataJAR: Processor: SparkleUpdateInfoProvider: Error: Command '['/usr/bin/curl', '--compressed', '--location', 'http://lbxritecom.liquidweb.xrite.com/Downloads/Autoupdate/i1profiler_mac_appcast.xml']' returned non-zero exit status 56.
It looks like the Sparklefeed URL has changed to https://downloads.xrite.com/downloads/autoupdate/i1profiler_mac_appcast.xml
I'll log a PR to make these changes, and to add a CodeSignatureVerifier to the download.
However it looks like the downloaded package now might not need the changes in the .pkg recipe. I'll log that as a separate issue for discussion
It looks like your Lightroom download recipe doesn't work with the latest version of Lightroom.
I haven't had time to dig into it but I was just wondering if you were planning on updating it?
Version 5 is hardcoded...
<string>LightroomURLProvider</string>
<key>Arguments</key>
<dict>
<key>major_version</key>
<string>5</string>
</dict>
But after updating it to use '%VERSION%', this is the error I saw...
autopkg run -v Lightroom.download --key VERSION=6
Processing Lightroom.download...
LightroomURLProvider
Can't get Lightroom download URL from product site.
Failed.
Receipt written to /Users/mah60/Library/AutoPkg/Cache/com.github.mosen.download.Lightroom/receipts/Lightroom-receipt-20150630-120459.plist
The following recipes failed:
Lightroom.download
Error in com.github.mosen.download.Lightroom: Processor: LightroomURLProvider: Error: Can't get Lightroom download URL from product site.
Nothing downloaded, packaged or imported.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.