Skip to content

Test PR and Upload to Docker Hub #23

Test PR and Upload to Docker Hub

Test PR and Upload to Docker Hub #23

Workflow file for this run

name: Test PR and Upload to Docker Hub
on:
workflow_run:
workflows: ["Build Pull Request"]
types:
- completed
env:
PUID: '1000'
PGID: '1000'
PHP_TZ: 'UTC'
jobs:
upload:
runs-on: ubuntu-latest
if: >
github.event.workflow_run.event == 'pull_request' &&
github.event.workflow_run.conclusion == 'success'
outputs:
PR_NO: ${{ steps.get_pull.outputs.PR_NO }}
check_id: ${{ fromJson(steps.create_check.outputs.result).data.id }}
permissions:
actions: read
checks: write
contents: read
pull-requests: write
steps:
-
name: 'Download artifact'
uses: actions/[email protected]
with:
script: |
var artifacts = await github.actions.listWorkflowRunArtifacts({
owner: context.repo.owner,
repo: context.repo.repo,
run_id: ${{ github.event.workflow_run.id }},
});
var matchArtifact = artifacts.data.artifacts.filter((artifact) => {
return artifact.name == "artifact"
})[0];
var download = await github.actions.downloadArtifact({
owner: context.repo.owner,
repo: context.repo.repo,
artifact_id: matchArtifact.id,
archive_format: 'zip',
});
var fs = require('fs');
fs.writeFileSync('${{github.workspace}}/artifact.zip', Buffer.from(download.data));
-
name: "Unzip"
run: unzip artifact.zip && sha256sum lychee.tar
-
name: "Get Pull Request number and SHA"
id: get_pull
run: |
cat pr && echo "PR_NO=`cat pr`" >> $GITHUB_OUTPUT
cat sha && echo "PR_SHA=`cat sha`" >> $GITHUB_OUTPUT
-
name: "Create check"
id: create_check
uses: actions/github-script@v6
env:
parameter_url: '${{ github.event.workflow_run.html_url }}'
with:
script: |
return await github.rest.checks.create({
owner: context.repo.owner,
repo: context.repo.repo,
head_sha: "${{ steps.get_pull.outputs.PR_SHA }}",
name: "Test Image",
status: "in_progress",
details_url: process.env.parameter_url,
});
-
name: debug
run: echo '${{ steps.create_check.outputs.result }}'
-
name: "Import image"
run: docker image load -i ./lychee.tar
-
name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Push
run: docker image push lycheeorg/lychee:testing-${{ github.event.workflow_run.id }}
default-env:
needs: upload
runs-on: ubuntu-latest
services:
lychee-docker:
image: lycheeorg/lychee:testing-${{ github.event.workflow_run.id }}
ports:
- 80:80
steps:
-
name: GET
run: 'curl -sSw "%{stderr}%{http_code}" http://localhost/ > /dev/null && curl -f http://localhost/'
sqlite:
needs: upload
runs-on: ubuntu-latest
services:
lychee-docker:
image: lycheeorg/lychee:testing-${{ github.event.workflow_run.id }}
ports:
- 80:80
env:
DB_CONNECTION: sqlite
steps:
-
name: GET
run: 'curl -sSw "%{stderr}%{http_code}" http://localhost/ > /dev/null && curl -f http://localhost/'
sqlite2:
needs: upload
runs-on: ubuntu-latest
services:
lychee-docker:
image: lycheeorg/lychee:testing-${{ github.event.workflow_run.id }}
ports:
- 80:80
env:
DB_CONNECTION: sqlite
DB_DATABASE: '/var/www/html/Lychee/nonexistent'
steps:
-
name: GET
run: 'curl -sSw "%{stderr}%{http_code}" http://localhost/ > /dev/null && curl -f http://localhost/'
mysql:
needs: upload
runs-on: ubuntu-latest
services:
lychee-docker:
image: lycheeorg/lychee:testing-${{ github.event.workflow_run.id }}
ports:
- 80:80
db:
image: mariadb:latest
env:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: lychee
env:
DB_CONNECTION: mysql
DB_HOST: db
DB_PORT: '3306'
DB_DATABASE: lychee
DB_USERNAME: root
DB_PASSWORD: password
steps:
-
name: GET
run: 'curl -sSw "%{stderr}%{http_code}" http://localhost/ > /dev/null && curl -f http://localhost/'
postgres:
needs: upload
runs-on: ubuntu-latest
services:
lychee-docker:
image: lycheeorg/lychee:testing-${{ github.event.workflow_run.id }}
ports:
- 80:80
db:
image: postgres:latest
env:
POSTGRES_PASSWORD: password
POSTGRES_DB: lychee
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
env:
DB_CONNECTION: pgsql
DB_HOST: db
DB_PORT: '5432'
DB_DATABASE: lychee
DB_USERNAME: postgres
DB_PASSWORD: password
steps:
-
name: GET
run: 'curl -sSw "%{stderr}%{http_code}" http://localhost/ > /dev/null && curl -f http://localhost/'
docker-compose:
needs: upload
runs-on: ubuntu-latest
services:
lychee-docker:
image: lycheeorg/lychee:testing-${{ github.event.workflow_run.id }}
ports:
- 80:80
steps:
-
name: Checkout
uses: actions/checkout@v3
-
name: Set Password
run: "sed -i 's/<.*_PASSWORD>/password/g' docker-compose.yml"
-
name: Set Image
run: "sed -i 's|image: lycheeorg/lychee|image: lycheeorg/lychee:testing-${{ github.event.workflow_run.id }}|' docker-compose.yml"
-
name: Install docker-compose
run: "sudo apt install docker-compose"
-
name: Run docker-compose
run: 'docker-compose up -d && sleep 45 && docker-compose ps && curl -sSw "%{stderr}%{http_code}" http://localhost:90/ > /dev/null && curl -f http://localhost:90/'
retag:
needs: [upload, default-env, sqlite, sqlite2, mysql, postgres, docker-compose]
runs-on: ubuntu-latest
container:
image: gcr.io/go-containerregistry/crane:debug
steps:
-
name: Retag image
env:
PR_NO: ${{ needs.upload.outputs.PR_NO }}
run: |
crane auth login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_TOKEN }} index.docker.io
crane tag lycheeorg/lychee:testing-${{ github.event.workflow_run.id }} testing-pull$PR_NO
update_check:
if: github.event.workflow_run.conclusion == 'success'
needs: [upload,retag]
runs-on: ubuntu-latest
permissions:
actions: read
checks: write
contents: read
pull-requests: write
steps:
-
name: "Update check"
uses: actions/github-script@v6
with:
script: |
await github.rest.checks.update({
owner: context.repo.owner,
repo: context.repo.repo,
check_run_id: ${{ needs.upload.outputs.check_id }},
name: "Test Image",
status: "completed",
conclusion: "${{ needs.retag.result }}",
});