Reduce the number of calls to the GitHub API #323
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build, test, and release client packages | |
on: | |
push: | |
branches: | |
- main | |
tags: | |
- 'v*' | |
pull_request: | |
branches: | |
- main | |
# Declare default permissions as read only. | |
permissions: read-all | |
jobs: | |
build-linux-packages: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 | |
- name: Get the version number for the packages | |
id: get_version | |
# If this is a tag, use the tag name (e.g. v1.2.3) without v as version number. | |
# Otherwise, just use 0.0. | |
run: | | |
VERSION=0.0 | |
REF_NAME=${{ github.ref }} | |
[[ $REF_NAME == refs/tags/v* ]] && VERSION=${REF_NAME/refs\/tags\/v/} | |
echo ::set-output name=version::${VERSION} | |
- name: Prepare package source by running the corresponding playbook locally | |
run: | | |
echo "localhost ansible_connection=local" > inventory/hosts | |
ansible-playbook ./prepare-client-packages.yml | |
# We probably should loop over the set {rpm,deb,osxpkg} to create packages, but | |
# it will make debugging more annoying. | |
- name: Build RPM package | |
uses: bpicode/github-action-fpm@e76c0e2166030f4691d641a700b16958c7d12f5d # v0.9.2 | |
with: | |
fpm_args: "etc" | |
fpm_opts: "--debug -n cvmfs-config-eessi -v ${{ steps.get_version.outputs.version }} -t rpm -a all -s dir -C ./package --description 'CVMFS configuration package for EESSI.'" | |
- name: Build Deb package | |
uses: bpicode/github-action-fpm@e76c0e2166030f4691d641a700b16958c7d12f5d # v0.9.2 | |
with: | |
fpm_args: "etc" | |
fpm_opts: "--debug -n cvmfs-config-eessi -v ${{ steps.get_version.outputs.version }} -t deb -a all -s dir -C ./package --description 'CVMFS configuration package for EESSI.'" | |
- name: Build tar package | |
uses: bpicode/github-action-fpm@e76c0e2166030f4691d641a700b16958c7d12f5d # v0.9.2 | |
with: | |
fpm_args: "etc" | |
fpm_opts: "--debug -n cvmfs-config-eessi-${{ steps.get_version.outputs.version }} -t tar -a all -s dir -C ./package --description 'CVMFS configuration package for EESSI.'" | |
- name: Upload packages as build artifacts | |
uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # v3.1.0 | |
with: | |
name: linux_packages | |
path: cvmfs-config-eessi* | |
# build-macos-package: | |
# runs-on: macos-latest | |
# steps: | |
# - name: Checkout | |
# uses: actions/checkout@v2 | |
# | |
# - name: Get the version number for the packages | |
# id: get_version | |
# # If this is a tag, use the tag name (e.g. v1.2.3) without v as version number. | |
# # Otherwise, just use 0.0. | |
# run: | | |
# VERSION=0.0 | |
# REF_NAME=${{ github.ref }} | |
# [[ $REF_NAME == refs/tags/v* ]] && VERSION=${REF_NAME/refs\/tags\/v/} | |
# echo ::set-output name=version::${VERSION} | |
# | |
# # The next step uses a custom Ansible inventory, and due to that it cannot find | |
# # the group_vars folder inside the inventory folder. This symlink fixes that. | |
# - name: Make symlink to group_vars | |
# run: ln -s inventory/group_vars | |
# | |
# - name: Install Ansible | |
# run: pip3 install ansible | |
# | |
# - name: Prepare package source | |
# run: ansible-playbook --connection=local ./prepare-client-packages.yml | |
# | |
# - name: Install dependencies | |
# run: brew install gnu-tar | |
# | |
# - name: Install fpm | |
# run: gem install --no-document fpm | |
# | |
# - name: Build package | |
# run: "fpm --debug -n cvmfs-config-eessi -v ${{ steps.get_version.outputs.version }} -t osxpkg -a all -s dir -C ./package --description 'CVMFS configuration package for EESSI.' etc" | |
# | |
# - name: Find filename of generated package | |
# id: find_filename | |
# shell: bash | |
# run: | | |
# pkgfile="$(ls -1 cvmfs-config-eessi*.pkg)" | |
# echo ::set-output name=pkgfile::${pkgfile} | |
# | |
# - name: Upload macOS package as artifact | |
# uses: actions/upload-artifact@v2 | |
# with: | |
# name: macos_package | |
# path: ${{ steps.find_filename.outputs.pkgfile }} | |
test-deb-package: | |
needs: build-linux-packages | |
runs-on: ubuntu-latest | |
steps: | |
- name: Install CVMFS dependencies | |
run: sudo apt-get install lsb-release | |
- name: Download and install CVMFS client | |
run: wget https://ecsft.cern.ch/dist/cvmfs/cvmfs-release/cvmfs-release-latest_all.deb && sudo dpkg -i cvmfs-release-latest_all.deb | |
- name: Install CVMFS client | |
run: sudo apt-get update && sudo apt-get install cvmfs | |
- name: Download cvmfs-config-eessi package | |
uses: actions/download-artifact@9782bd6a9848b53b110e712e20e42d89988822b7 # v3.0.1 | |
with: | |
name: linux_packages | |
- name: Find filename of package | |
id: find_filename | |
shell: bash | |
run: | | |
debfile="$(find . -name cvmfs-config-eessi*.deb)" | |
echo ::set-output name=debfile::${debfile} | |
- name: Install package | |
run: sudo dpkg -i ./${{ steps.find_filename.outputs.debfile }} | |
- name: Add local CVMFS configuration (/etc/cvmfs/default.local) | |
run: echo "CVMFS_CLIENT_PROFILE=single" | sudo tee /etc/cvmfs/default.local | |
- name: Mount the repositories | |
run: sudo cvmfs_config setup | |
- name: Test repository access | |
run: ls /cvmfs/pilot.eessi-hpc.org/ | |
test-rpm-package: | |
needs: build-linux-packages | |
runs-on: ubuntu-latest | |
container: | |
image: centos:centos7 | |
options: --device /dev/fuse --privileged | |
steps: | |
- name: Download and install CVMFS client | |
run: yum install -y https://ecsft.cern.ch/dist/cvmfs/cvmfs-release/cvmfs-release-latest.noarch.rpm | |
- name: Install CVMFS client | |
run: yum install -y cvmfs | |
- name: Download cvmfs-config-eessi package | |
uses: actions/download-artifact@9782bd6a9848b53b110e712e20e42d89988822b7 # v3.0.1 | |
with: | |
name: linux_packages | |
- name: Find filename of package | |
id: find_filename | |
shell: bash | |
run: | | |
rpmfile="$(find . -name cvmfs-config-eessi*.rpm)" | |
echo ::set-output name=rpmfile::${rpmfile} | |
- name: Install package | |
run: rpm -i ./${{ steps.find_filename.outputs.rpmfile }} | |
- name: Add local CVMFS configuration (/etc/cvmfs/default.local) | |
run: echo "CVMFS_CLIENT_PROFILE=single" | tee /etc/cvmfs/default.local | |
- name: Mount the repositories | |
#run: cvmfs_config setup | |
run: mkdir -p /cvmfs/pilot.eessi-hpc.org && mount -t cvmfs pilot.eessi-hpc.org /cvmfs/pilot.eessi-hpc.org | |
- name: Test repository access | |
run: ls /cvmfs/pilot.eessi-hpc.org/ | |
test-tar-package: | |
needs: build-linux-packages | |
runs-on: ubuntu-latest | |
steps: | |
- name: Install CVMFS dependencies | |
run: sudo apt-get install lsb-release | |
- name: Download and install CVMFS client | |
run: wget https://ecsft.cern.ch/dist/cvmfs/cvmfs-release/cvmfs-release-latest_all.deb && sudo dpkg -i cvmfs-release-latest_all.deb | |
- name: Install CVMFS client | |
run: sudo apt-get update && sudo apt-get install cvmfs | |
- name: Download cvmfs-config-eessi package | |
uses: actions/download-artifact@9782bd6a9848b53b110e712e20e42d89988822b7 # v3.0.1 | |
with: | |
name: linux_packages | |
- name: Find filename of package | |
id: find_filename | |
shell: bash | |
run: | | |
tarfile="$(find . -name cvmfs-config-eessi*.tar)" | |
echo ::set-output name=tarfile::${tarfile} | |
- name: Install package | |
run: sudo tar -C / -xf ./${{ steps.find_filename.outputs.tarfile }} | |
- name: Add local CVMFS configuration (/etc/cvmfs/default.local) | |
run: echo "CVMFS_CLIENT_PROFILE=single" | sudo tee /etc/cvmfs/default.local | |
- name: Mount the repositories | |
run: sudo cvmfs_config setup | |
- name: Test repository access | |
run: ls /cvmfs/pilot.eessi-hpc.org/ | |
# test-macos-package: | |
# needs: build-macos-package | |
# runs-on: macos-10.15 | |
# steps: | |
# - name: Install OSXFUSE | |
# run: brew install --cask macfuse | |
# | |
# - name: Download and install CVMFS client | |
# run: wget https://ecsft.cern.ch/dist/cvmfs/cvmfs-release/cvmfs-latest.pkg && sudo installer -target / -pkg cvmfs-latest.pkg | |
# | |
# - name: Download cvmfs-config-eessi package | |
# uses: actions/download-artifact@v2 | |
# with: | |
# name: macos_package | |
# | |
# - name: Find filename of package | |
# id: find_filename | |
# shell: bash | |
# run: | | |
# pkgfile="$(find . -name cvmfs-config-eessi*.pkg)" | |
# echo ::set-output name=pkgfile::${pkgfile} | |
# | |
# - name: Install package | |
# run: sudo installer -target / -pkg ./${{ steps.find_filename.outputs.pkgfile }} | |
# | |
# - name: Add local CVMFS configuration (/etc/cvmfs/default.local) | |
# run: echo "CVMFS_CLIENT_PROFILE=single" | sudo tee /etc/cvmfs/default.local | |
# | |
# - name: Mount the repositories | |
# run: sudo mkdir -p /Users/Shared/cvmfs/pilot.eessi-hpc.org && sudo mount -t cvmfs pilot.eessi-hpc.org /Users/Shared/cvmfs/pilot.eessi-hpc.org | |
# | |
# - name: Test repository access | |
# run: ls /Users/Shared/cvmfs/pilot.eessi-hpc.org/ | |
release: | |
#needs: [build-linux-packages, build-macos-package, test-deb-package, test-rpm-package, test-macos-package, test-tar-package] | |
needs: [build-linux-packages, test-deb-package, test-rpm-package, test-tar-package] | |
if: startsWith(github.ref, 'refs/tags/') | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
steps: | |
- name: Checkout | |
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 | |
- name: Find release version in tag | |
id: find_version | |
run: | | |
echo ::set-output name=version::${GITHUB_REF#refs/tags/} | |
- uses: actions/download-artifact@9782bd6a9848b53b110e712e20e42d89988822b7 # v3.0.1 | |
with: | |
path: ./build_artifacts | |
- name: Find filenames of downloaded packages | |
id: find_filenames | |
shell: bash | |
run: | | |
ls -1 -R . | |
echo ::set-output name=package_filenames::$(find ./build_artifacts -name cvmfs-config-eessi*) | |
- uses: meeDamian/github-release@7ae19492500104f636b3fee4d8103af0fed36c8e # v2.0.3 | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
tag: ${{ steps.find_version.outputs.version }} | |
name: Filesystem Layer ${{ steps.find_version.outputs.version }} | |
body: > | |
Filesystem Layer release ${{ steps.find_version.outputs.version }} | |
files: ${{ steps.find_filenames.outputs.package_filenames }} | |
gzip: false | |
release-latest: | |
needs: [release] # only run when the previous step (the actual release) was successful | |
if: startsWith(github.ref, 'refs/tags/') | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
steps: | |
- name: Checkout | |
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 | |
- uses: actions/download-artifact@9782bd6a9848b53b110e712e20e42d89988822b7 # v3.0.1 | |
with: | |
path: ./build_artifacts | |
- name: Find release version in tag | |
id: find_version | |
run: | | |
echo ::set-output name=version::${GITHUB_REF#refs/tags/} | |
- name: Find filenames of downloaded packages and rename them to latest | |
id: find_filenames | |
shell: bash | |
run: | | |
sudo apt-get install rename | |
rename "s/([0-9]+.[0-9]+.[0-9]+)(-[0-9]+)?/latest/g" $(find ./build_artifacts -name cvmfs-config-eessi*) | |
ls -1 -R ./build_artifacts | |
echo ::set-output name=package_filenames::$(find ./build_artifacts -name cvmfs-config-eessi*latest*) | |
- name: Delete any previous tag/release named "latest" | |
uses: dev-drprasad/delete-tag-and-release@085c6969f18bad0de1b9f3fe6692a3cd01f64fe5 # v0.2.0 | |
with: | |
delete_release: true # default: false | |
tag_name: latest | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- uses: meeDamian/github-release@7ae19492500104f636b3fee4d8103af0fed36c8e # v2.0.3 | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
tag: latest | |
name: Filesystem Layer latest release | |
body: | | |
Filesystem Layer release ${{ steps.find_version.outputs.version }} (see: https://github.com/${{github.repository}}/releases/tag/${{ steps.find_version.outputs.version }}) | |
This `latest` tag is a moving tag that is updated automatically for each release, and provides easy access to the latest `cvmfs-config-eessi` packages. | |
files: ${{ steps.find_filenames.outputs.package_filenames }} | |
gzip: false |