Linux Snap packages
How to build and release a snap package with codemagic.yaml
This guide will illustrate the basic steps necessary for building and publishing your app as a Snap package.
You can find a complete project showcasing these steps in our Sample projects repository.
instance_type: linux
or instance_type: linux_x2
in your codemagic.yaml
. See the build machine specification here.Adding the app to Codemagic
The apps you have available on Codemagic are listed on the Applications page. Click Add application to add a new app.
- If you have more than one team configured in Codemagic, select the team you wish to add the app to.
- Connect the repository where the source code is hosted. Detailed instructions that cover some advanced options are available here.
- Select the repository from the list of available repositories. Select the appropriate project type.
- Click Finish: Add application
Creating codemagic.yaml
In order to use codemagic.yaml
for build configuration on Codemagic, it has to be committed to your repository. The name of the file must be codemagic.yaml
and it must be located in the root directory of the repository. Detailed explanation can be found here.
If you prefer to write your codemagic.yaml
file from scratch, you can start with this minimal configuration.
workflows:
sample-workflow:
name: Codemagic Sample Workflow
max_build_duration: 120
instance_type: mac_mini_m2
codemagic.yaml
file. If you are building for both the Android and iOS, simply enter both workflows as:workflows:
android-workflow-id:
name: Android Sample Workflow
# .......
# .......
# .......
ios-workflow-id:
name: iOS Sample Workflow
# ......
Scan for the codemagic.yaml
file by selecting a branch to scan and clicking the Check for configuration file button at the top of the page. Note that you can have different configuration files in different branches.
Configure Snap
To set up Snap packaging, create a snapcraft.yaml
file with the necessary configurations according to Snapcraft guide for Flutter or follow the general snapcraft.yaml
guide.
Optionally, run the snapcraft snap
command locally to ensure that everything is set up.
You should store the snapcraft.yaml
file in the repository root. Another option is to store snapcraft.yaml
in the .snap
folder that is located in repository root.
Building snap packages
Include the snapcraft snap
command in the scripts
section of your codemagic.yaml
file as in the example below. The output of this command is a .snap
artifact that can later be used for publishing to the Snapcraft Snap Store.
workflows:
snap-build:
name: Snapcraft Build
instance_type: linux
environment:
vars:
SNAPCRAFT_BUILD_ENVIRONMENT: host
scripts:
- name: Create a snap
script: |
snapcraft snap --output flutter-codemagic-example.snap
artifacts:
- '**/*.snap'
Additionally, you may want to install the generated .snap
package onto your machine for testing. The package will not be code signed unless you publish it to Snap Store, so you would need to use the --dangerous
flag to install the package without code signing:
snap install your-package.snap --dangerous
SNAPCRAFT_BUILD_ENVIRONMENT
environment variable to host
. It is required to avoid virtualization. Read more about virtualization options here. Additionally, Snapcraft manages all the dependencies according to snapcraft.yaml
configuration. There is no need to include the Flutter version in codemagic.yaml
.Publishing to Snap Store
Snap packages can be published to the Snap Store.
Generate your Snapcraft credentials file by running the following command locally and providing your Snapcraft account username and password:
snapcraft export-login snapcraft-login-credentials
Run the following command and carefully copy/paste the output:
cat snapcraft-login-credentials | base64
Open your Codemagic app settings, and go to the Environment variables tab.
Enter the desired Variable name, e.g.
SNAPCRAFT_LOGIN_CREDENTIALS
.Paste the
base64
encoded credentials from Step 2. as Variable value.Enter the variable group name, e.g. snapcraft_credentials. Click the button to create the group.
Make sure the Secure option is selected.
Click the Add button to add the variable.
Add the variable group to your
codemagic.yaml
fileenvironment: groups: - snapcraft_credentials
In the
scripts
section, add steps to base64 decode the credentials file, log in to Snapcraft via CLI, build the snap package and release it to the desired channel.
scripts:
- name: Authenticate with Snap Store
script: |
echo $SNAPCRAFT_LOGIN_CREDENTIALS | base64 \
--decode > /home/builder/snapcraft-login-credentials
snapcraft login --with /home/builder/snapcraft-login-credentials
- name: Create a Snap package
script: |
snapcraft snap --output flutter-codemagic-example.snap
- name: Publish to Snap Store
script: |
snapcraft upload flutter-codemagic-example.snap --release stable