Skip to content

Commit

Permalink
Add velero package, minor tweaks to packages list docs
Browse files Browse the repository at this point in the history
  • Loading branch information
Nuru committed Jan 26, 2024
1 parent 335dd98 commit eb4a381
Show file tree
Hide file tree
Showing 14 changed files with 305 additions and 11 deletions.
3 changes: 3 additions & 0 deletions .github/auto-label.yml
Original file line number Diff line number Diff line change
Expand Up @@ -473,6 +473,9 @@ vendor/variant2:
vendor/vault:
- any: ["vendor/vault/**"]
all: ["!bin/**", "!tasks/**"]
vendor/velero:
- any: ["vendor/velero/**"]
all: ["!bin/**", "!tasks/**"]
vendor/vendir:
- any: ["vendor/vendir/**"]
all: ["!bin/**", "!tasks/**"]
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/auto-update-packages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ jobs:
- variant
- variant2
- vault
- velero
- vendir
- venona
- vert
Expand Down
264 changes: 264 additions & 0 deletions .github/workflows/velero.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,264 @@
#
# This workflow was created automatically from the `package-template.yml` by running `make -C .github workflows`
# DO NOT EDIT THIS WORKFLOW, changes will be lost on the next update.
#

name: "velero"
concurrency:
group: ${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }} (${{ inputs.package_version_override || 'LATEST' }}_r${{ inputs.release_number_override || '0' }})
cancel-in-progress: true
on:
push:
branches:
- master

