Skip to content

Containers

Containers #848

Workflow file for this run

name: Containers
on:
workflow_dispatch:
inputs:
inpcont:
description: 'Build containers'
required: true
type: choice
options:
- 'yes'
- 'no'
default: 'yes'
inpwhichcont:
description: 'Which containers to build, defaults to "all".'
required: false
default: 'all'
type: string
inpmani:
description: 'Update manifest'
required: true
type: choice
options:
- 'yes'
- 'no'
default: 'yes'
inpweb:
description: 'Update website'
required: true
type: choice
options:
- 'yes'
- 'no'
default: 'yes'
schedule:
- cron: '55 5 * * *'
jobs:
# ------------------------------------------------------------------------
setup-matrix:
if: ${{ github.event.inputs.inpcont == '' || github.event.inputs.inpcont == 'yes' }}
runs-on: ubuntu-latest
outputs:
config: ${{ steps.setup-matrix.outputs.config }}
steps:
- uses: actions/checkout@v4
- name: Set up matrix of containers
id: setup-matrix
run: |
config=$(python tests/get-containers.py ${{ github.event.inputs.inpwhichcont }})
echo "config=$config" >> $GITHUB_OUTPUT
# ------------------------------------------------------------------------
containers:
if: ${{ github.event.inputs.inpcont == '' || github.event.inputs.inpcont == 'yes' }}
needs: setup-matrix
strategy:
fail-fast: false
matrix:
config: ${{ fromJson(needs.setup-matrix.outputs.config) }}
runs-on: ubuntu-latest
name: ${{ matrix.config.container }}
steps:
# needed for bigger Docker images, if there isn't enough space, then
# they build, but are not exported to Docker
- name: "Clean up"
run: |
sudo rm -rf /usr/share/dotnet /opt/ghc /usr/local/.ghcup \
/usr/local/share/boost \
$AGENT_TOOLSDIRECTORY $CONDA $VCPKG_INSTALLATION_ROOT \
$JAVA_HOME_8_X64 $JAVA_HOME_11_X64 $JAVA_HOME_17_X64 $JAVA_HOME_21_X64 \
$CHROMEWEBDRIVER $EDGEWEBDRIVER $GECKOWEBDRIVER $SELENIUM_JAR_PATH \
$ANDROID_HOME
sudo apt-get remove -y '^aspnetcore-.*' || echo "::warning::The command [sudo apt-get remove -y '^aspnetcore-.*'] failed to complete successfully. Proceeding..."
sudo apt-get remove -y '^dotnet-.*' --fix-missing || echo "::warning::The command [sudo apt-get remove -y '^dotnet-.*' --fix-missing] failed to complete successfully. Proceeding..."
sudo apt-get remove -y '^llvm-.*' --fix-missing || echo "::warning::The command [sudo apt-get remove -y '^llvm-.*' --fix-missing] failed to complete successfully. Proceeding..."
sudo apt-get remove -y 'php.*' --fix-missing || echo "::warning::The command [sudo apt-get remove -y 'php.*' --fix-missing] failed to complete successfully. Proceeding..."
sudo apt-get remove -y '^mongodb-.*' --fix-missing || echo "::warning::The command [sudo apt-get remove -y '^mongodb-.*' --fix-missing] failed to complete successfully. Proceeding..."
sudo apt-get remove -y '^mysql-.*' --fix-missing || echo "::warning::The command [sudo apt-get remove -y '^mysql-.*' --fix-missing] failed to complete successfully. Proceeding..."
sudo apt-get remove -y azure-cli google-chrome-stable firefox powershell mono-devel libgl1-mesa-dri --fix-missing || echo "::warning::The command [sudo apt-get remove -y azure-cli google-chrome-stable firefox powershell mono-devel libgl1-mesa-dri --fix-missing] failed to complete successfully. Proceeding..."
sudo apt-get remove -y google-cloud-sdk --fix-missing || echo "::debug::The command [sudo apt-get remove -y google-cloud-sdk --fix-missing] failed to complete successfully. Proceeding..."
sudo apt-get remove -y google-cloud-cli --fix-missing || echo "::debug::The command [sudo apt-get remove -y google-cloud-cli --fix-missing] failed to complete successfully. Proceeding..."
sudo apt-get autoremove -y || echo "::warning::The command [sudo apt-get autoremove -y] failed to complete successfully. Proceeding..."
sudo apt-get clean || echo "::warning::The command [sudo apt-get clean] failed to complete successfully. Proceeding..."
df -h /
docker buildx du
- uses: actions/checkout@v4
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_TOKEN }}
- name: Install Qemu
uses: docker/setup-qemu-action@v3
with:
image: tonistiigi/binfmt:qemu-v8.1.5
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build
uses: docker/build-push-action@v5
with:
platforms: ${{ matrix.config.testplatform || 'linux/amd64' }}
secret-envs: |
REDHAT_ORG_RHEL7=REDHAT_ORG_RHEL7
REDHAT_ORG_RHEL8=REDHAT_ORG_RHEL8
REDHAT_ORG_RHEL9=REDHAT_ORG_RHEL9
REDHAT_ACTIVATION_KEY_RHEL7=REDHAT_ACTIVATION_KEY_RHEL7
REDHAT_ACTIVATION_KEY_RHEL8=REDHAT_ACTIVATION_KEY_RHEL8
REDHAT_ACTIVATION_KEY_RHEL9=REDHAT_ACTIVATION_KEY_RHEL9
provenance: false
context: containers/${{ matrix.config.container }}
load: true
tags: |
rhub/test:test
env:
REDHAT_ORG_RHEL7: ${{ secrets.REDHAT_ORG }}
REDHAT_ORG_RHEL8: ${{ secrets.REDHAT_ORG }}
REDHAT_ORG_RHEL9: ${{ secrets.REDHAT_ORG }}
REDHAT_ACTIVATION_KEY_RHEL7: ${{ secrets.REDHAT_ACTIVATION_KEY_RHEL7 }}
REDHAT_ACTIVATION_KEY_RHEL8: ${{ secrets.REDHAT_ACTIVATION_KEY_RHEL8 }}
REDHAT_ACTIVATION_KEY_RHEL9: ${{ secrets.REDHAT_ACTIVATION_KEY_RHEL9 }}
- name: Test
run: |
docker run rhub/test:test R --version
docker run rhub/test:test sh -c '$(R CMD config CC) --version'
docker run rhub/test:test sh -c '$(R CMD config CXX) --version'
docker run rhub/test:test sh -c '$(R CMD config FC) --version'
- name: Push
uses: docker/build-push-action@v5
with:
platforms: ${{ matrix.config.platform || 'linux/amd64' }}
secret-envs: |
REDHAT_ORG_RHEL7=REDHAT_ORG_RHEL7
REDHAT_ORG_RHEL8=REDHAT_ORG_RHEL8
REDHAT_ORG_RHEL9=REDHAT_ORG_RHEL9
REDHAT_ACTIVATION_KEY_RHEL7=REDHAT_ACTIVATION_KEY_RHEL7
REDHAT_ACTIVATION_KEY_RHEL8=REDHAT_ACTIVATION_KEY_RHEL8
REDHAT_ACTIVATION_KEY_RHEL9=REDHAT_ACTIVATION_KEY_RHEL9
provenance: false
context: containers/${{ matrix.config.container }}
push: true
outputs:
tags: |
rhub/${{ matrix.config.container }}:latest
ghcr.io/r-hub/containers/${{ matrix.config.container }}:latest
env:
REDHAT_ORG_RHEL7: ${{ secrets.REDHAT_ORG }}
REDHAT_ORG_RHEL8: ${{ secrets.REDHAT_ORG }}
REDHAT_ORG_RHEL9: ${{ secrets.REDHAT_ORG }}
REDHAT_ACTIVATION_KEY_RHEL7: ${{ secrets.REDHAT_ACTIVATION_KEY_RHEL7 }}
REDHAT_ACTIVATION_KEY_RHEL8: ${{ secrets.REDHAT_ACTIVATION_KEY_RHEL8 }}
REDHAT_ACTIVATION_KEY_RHEL9: ${{ secrets.REDHAT_ACTIVATION_KEY_RHEL9 }}
# ------------------------------------------------------------------------
website:
if: ${{ (github.event.inputs.inpweb == '' || github.event.inputs.inpweb == 'yes') && !cancelled() }}
runs-on: ubuntu-latest
needs: containers
name: Update website
# Rule out parallel updates.
concurrency:
group: website
steps:
- uses: actions/checkout@v4
- name: Install Qemu
uses: docker/setup-qemu-action@v3
with:
image: tonistiigi/binfmt:qemu-v8.1.5
- name: Install quarto
uses: quarto-dev/quarto-actions/setup@v2
- name: Install R
uses: r-lib/actions/setup-r@v2
with:
use-public-rspm: true
- name: Install R packages
uses: r-lib/actions/setup-r-dependencies@v2
with:
extra-packages: any::pkgload
working-directory: website
- name: Build manifest
run: cd website && Rscript update-manifest.R
env:
UPDATE_MANIFEST: ${{ github.event.inputs.inpmani }}
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
- uses: quarto-dev/quarto-actions/publish@v2
with:
path: website
target: gh-pages
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}