Clarify the SyncCommand limitation #1990
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: Building | |
on: | |
workflow_dispatch: | |
inputs: | |
logLevel: | |
description: "Log level" | |
required: true | |
default: "warning" | |
type: choice | |
options: | |
- info | |
- warning | |
- debug | |
build: | |
description: "Build" | |
required: false | |
default: false | |
type: boolean | |
update_readme: | |
description: "Update Readme" | |
required: false | |
default: false | |
type: boolean | |
create_release: | |
description: "Create Release (requires build)" | |
required: false | |
default: false | |
type: boolean | |
push: | |
branches: | |
- master | |
- dev | |
paths-ignore: | |
- "**.md" | |
- ".github/**" | |
pull_request: | |
branches: | |
- "master" | |
paths-ignore: | |
- "**.md" | |
- ".github/ISSUE_TEMPLATE/**" | |
env: | |
DOCKERHUB_SLUG: arabcoders/watchstate | |
GHCR_SLUG: ghcr.io/arabcoders/watchstate | |
PLATFORMS: linux/amd64,linux/arm64,linux/arm | |
jobs: | |
unit-tests: | |
name: PHP ${{ matrix.php }} | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: true | |
matrix: | |
php: [ 8.4 ] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Update Version File | |
uses: arabcoders/write-version-to-file@master | |
with: | |
filename: "/config/config.php" | |
placeholder: "$(version_via_ci)" | |
with_date: "true" | |
with_branch: "true" | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php }} | |
extensions: pdo, mbstring, ctype, curl, sqlite3 | |
coverage: none | |
tools: composer:v2 | |
- name: Get composer cache directory | |
id: composer-cache | |
run: echo "COMPOSER_CACHE_DIR=$(composer config cache-files-dir)" >> "$GITHUB_OUTPUT" | |
- name: restore cached dependencies | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.composer-cache.outputs.COMPOSER_CACHE_DIR }} | |
key: "${{ matrix.php }}-composer-${{ hashFiles('**/composer.lock') }}" | |
restore-keys: ${{ matrix.php }}-composer- | |
- run: composer install --prefer-dist --no-interaction --no-progress | |
- run: composer run test | |
publish_docker_images: | |
needs: unit-tests | |
if: github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && github.event.inputs.build == 'true') | |
runs-on: "ubuntu-latest" | |
permissions: | |
packages: write | |
contents: write | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- uses: bahmutov/npm-install@v1 | |
with: | |
working-directory: frontend | |
install-command: yarn --production --prefer-offline --frozen-lockfile | |
- uses: bahmutov/npm-install@v1 | |
with: | |
working-directory: frontend | |
install-command: yarn run generate | |
- name: Update Version File | |
uses: arabcoders/write-version-to-file@master | |
with: | |
filename: "/config/config.php" | |
placeholder: "$(version_via_ci)" | |
with_date: "true" | |
with_branch: "true" | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Docker meta | |
id: meta | |
uses: docker/metadata-action@v5 | |
with: | |
images: | | |
${{ env.DOCKERHUB_SLUG }} | |
${{ env.GHCR_SLUG }} | |
tags: | | |
type=raw,value=latest,enable=${{ endsWith(github.ref, github.event.repository.default_branch) }} | |
type=ref,event=branch | |
type=ref,event=tag | |
type=raw,value={{branch}}{{base_ref}}-{{date 'YYYYMMDD'}}-{{sha}} | |
flavor: | | |
latest=false | |
- name: Login to github | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Login to DockerHub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Build and push | |
uses: docker/build-push-action@v5 | |
with: | |
platforms: ${{ env.PLATFORMS }} | |
context: . | |
push: true | |
tags: ${{ steps.meta.outputs.tags }} | |
labels: ${{ steps.meta.outputs.labels }} | |
cache-from: type=gha, scope=${{ github.workflow }} | |
cache-to: type=gha, scope=${{ github.workflow }} | |
- name: Version tag | |
uses: arabcoders/action-python-autotagger@master | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
repo_name: arabcoders/watchstate | |
path: config/config.php | |
regex: "'version'\\s\\=\\>\\s\\'(.+?)\\'\\," | |
dockerhub-sync-readme: | |
runs-on: ubuntu-latest | |
if: (github.event_name == 'push' && endsWith(github.ref, github.event.repository.default_branch)) || (github.event_name == 'workflow_dispatch' && github.event.inputs.update_readme == 'true') | |
steps: | |
- name: Sync README | |
uses: docker://lsiodev/readme-sync:latest | |
env: | |
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} | |
DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }} | |
GIT_REPOSITORY: ${{ github.repository }} | |
DOCKER_REPOSITORY: ${{ env.DOCKERHUB_SLUG }} | |
GIT_BRANCH: ${{ github.event.repository.default_branch }} | |
with: | |
entrypoint: node | |
args: /opt/docker-readme-sync/sync | |
create_release: | |
needs: publish_docker_images | |
runs-on: ubuntu-latest | |
# Example condition: run only if this is the default branch, or | |
# if triggered manually with input "create_release". | |
if: (endsWith(github.ref, github.event.repository.default_branch) && success()) || (github.event_name == 'workflow_dispatch' && github.event.inputs.create_release == 'true') | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # so we can see all tags + full history | |
- name: Determine current branch | |
id: branch | |
run: | | |
# github.ref_name should be "master", "main", or your branch name | |
echo "BRANCH_NAME=${GITHUB_REF_NAME}" >> $GITHUB_OUTPUT | |
- name: Fetch the two latest tags for this branch | |
id: last_two_tags | |
run: | | |
git fetch --tags | |
BRANCH_NAME="${{ steps.branch.outputs.BRANCH_NAME }}" | |
echo "Current branch: $BRANCH_NAME" | |
# List tags matching "branchname-*" and sort by *creation date* descending | |
# Then pick the top 2 | |
LATEST_TAGS=$(git tag --list "${BRANCH_NAME}-*" --sort=-creatordate | head -n 2) | |
TAG_COUNT=$(echo "$LATEST_TAGS" | wc -l) | |
echo "Found tags:" | |
echo "$LATEST_TAGS" | |
if [ "$TAG_COUNT" -lt 2 ]; then | |
echo "Not enough tags found (need at least 2) to compare commits." | |
echo "NOT_ENOUGH_TAGS=true" >> "$GITHUB_OUTPUT" | |
exit 0 | |
fi | |
# The first line is the newest tag | |
TAG_NEWEST=$(echo "$LATEST_TAGS" | sed -n '1p') | |
# The second line is the previous newest | |
TAG_PREVIOUS=$(echo "$LATEST_TAGS" | sed -n '2p') | |
echo "Newest tag: $TAG_NEWEST" | |
echo "Previous tag: $TAG_PREVIOUS" | |
# Expose them as outputs for next step | |
echo "NOT_ENOUGH_TAGS=false" >> "$GITHUB_OUTPUT" | |
echo "TAG_NEWEST=$TAG_NEWEST" >> "$GITHUB_OUTPUT" | |
echo "TAG_PREVIOUS=$TAG_PREVIOUS" >> "$GITHUB_OUTPUT" | |
- name: Generate commit log for newest tag | |
id: commits | |
if: steps.last_two_tags.outputs.NOT_ENOUGH_TAGS != 'true' | |
run: | | |
TAG_NEWEST="${{ steps.last_two_tags.outputs.TAG_NEWEST }}" | |
TAG_PREVIOUS="${{ steps.last_two_tags.outputs.TAG_PREVIOUS }}" | |
echo "Comparing commits between: $TAG_PREVIOUS..$TAG_NEWEST" | |
LOG=$(git log "$TAG_PREVIOUS".."$TAG_NEWEST" --pretty=format:"- %h %s by %an") | |
echo "LOG<<EOF" >> "$GITHUB_ENV" | |
echo "$LOG" >> "$GITHUB_ENV" | |
echo "EOF" >> "$GITHUB_ENV" | |
- name: Create / Update GitHub Release for the newest tag | |
if: steps.last_two_tags.outputs.NOT_ENOUGH_TAGS != 'true' | |
uses: softprops/action-gh-release@master | |
with: | |
tag_name: ${{ steps.last_two_tags.outputs.TAG_NEWEST }} | |
name: "${{ steps.last_two_tags.outputs.TAG_NEWEST }}" | |
body: ${{ env.LOG }} | |
append_body: true | |
generate_release_notes: true | |
make_latest: true | |
draft: false | |
prerelease: false | |
token: ${{ secrets.GITHUB_TOKEN }} |