Skip to content

Build

Build #196

Workflow file for this run

name: Build
on:
workflow_dispatch:
schedule:
- cron: '0 * * * *'
concurrency:
group: build
cancel-in-progress: false
jobs:
build:
name: Build
runs-on: ubuntu-latest
permissions:
actions: write
packages: write
contents: read
steps:
-
name: Run graphql query to get tag
uses: octokit/graphql-action@v2.x
id: latest_tag
with:
variables: |
repo: lemmy-ui
owner: lemmynet
query: |
query tag($owner: String!, $repo: String!) {
repository(owner: $owner, name: $repo) {
refs(refPrefix: "refs/tags/", last: 1, orderBy: {field: TAG_COMMIT_DATE, direction: ASC}) {
edges {
node {
name
} } } } }
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
name: Parse tag from query output
run: |
#!/bin/bash
latest_tag=$(echo '${{ steps.latest_tag.outputs.data }}' | jq '.repository.refs.edges[][].name' -r)
[ -z "$latest_tag" ] && echo "Tag not found!" && exit 1
[[ "$latest_tag" = v* ]] && latest_tag="${latest_tag:1}"
echo "Found tag: \"${latest_tag}\""
echo "latest_tag=$latest_tag" >> $GITHUB_ENV
-
name: Check if the tag exists locally
uses: action-pack/tag-exists@v1
id: checkTag
with:
tag: 'v${{ env.latest_tag }}'
-
name: Finish when found
run: |
#!/bin/bash
val="${{ steps.checkTag.outputs.exists }}"
[[ "${{ env.latest_tag }}" == *"alpha"* ]] && val="true"
echo "exists=${val}" >> $GITHUB_ENV
-
name: Checkout
if: env.exists == 'false'
uses: actions/checkout@v4
with:
fetch-depth: 0
-
name: Set up Docker Buildx
if: env.exists == 'false'
uses: docker/setup-buildx-action@v3
-
name: Login into Docker Hub
if: env.exists == 'false'
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Login to GitHub Container Registry
if: env.exists == 'false'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
-
name: Clone remote branch
if: env.exists == 'false'
run: |
git config --global url.https://github.com/.insteadOf git://github.com/
git clone --recurse-submodules -j8 https://github.com/lemmynet/lemmy-ui.git --single-branch --branch ${{ env.latest_tag }}
cp Dockerfile.custom lemmy-ui/Dockerfile
cp .dockerignore lemmy-ui/
-
name: Build Docker image
if: env.exists == 'false'
id: build
run: |
#!/bin/bash
DIRECTORY="lemmy-ui"
VERSION="${{ env.latest_tag }}"
echo "version=${VERSION}" >> $GITHUB_OUTPUT
PLATFORMS="linux/amd64,linux/arm64"
BUILD_DATE="$(date -u +'%Y-%m-%dT%H:%M:%SZ')"
TITLE="$(grep --only-matching --perl-regex "(?<=image.title\=).*" $DIRECTORY/Dockerfile | sed -e 's/ /\xc2\xa0/g')"
DESC="$(grep --only-matching --perl-regex "(?<=image.description\=).*" $DIRECTORY/Dockerfile | sed -e 's/ /\xc2\xa0/g')"
IS_BETA=false
[[ "${VERSION}" == *"rc"* ]] && IS_BETA=true
[[ "${VERSION}" == *"beta"* ]] && IS_BETA=true
[[ "${VERSION}" == *"alpha"* ]] && IS_BETA=true
TAGS=()
TAGS=("${{ secrets.DOCKERHUB_REPO }}:${VERSION}")
[[ ! $IS_BETA ]] && TAGS+=("${{ secrets.DOCKERHUB_REPO }}:latest")
TAGS+=("ghcr.io/${{ github.repository }}:${VERSION}")
[[ ! $IS_BETA ]] && TAGS+=("ghcr.io/${{ github.repository }}:latest")
LABELS=()
LABELS=("org.opencontainers.image.licenses=AGPL-3.0")
LABELS+=("org.opencontainers.image.title=${TITLE}")
LABELS+=("org.opencontainers.image.description=${DESC}")
LABELS+=("org.opencontainers.image.version=${VERSION}")
LABELS+=("org.opencontainers.image.created=${BUILD_DATE}")
LABELS+=("org.opencontainers.image.revision=${GITHUB_RUN_ID}")
LABELS+=("org.opencontainers.image.url=https://hub.docker.com/r/${{ secrets.DOCKERHUB_REPO }}")
LABELS+=("org.opencontainers.image.source=https://github.com/${{ github.repository }}")
cd "${DIRECTORY}"
docker buildx build --progress=plain \
docker buildx build --progress=plain \
--platform "${PLATFORMS}" \
--output "type=image,push=true" \
--build-arg "VERSION_ARG=${VERSION}" \
--build-arg "VCS_REF=${GITHUB_SHA::8}" \
$(printf '%s' "${LABELS[@]/#/ --label }" ) \
$(printf '%s' "${LABELS[@]/#/ --annotation }" ) \
$(printf '%s' "${TAGS[@]/#/ --tag }" ) .
TAGS=()
TAGS=("${{ secrets.DOCKERHUB_CUSTOM }}:latest")
TAGS+=("${{ secrets.DOCKERHUB_CUSTOM }}:${VERSION}")
# Add custom code
cp src/shared/components/app/footer.tsx lemmy-ui/src/shared/components/app/footer.tsx
docker buildx build --progress=plain \
--platform "${PLATFORMS}" \
--output "type=image,push=true" \
--build-arg "VERSION_ARG=${VERSION}" \
--build-arg "VCS_REF=${GITHUB_SHA::8}" \
$(printf '%s' "${LABELS[@]/#/ --label }" ) \
$(printf '%s' "${LABELS[@]/#/ --annotation }" ) \
$(printf '%s' "${TAGS[@]/#/ --tag }" ) .
rm -f ${HOME}/.docker/config.json
-
name: Create a release
if: env.exists == 'false'
uses: action-pack/github-release@v2
env:
GITHUB_TOKEN: ${{ secrets.REPO_ACCESS_TOKEN }}
with:
tag: "v${{ steps.build.outputs.version }}"
title: "v${{ steps.build.outputs.version }}"
-
name: Send mail
if: env.exists == 'false'
uses: dawidd6/action-send-mail@v3
with:
to: ${{secrets.MAILTO}}
from: Github Actions <${{secrets.MAILTO}}>
connection_url: ${{secrets.MAIL_CONNECTION}}
subject: Build of ${{ github.event.repository.name }} v${{ steps.build.outputs.version }} completed
body: |
The build job of ${{ github.event.repository.name }} v${{ steps.build.outputs.version }} was completed successfully!
See https://github.com/${{ github.repository }}/actions for more information.