Skip to content

octo Docker image for GitLab #316

octo Docker image for GitLab

octo Docker image for GitLab #316

Workflow file for this run

name: octo Docker image for GitLab
# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the main branch
# push:
# branches: [ main ]
schedule:
- cron: '0 5 * * *'
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
get-octo-cli-version:
runs-on: windows-latest
outputs:
VERSION: ${{ steps.choco.outputs.VERSION }}
CONTINUE: ${{ steps.choco.outputs.CONTINUE }}
steps:
- uses: actions/checkout@v3
- id: choco
name: Compare latest version with container
run: |
$chocoInformationRaw = choco info octopustools --limitoutput
$versionOutput = ($chocoInformationRaw.Split("|"))[1]
[System.Version]$version = $null
$versionParsed = [System.Version]::TryParse($versionOutput, [ref]$version)
if(-not $versionParsed) {
Write-Host "Unable to parse '$versionOutput' as a valid version. Won't continue"
echo "CONTINUE=No" >> $env:GITHUB_OUTPUT
}
else {
$versionToCompare = "$($version.Major).$($version.Minor).$($version.Build)"
Write-Host "Parsed version as $versionToCompare"
echo "VERSION=$versionToCompare" >> $env:GITHUB_OUTPUT
Write-Host "Retrieving tags ..."
$response = try {
$repositoryTags = Invoke-RestMethod "https://registry.hub.docker.com/v2/repositories/octopuslabs/gitlab-octocli/tags"
Write-Host "Retrieval successful!"
} catch [System.Net.WebException] {
$_.Exception.Response
Write-Host "Retrieval failed!!"
}
if ($null -eq $response)
{
$matchingTag = $repositoryTags.results | Where-Object {$_.Name -eq $versionToCompare}
if ($null -ne $matchingTag)
{
Write-Host "Docker container already has latest version."
echo "CONTINUE=No" >> $env:GITHUB_OUTPUT
}
else
{
Write-Host "Octopus CLI has been updated, create new image."
echo "CONTINUE=Yes" >> $env:GITHUB_OUTPUT
}
}
else
{
if ($response.StatusCode.value__ -eq 404)
{
Write-Host "No tags exist for repo, assuming first build."
echo "CONTINUE=Yes" >> $env:GITHUB_OUTPUT
}
}
}
shell: powershell
build-linux:
needs: [get-octo-cli-version]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Docker Hub login
env:
USERNAME: ${{ secrets.DOCKER_HUB_USER }}
PASSWORD: ${{ secrets.DOCKER_HUB_PAT }}
run: docker login --username $USERNAME --password "$PASSWORD"
if: ${{ needs.get-octo-cli-version.outputs.CONTINUE == 'Yes' }}
- name: Build the alpine docker image
env:
VERSION_NUMBER: ${{ needs.get-octo-cli-version.outputs.VERSION }}
run: docker build ./octo/alpine --tag octopuslabs/gitlab-octocli:$VERSION_NUMBER-alpine --tag octopuslabs/gitlab-octocli:latest-alpine
if: ${{ needs.get-octo-cli-version.outputs.CONTINUE == 'Yes' }}
- name: Push the alpine docker image
env:
VERSION_NUMBER: ${{ needs.get-octo-cli-version.outputs.VERSION }}
run: |
docker push octopuslabs/gitlab-octocli:$VERSION_NUMBER-alpine
docker push octopuslabs/gitlab-octocli:latest-alpine
if: ${{ needs.get-octo-cli-version.outputs.CONTINUE == 'Yes' }}
build-docker-manifest:
needs: [build-linux, get-octo-cli-version]
runs-on: ubuntu-latest
steps:
- name: Docker hub login
env:
USERNAME: ${{ secrets.DOCKER_HUB_USER }}
PASSWORD: ${{ secrets.DOCKER_HUB_PAT }}
run: docker login --username $USERNAME --password "$PASSWORD"
if: ${{ needs.get-octo-cli-version.outputs.CONTINUE == 'Yes' }}
- name: Build manifests
env:
VERSION_NUMBER: ${{ needs.get-octo-cli-version.outputs.VERSION }}
run: |
docker manifest create octopuslabs/gitlab-octocli:latest octopuslabs/gitlab-octocli:latest-alpine
docker manifest create octopuslabs/gitlab-octocli:$VERSION_NUMBER octopuslabs/gitlab-octocli:$VERSION_NUMBER-alpine
if: ${{ needs.get-octo-cli-version.outputs.CONTINUE == 'Yes' }}
- name: Push manifests
env:
VERSION_NUMBER: ${{ needs.get-octo-cli-version.outputs.VERSION }}
run: |
docker manifest push octopuslabs/gitlab-octocli:latest
docker manifest push octopuslabs/gitlab-octocli:$VERSION_NUMBER
if: ${{ needs.get-octo-cli-version.outputs.CONTINUE == 'Yes' }}