Skip to content

🐦 GitHub Action for setting up Snapcraft

License

Notifications You must be signed in to change notification settings

samuelmeuli/action-snapcraft

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Repository files navigation

Snapcraft Action

GitHub Action for setting up Snapcraft

Overview

This action…

  • Installs Snapcraft on Ubuntu/macOS
  • Optionally logs you in to the Snap Store
  • Allows you to run Snapcraft commands in your GitHub Actions workflows

Note that the more recently created snapcore/action-build and snapcore/action-publish effectively copy the use_lxd strategy (below). Building using this actions still takes ~3:30 min less time than snapcore/action-build.

Usage

Basic

To use this action, add the following step to your workflow:

- name: Install Snapcraft
  uses: samuelmeuli/action-snapcraft@v3

A full example:

name: My workflow

on: push

jobs:
  my-job:
    runs-on: ubuntu-latest
    env:
      SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAPCRAFT_TOKEN }}
    steps:
      - name: Check out Git repository
        uses: actions/checkout@v3

      - name: Install Snapcraft
        uses: samuelmeuli/action-snapcraft@v3

      # You can now run Snapcraft shell commands
      - name: Use Snapcraft
        run: snapcraft --help

Log in

This action can also log you in to the Snap Store. For this to work, you need an Ubuntu One account.

You will also need a Snap Store login token. To obtain one, run the following command on your machine:

snapcraft export-login --snaps SNAP_NAME --channels edge -

NOTE: You will need to manually push a package to the Snap Store to get a valid SNAP_NAME first.

Copy that token and add it as a secret to GitHub Actions. You can do this in your GitHub repository under Settings → Secrets. You can name it SNAPCRAFT_TOKEN for convenience.

Set SNAPCRAFT_STORE_CREDENTIALS environment variable either in:

  • root yml file: to be available for all jobs
  • inside a job: to be available inside a specific job (recommended), or
  • inside a step: to be available only in a specific step
env:
  SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAPCRAFT_TOKEN }}

Finally, add the following option to your workflow step:

- name: Install Snapcraft
  uses: samuelmeuli/action-snapcraft@v3
  with:
    skip_install: true # optional, if already installed in an earlier step

Build using LXD

Using runs-on: ubuntu-20.04 or later, LXD is availabe by default.

- name: Install Snapcraft with LXD
  uses: samuelmeuli/action-snapcraft@v3
- name: Build snap
  run: sg lxd -c 'snapcraft --use-lxd'

Development

Suggestions and contributions are always welcome! Please discuss larger changes via issue before submitting a pull request.

Currently maintained by @casperdcl.

Related