Skip to content

Commit

Permalink
feat(publisher): add snapcraft publisher
Browse files Browse the repository at this point in the history
  • Loading branch information
malept committed Feb 1, 2018
1 parent 86f987d commit c5b7d0d
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 0 deletions.
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,7 @@ the JS file method mentioned above then you can use functions normally.
| GitHub Releases - `github` | Makes a new release for the current version (if required) and uploads the make artifacts as release assets | `process.env.GITHUB_TOKEN` - A personal access token with access to your releases <br />`forge.github_repository.owner` - The owner of the GitHub repository<br />`forge.github_repository.name` - The name of the GitHub repository <br />`forge.github_repository.draft` - Create the release as a draft, defaults to `true` <br />`forge.github_repository.prerelease` - Identify the release as a prerelease, defaults to `false` |
| Amazon S3 - `s3` | Uploads your artifacts to the given S3 bucket | `process.env.ELECTRON_FORGE_S3_SECRET_ACCESS_KEY` - Your secret access token for your AWS account _(falls back to the standard `AWS_SECRET_ACCESS_KEY` environment variable)_<br />`forge.s3.accessKeyId` - Your access key for your AWS account _(falls back to the standard `AWS_ACCESS_KEY_ID` environment variable)_<br />`forge.s3.bucket` - The name of the S3 bucket to upload to<br />`forge.s3.folder` - The folder path to upload to inside your bucket, defaults to your application version<br />`forge.s3.public` - Whether to make the S3 upload public, defaults to `false` |
| [Electron Release Server](https://github.com/ArekSredzki/electron-release-server) - `electron-release-server` | Makes a new release for the current version and uploads the artifacts to the correct platform/arch in the given version. If the version already exists no upload will be performed. The channel is determined from the current version. | `forge.electronReleaseServer.baseUrl` - The base URL of your release server, no trailing slash<br />`forge.electronReleaseServer.username` - The username for the admin panel on your server<br />`forge.electronReleaseServer.password` - The password for the admin panel on your server |
| [Snapcraft](https://snapcraft.io/store/) - `snapStore` | Uploads generated Snaps to the Snap Store. | `forge.snapStore.release` - If specified, a comma-separated list of channels to release to. |

For example:

Expand Down Expand Up @@ -262,6 +263,13 @@ For example:
"password": "no_one_will_guess_this"
}
}

// Snap Store
{
"snapStore": {
"release": "candidate,beta"
}
}
```

## Custom `make` and `publish` targets
Expand Down
28 changes: 28 additions & 0 deletions src/publishers/snapcraft.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import fs from 'fs-extra';
import path from 'path';
import Snapcraft from 'electron-installer-snap/snapcraft';

import asyncOra from '../util/ora-handler';

/**
* `forgeConfig.snapStore`:
* * `release`: comma-separated list of channels to release to
*/
export default async ({ dir, artifacts, forgeConfig }) => {
const snapArtifacts = artifacts.filter(artifact => artifact.endsWith('.snap'));

if (snapArtifacts.length === 0) {
throw 'No snap files to upload!';
}

const snapcraftCfgPath = path.join(dir, '.snapcraft', 'snapcraft.cfg');

if (!await fs.pathExists(snapcraftCfgPath)) {
throw 'Snapcraft config not found!';
}

await asyncOra('Pushing snap to the snap store', async () => {
const snapcraft = new Snapcraft();
await snapcraft.run(dir, 'push', forgeConfig.snapStore, snapArtifacts);
});
};

0 comments on commit c5b7d0d

Please sign in to comment.