paths:
- apk/**
- deb/**
- rpm/**
- tasks/**
- vendor/velero/**
- .github/workflows/velero.yml


pull_request:
types: [opened, synchronize, reopened]
paths:
- apk/**
- deb/**
- rpm/**
- tasks/**
- vendor/velero/**
- .github/workflows/velero.yml

#bridgecrew:skip=BC_REPO_GITHUB_ACTION_7:The whole point of the workflow dispatch is to feed in a version
workflow_dispatch:
inputs:
package_version_override:
description: 'Version of velero package to build. Defaults to vendor/velero/VERSION.'
required: false
type: string
release_number_override:
description: 'Zero-based release number of velero package to publish. Defaults to 0 (zero) when version is specified, ignored if not.'
required: false
type: string

env:
velero_VERSION: ${{ inputs.package_version_override }}
velero_RELEASE: ${{ inputs.release_number_override }}

jobs:
# Mergify cannot distinguish between 2 jobs with the same name run from different workflows,
# so each job must have a unique name for the rules to work properly.
# See https://github.com/Mergifyio/mergify/discussions/5082
# and https://github.com/Mergifyio/mergify/issues/5083
matrix-velero:
if: github.event_name != 'schedule'
runs-on: ubuntu-latest
outputs:
package-enabled: ${{ steps.info.outputs.package_enabled }}
package-matrix: ${{steps.info.outputs.package_matrix}}
arch-matrix: ${{steps.info.outputs.arch_matrix}}
apk-enabled: ${{ steps.info.outputs.package_enabled == 'true' && steps.info.outputs.apk_package_enabled == 'true' }}
steps:
- uses: actions/checkout@v4

- name: Export package build matrix
shell: bash
id: info
env:
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
run: |
echo setting ouputs
make -C vendor/velero info/github
echo
echo outputs set
# Build for alpine linux
# Kept separate because it is old and slightly different than the other package builds
alpine-velero:
needs: matrix-velero
if: github.event_name != 'schedule' && needs.matrix-velero.outputs.apk-enabled != 'false'
runs-on: ubuntu-latest
strategy:
matrix:
# These versions must be strings. E.g. Otherwise `3.10` -> `3.1`
alpine:
# Now that we are just building 1 binary for all distributions, we do not
# need to track which distribution we are building on.
- 'alpine'
env:
APK_KEY_RSA: "${{ secrets.APK_KEY_RSA }}"
APK_PACKAGES_PATH: ${{github.workspace}}/artifacts/${{matrix.alpine}}
PACKAGER: ops@cloudposse.com
PACKAGER_PRIVKEY: /dev/shm/ops@cloudposse.com.rsa
PACKAGER_PUBKEY: ${{github.workspace}}/artifacts/ops@cloudposse.com.rsa.pub

container:
image: cloudposse/packages-apkbuild:${{matrix.alpine}}
credentials:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}

steps:
# Checkout the packages repo so we can build the packages as a monorepo
- name: "Checkout source code at current commit"
uses: actions/checkout@v4

# Export the apk keys as files from secrets
- name: "Export keys"
run: "make -C .github/ export"

# Build the alpine packages for the matrix version of alpine
- name: "Build alpine packages"
run: "make -C vendor/${{github.workflow}} apk"

# Verify the packages were built or error
- name: "List packages"
run: 'find ${APK_PACKAGES_PATH} -type f -name \*.apk | xargs --no-run-if-empty ls -l | grep .'

# Export the artifact filename including path
# Path must be relative to workdir for Cloudsmith action to be able to find it
- name: "Set output path to artifact"
id: artifact
shell: bash
run: |
artifact=$(find artifacts/${{matrix.alpine}} -type f -name \*.apk)
echo "path=$artifact" | tee -a $GITHUB_OUTPUT
echo creating '"pip"' cache directory for Cloudsmith
mkdir -p $HOME/.cache/pip && chmod -R 777 $HOME/.cache || echo Ignoring error creating '"pip"' cache directory
# Determine which package organization we should use (e.g. dev or prod)
- name: "Determine package repo"
shell: bash
id: repo
run: |
if [[ ${GITHUB_REF} == 'refs/heads/master' ]]; then
echo "org=${{github.repository_owner}}" | tee -a $GITHUB_OUTPUT
else
echo "org=${{github.repository_owner}}-dev" | tee -a $GITHUB_OUTPUT
fi
env:
GITHUB_REF: ${{ github.ref }}

# Publish the artifacts
- name: "Push artifact to package repository"
uses: cloudsmith-io/action@v0.5.4
with:
api-key: ${{ secrets.CLOUDSMITH_API_KEY }}
command: 'push'
format: 'alpine'
owner: '${{steps.repo.outputs.org}}' # Your Cloudsmith account name or org name (namespace)
repo: 'packages' # Your Cloudsmith Repository name (slug)
distro: 'alpine' # Your Distribution (i.e debian, ubuntu, alpine)
release: 'any-version' # Use "any-version" if your package is compatible with more than one version of alpine linux
republish: 'true' # Needed if version is not changing
file: '${{steps.artifact.outputs.path}}' # Package filename (including path)
no-wait-for-sync: 'true' # Skip the waiting for package synchronisation (i.e. upload only)

# Build packages with fpm package manager
package-velero:
needs: matrix-velero
# Should not be needed, but without these conditions, this job would fail with an error if the matrix is []
# and would run with package-type empty if matrix is ["apk"]
if: >
github.event_name != 'schedule' && needs.matrix-velero.outputs.package-enabled != 'false'
&& needs.matrix-velero.outputs.package-matrix != '[]' && needs.matrix-velero.outputs.package-matrix != '["apk"]'
strategy:
matrix:
package-type: ${{ fromJSON(needs.matrix-velero.outputs.package-matrix) }}
arch: ${{ fromJSON(needs.matrix-velero.outputs.arch-matrix) }}
exclude:
- package-type: 'apk'
include:
# Default value for runs-on. Original matrix values will not be overridden, but added ones (like runs-on) can be.
# See https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs#expanding-or-adding-matrix-configurations
- runs-on: "self-hosted-arm64-large"
# By including `arch: amd64` here, we override the `runs-on` value when the matrix `arch` is `amd64`.
# This also forces the matrix to include `arch: amd64` even if it is not in the original matrix.
# This is why we do not default for amd64 and then override for arm64. (Because it would force arm64 to be included, and some tools are not available for arm64.)
- arch: amd64
runs-on: "ubuntu-latest"
runs-on: ${{ matrix.runs-on }}
env:
# We are in a bit of a bind here because of how GitHub actions work as of 2020-11-19
# Although the "workspace" is mounted to the container, it is not mounted
# at `/github/workspace` or ${{github.workspace}}, although through some
# mechanism, an environment variable whose value starts with ${{github.workspace}}
# will have ${{github.workspace}} replaced with the correct mount point.
#
# We need an absolute path for the package build system, since every build happens
# in a different directory, but because the mount point changes, we also
# need a path relative to the initial working directory to communicate between
# the package building container and the cloudsmith action.
PACKAGES_PATH: ${{github.workspace}}/artifacts/${{matrix.package-type}}/any-version
PACKAGE_RELPATH: artifacts/${{matrix.package-type}}/any-version

# Unfortunately, there is no reasonable way to configure the docker image tag based on the package-type
container:
image: cloudposse/packages-${{matrix.package-type}}build:latest
credentials:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}

steps:
# Checkout the packages repo so we can build the packages as a monorepo
- name: "Checkout source code at current commit"
uses: actions/checkout@v4

# Build the packages for the matrix version
- name: "Build ${{matrix.package-type}} packages"
shell: bash
run: |
echo Current directory is $(pwd)
[[ $PACKAGES_PATH =~ ^$(pwd) ]] || { echo Package dir \"$PACKAGES_PATH\" not beneath workdir \"$(pwd)\" >&2; exit 1; }
make -C vendor/${{github.workflow}} ${{matrix.package-type}}
# Export the artifact filename including path
- name: "Set output path to artifact"
id: artifact
shell: bash
run: |
[[ -n $PACKAGE_RELPATH ]] || { echo Error: PACKAGE_RELPATH is not set >&2; exit 1; }
packages=($(find ${PACKAGE_RELPATH} -type f -name \*.${{matrix.package-type}}))
echo List packages found:
printf "%s\n" "${packages[@]}" | xargs --no-run-if-empty ls -l
echo Error if not exactly 1 package found
(( ${#packages[@]} == 1 )) || { echo "Error: other than 1 package found (${#packages[@]})" >&2; exit 1; }
echo "setting output"
echo "path=$packages" | tee -a $GITHUB_OUTPUT
echo creating '"pip"' cache directory for Cloudsmith
mkdir -p $HOME/.cache/pip && chmod -R 777 $HOME/.cache || echo Ignoring error creating '"pip"' cache directory
# Determine which package organization we should use (e.g. dev or prod)
- name: "Determine package repo"
shell: bash
id: repo
run: |
if [[ ${GITHUB_REF} == 'refs/heads/master' ]]; then
echo "org=${{github.repository_owner}}" | tee -a $GITHUB_OUTPUT
else
echo "org=${{github.repository_owner}}-dev" | tee -a $GITHUB_OUTPUT
fi
env:
GITHUB_REF: ${{ github.ref }}

# Publish the artifacts
- name: "Push artifact to package repository"
uses: cloudsmith-io/action@v0.5.4
with:
api-key: ${{ secrets.CLOUDSMITH_API_KEY }}
command: 'push'
format: '${{matrix.package-type}}'
owner: '${{steps.repo.outputs.org}}' # Your Cloudsmith account name or org name (namespace)
repo: 'packages' # Your Cloudsmith Repository name (slug)
distro: 'any-distro' # Use "any-distro" since our package is compatible with more than more distribution
release: 'any-version' # Use "any-version" since our package is compatible with more than more version
republish: 'true' # Needed if version is not changing
file: '${{steps.artifact.outputs.path}}' # Package filename (including path)
no-wait-for-sync: 'true' # Skip the waiting for package synchronisation (i.e. upload only)
6 changes: 3 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ docs/badges.md: docs/deps

## Build alpine packages for testing
docker/build/apk:
docker build -t cloudposse/apkbuild:$(ALPINE_VERSION) -f apk/Dockerfile-$(ALPINE_VERSION) .
docker build --load --platform=linux/amd64 -t cloudposse/apkbuild:$(ALPINE_VERSION) -f apk/Dockerfile-$(ALPINE_VERSION) .
docker run \
--name apkbuild \
--rm \
Expand All @@ -67,7 +67,7 @@ docker/build/apk:
sh -c "make -C /packages/vendor build"

docker/build/apk/all:
docker build -t cloudposse/apkbuild:$(ALPINE_VERSION) -f apk/Dockerfile-$(ALPINE_VERSION) .
docker build --load --platform=linux/amd64 -t cloudposse/apkbuild:$(ALPINE_VERSION) -f apk/Dockerfile-$(ALPINE_VERSION) .
docker run \
--name apkbuild \
--rm \
Expand All @@ -79,7 +79,7 @@ docker/build/apk/all:
docker/build/apk/shell run/apk:
rm -rf tmp/*
[ -n "$(ls tmp/)" ] && sudo rm -rf tmp/* || true
docker build -t cloudposse/apkbuild:$(ALPINE_VERSION) -f apk/Dockerfile-$(ALPINE_VERSION) .
docker build --load --platform=linux/amd64 -t cloudposse/apkbuild:$(ALPINE_VERSION) -f apk/Dockerfile-$(ALPINE_VERSION) .
docker run \
--name apkbuild \
--rm \
Expand Down
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -476,7 +476,7 @@ terraform-0.13 \[frozen\] | 0.13.7 | Terraform is a tool for building, chang
[![terraform-0.14](https://github.com/cloudposse/packages/actions/workflows/terraform-0.14.yml/badge.svg?branch=master)](https://github.com/cloudposse/packages/actions?query=workflow%3Aterraform-0.14) | 0.14.11 | Terraform is a tool for building, changing, and combining infrastructure safely and efficiently.
[![terraform-0.15](https://github.com/cloudposse/packages/actions/workflows/terraform-0.15.yml/badge.svg?branch=master)](https://github.com/cloudposse/packages/actions?query=workflow%3Aterraform-0.15) | 0.15.5 | Terraform is a tool for building, changing, and combining infrastructure safely and efficiently.
[![terraform-1](https://github.com/cloudposse/packages/actions/workflows/terraform-1.yml/badge.svg?branch=master)](https://github.com/cloudposse/packages/actions?query=workflow%3Aterraform-1) | 1.7.1 | Terraform enables you to safely and predictably create, change, and improve infrastructure.
[![terraform-config-inspect](https://github.com/cloudposse/packages/actions/workflows/terraform-config-inspect.yml/badge.svg?branch=master)](https://github.com/cloudposse/packages/actions?query=workflow%3Aterraform-config-inspect) | [0.0.20231…](## "0.0.20231204233900+gita34142ec2a72") | A helper library for shallow inspection of Terraform configurations
[![terraform-config-inspect](https://github.com/cloudposse/packages/actions/workflows/terraform-config-inspect.yml/badge.svg?branch=master)](https://github.com/cloudposse/packages/actions?query=workflow%3Aterraform-config-inspect) | <details><summary>show</summary>0.0.20231204233900+gita34142ec2a72</details> | A helper library for shallow inspection of Terraform configurations
[![terraform-docs](https://github.com/cloudposse/packages/actions/workflows/terraform-docs.yml/badge.svg?branch=master)](https://github.com/cloudposse/packages/actions?query=workflow%3Aterraform-docs) | 0.17.0 | Generate docs from terraform modules
[![terraform-module-versions](https://github.com/cloudposse/packages/actions/workflows/terraform-module-versions.yml/badge.svg?branch=master)](https://github.com/cloudposse/packages/actions?query=workflow%3Aterraform-module-versions) | 3.1.13 | CLI tool that checks Terraform code for module updates. Single binary, no dependencies. linux, osx, windows.
terraform_0.11 \[frozen\] | 0.11.15 | Terraform (Deprecated package. Use terraform-0.11 instead)
Expand All @@ -492,7 +492,8 @@ terraform_0.13 \[frozen\] | 0.13.7 | Terraform (Deprecated package. Use terr
[![variant](https://github.com/cloudposse/packages/actions/workflows/variant.yml/badge.svg?branch=master)](https://github.com/cloudposse/packages/actions?query=workflow%3Avariant) | 0.38.0 | Variant is a Universal CLI tool that works like a task runner
[![variant2](https://github.com/cloudposse/packages/actions/workflows/variant2.yml/badge.svg?branch=master)](https://github.com/cloudposse/packages/actions?query=workflow%3Avariant2) | 0.38.0 | Second major version of Variant, a Universal CLI tool that works like a task runner
[![vault](https://github.com/cloudposse/packages/actions/workflows/vault.yml/badge.svg?branch=master)](https://github.com/cloudposse/packages/actions?query=workflow%3Avault) | 1.15.4 | Hashicorp vault
[![vendir](https://github.com/cloudposse/packages/actions/workflows/vendir.yml/badge.svg?branch=master)](https://github.com/cloudposse/packages/actions?query=workflow%3Avendir) | 0.39.0 | Easy way to vendor portions of git repos, github releases, helm charts, docker image contents, etc. declaratively.
[![velero](https://github.com/cloudposse/packages/actions/workflows/velero.yml/badge.svg?branch=master)](https://github.com/cloudposse/packages/actions?query=workflow%3Avelero) | 1.12.3 | Backup and migrate Kubernetes applications and their persistent volumes
[![vendir](https://github.com/cloudposse/packages/actions/workflows/vendir.yml/badge.svg?branch=master)](https://github.com/cloudposse/packages/actions?query=workflow%3Avendir) | 0.39.0 | Easy way to vendor portions of git repos, github releases, helm charts, docker image contents, etc. declaratively.
[![venona](https://github.com/cloudposse/packages/actions/workflows/venona.yml/badge.svg?branch=master)](https://github.com/cloudposse/packages/actions?query=workflow%3Avenona)* | 1.10.4 | Codefresh runtime-environment agent
[![vert](https://github.com/cloudposse/packages/actions/workflows/vert.yml/badge.svg?branch=master)](https://github.com/cloudposse/packages/actions?query=workflow%3Avert) | 0.1.0 | Simple CLI for comparing two or more versions
[![yajsv](https://github.com/cloudposse/packages/actions/workflows/yajsv.yml/badge.svg?branch=master)](https://github.com/cloudposse/packages/actions?query=workflow%3Ayajsv)* | 1.4.1 | Yet Another JSON Schema Validator [CLI]
Expand Down
Loading

0 comments on commit eb4a381

Please sign in to comment.