Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add workflows #2

Merged
merged 2 commits into from
May 15, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Build the rock
name: Build

on:
workflow_call:

jobs:
build:
runs-on: ubuntu-22.04
steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Get name
id: name
run: echo "name=$(yq '.name' rockcraft.yaml)" >> "$GITHUB_OUTPUT"

- uses: canonical/craft-actions/rockcraft-pack@main
id: rockcraft

- name: Install Syft
run: |
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin

- name: Create SBOM
run: syft ${{ steps.rockcraft.outputs.rock }} -o spdx-json=${{ steps.name.outputs.name }}.sbom.json

- name: Upload SBOM
uses: actions/upload-artifact@v3
with:
name: ${{ steps.name.outputs.name }}-sbom
path: "${{ steps.name.outputs.name }}.sbom.json"

- uses: actions/upload-artifact@v3
with:
name: rock
path: ${{ steps.rockcraft.outputs.rock }}
43 changes: 43 additions & 0 deletions .github/workflows/publish.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Publish the rock image to ghcr
name: Publish

on:
workflow_call:

jobs:
publish:
runs-on: ubuntu-22.04
steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Log in to the Container registry
uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Install skopeo
run: |
sudo snap install --devmode --channel edge skopeo

- name: Install yq
run: |
sudo snap install yq

- uses: actions/download-artifact@v3
with:
name: rock

- name: Import and push to github package
run: |
image_name="$(yq '.name' rockcraft.yaml)"
version="$(yq '.version' rockcraft.yaml)"
rock_file=$(ls *.rock | tail -n 1)
sudo skopeo \
--insecure-policy \
copy \
oci-archive:"${rock_file}" \
docker-daemon:"ghcr.io/canonical/${image_name}:${version}"
docker push ghcr.io/canonical/${image_name}:${version}
16 changes: 16 additions & 0 deletions .github/workflows/push_any.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
name: Push (any)

# When pushing to any branch other than "main", we:
# * build the rock image

on:
push:
branches-ignore:
- "main"
paths:
- "rockcraft.yaml"
- ".github/workflows/**.yaml"

jobs:
build:
uses: ./.github/workflows/build.yaml
27 changes: 27 additions & 0 deletions .github/workflows/push_main.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Push (main)

# When pushing to the "main" branch, we:
# * build the rock image
# * publish the image
# * scan the image and upload the artifacts to the repository

on:
push:
branches:
- main
paths:
- "rockcraft.yaml"
- ".github/workflows/**.yaml"
workflow_dispatch:

jobs:
build:
uses: ./.github/workflows/build.yaml

publish:
needs: build
uses: ./.github/workflows/publish.yaml

scan:
needs: publish
uses: ./.github/workflows/scan.yaml
30 changes: 30 additions & 0 deletions .github/workflows/scan.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Scan the published rock image and upload the results
name: Scan

on:
workflow_call:

jobs:
scan:
runs-on: ubuntu-22.04
steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Get name and version
id: image_info
run: |
echo "image_name=$(yq '.name' rockcraft.yaml)" >> "$GITHUB_OUTPUT"
echo "version=$(yq '.version' rockcraft.yaml)" >> "$GITHUB_OUTPUT"

- name: Scan image with Trivy
uses: aquasecurity/trivy-action@master
with:
image-ref: "ghcr.io/canonical/${{ steps.image_info.outputs.image_name }}:${{ steps.image_info.outputs.version }}"
format: 'sarif'
output: 'trivy-results.sarif'

- name: Upload scan results to GitHub
uses: github/codeql-action/upload-sarif@v2
with:
sarif_file: 'trivy-results.sarif'