Update: built-in SFTP deployment is now available
Since my previous post, I've added one of the features I wanted most: built-in SFTP deployment in the reusable ObjoPublisher workflows.
The following reusable workflows can now optionally upload their generated artifacts directly to an SFTP server after they have been uploaded as normal GitHub Actions artifacts:
publish_objo_macos.yml
publish_objo_linux.yml
publish_objo_windows.yml
Simple configuration
A calling workflow only needs to provide:
with:
sftp-url: ${{ vars.SFTP_SERVER_URL }}
fail-on-sftp-error: true
secrets:
sftp-username: ${{ secrets.BINARIES_USER }}
sftp-password: ${{ secrets.BINARIES_PASSWORD }}
All three values are optional.
If sftp-url, sftp-username or sftp-password is missing, the upload step is skipped automatically and the build continues normally.
Artifacts are uploaded into platform-specific directories:
| Platform | Destination |
| macOS | <sftp-url>/macos/ |
| Linux | <sftp-url>/linux/ |
| Windows | <sftp-url>/windows/ |
The workflows still upload everything as GitHub Actions artifacts first, so successful builds remain available from GitHub even if the SFTP server is temporarily unavailable.
Better error reporting
I also added a new optional input:
fail-on-sftp-error: true
This allows build failures and deployment failures to be distinguished.
| Result | Exit code |
| Build and upload successful | 0 |
| Build failed | 1 |
Build successful, SFTP failed (fail-on-sftp-error: true) | 2 |
Build successful, SFTP failed (fail-on-sftp-error: false) | 0 |
Each reusable workflow now also exposes an sftp-upload output with one of:
Workflow summaries
All publishing workflows now generate a GitHub Actions workflow summary showing information such as:
- application name,
- publish targets,
- artifact name,
- build result,
- SFTP upload result.
It's much easier to see the outcome of a workflow without digging through the log.
macOS improvements
The macOS workflow has also become more flexible.
Apple signing and notarization secrets are now optional. If they're present, the workflow signs and notarizes the application. If they're omitted, it simply produces an unsigned build.
That means the same reusable workflow can now be used for both development builds and release builds.
ObjoBuilder examples updated
I've also updated the ObjoBuilder repository with three new example workflows demonstrating the new built-in SFTP functionality:
macos_publish_upload.yml
linux_publish_upload.yml
windows_publish_upload.yml
I intentionally kept the original examples as well.
The original workflows demonstrate a more traditional GitHub Actions approach:
- build the application,
- upload GitHub Actions artifacts,
- download those artifacts in another job,
- deploy them.
The new _sftp examples demonstrate the simpler approach where the reusable workflow performs the deployment itself.
So both approaches are available depending on how much post-processing you want to perform before deployment.
Both repositories now have much more complete documentation, including repository variables and secrets, signing configuration, caching, and deployment examples.
Repositories
ObjoPublisher (reusable workflows)
https://github.com/madamov/ObjoPublisher
ObjoBuilder (example calling workflows)
https://github.com/madamov/ObjoBuilder
I hope these workflows are useful to anyone looking to automate Objo Studio builds with GitHub Actions.