Build & Publish Parsec Server Docker Image #207
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 & Publish Parsec Server Docker Image | |
# cspell:words buildx | |
on: | |
workflow_dispatch: | |
pull_request: | |
paths: | |
- server/packaging/server/** | |
- .github/workflows/docker-server.yml | |
# Only run on pushed tag because we don't want this workflow to run everytime we push something to the main branch. | |
push: | |
tags: | |
- v[0-9]+.[0-9]+.[0-9]+* | |
- nightly | |
permissions: | |
contents: write | |
packages: write | |
# We set `concurrency` to prevent having this workflow being run on code that is not up-to-date on a PR (a user make multiple push in a quick manner). | |
# But outside of a PR, we want to have only 1 workflow to be run at the same time on a given git ref | |
concurrency: | |
group: docker-server-${{ github.workflow }}-${{ github.head_ref || github.ref }} | |
cancel-in-progress: true | |
jobs: | |
docker-server: | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # pin v4.2.1 | |
timeout-minutes: 3 | |
# Set up BuildKit Docker container builder to be able to build | |
# multi-platform images and export cache | |
# https://github.com/docker/setup-buildx-action | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@c47758b77c9736f4b2ef4073d4d51994fabfe349 # v3.7.1 | |
- name: Log in to the Github Container registry | |
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Install python | |
uses: actions/setup-python@19dfb7b659fa9e60c2f89c33335ab5f6f1792b6e # pin v5.2.0 | |
id: setup-python | |
with: | |
python-version: 3.12 | |
- name: Get current version | |
id: version | |
run: python misc/releaser.py version --uniq-dev | tee -a $GITHUB_OUTPUT | |
timeout-minutes: 1 | |
- name: Generate build metadata | |
uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 # v5.5.1 | |
id: metadata | |
with: | |
images: | |
ghcr.io/scille/parsec-cloud/parsec-server | |
tags: | | |
type=semver,pattern={{ version }} | |
type=semver,pattern={{ major }}.{{ minor }} | |
type=raw,value=${{ steps.version.outputs.docker }} | |
type=schedule,enable=${{ github.event_name == 'push' && github.ref_type == 'tag' && github.ref == 'refs/tags/nightly' && 'true' || 'false' }},pattern=nightly | |
flavor: | | |
latest=${{ github.event_name == 'push' && github.ref_type == 'tag' }} | |
- name: Build and export to Docker | |
uses: docker/build-push-action@4f58ea79222b3b9dc2c8bbdd6debcef730109a75 # v6.9.0 | |
id: build | |
with: | |
context: . | |
file: server/packaging/server/server.dockerfile | |
load: true | |
tags: ${{ steps.metadata.outputs.tags }} | |
labels: ${{ steps.metadata.outputs.labels }} | |
push: false | |
timeout-minutes: 20 | |
- name: Start docker test container | |
id: test-container | |
shell: bash | |
run: | | |
( | |
echo -n "id="; | |
docker run --detach --publish 6777:6777 --rm --name=parsec-server ${{ steps.build.outputs.imageid }} -- run --port=6777 --dev --host=0.0.0.0 | |
) | tee $GITHUB_OUTPUT | |
timeout-minutes: 1 | |
- name: Test docker image | |
run: python .github/scripts/test-server.py | |
timeout-minutes: 1 | |
- name: Stop docker test container | |
run: docker container stop ${{ steps.test-container.outputs.id }} | |
timeout-minutes: 1 | |
- name: Image to be published | |
run: echo "${{ steps.metadata.outputs.tags }}" | |
- name: Build and publish | |
uses: docker/build-push-action@4f58ea79222b3b9dc2c8bbdd6debcef730109a75 # v6.9.0 | |
id: publish | |
with: | |
context: . | |
file: server/packaging/server/server.dockerfile | |
tags: ${{ steps.metadata.outputs.tags }} | |
labels: ${{ steps.metadata.outputs.labels }} | |
push: ${{ (github.event_name == 'push' && github.ref_type == 'tag') || github.event_name == 'workflow_dispatch' }} |