217 lines
8.0 KiB
YAML
217 lines
8.0 KiB
YAML
name: Update tccbin
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
tcc_commit:
|
|
description: 'TinyCC ref, branch, or commit to build'
|
|
required: false
|
|
default: mob
|
|
publish:
|
|
description: 'Push the rebuilt bundle to vlang/tccbin'
|
|
type: boolean
|
|
required: false
|
|
default: false
|
|
force_rebuild:
|
|
description: 'Rebuild even when tccbin already records the same TinyCC hash'
|
|
type: boolean
|
|
required: false
|
|
default: false
|
|
schedule:
|
|
- cron: '17 3 1 * *'
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
concurrency:
|
|
group: update-tccbin-${{ github.ref }}
|
|
cancel-in-progress: false
|
|
|
|
jobs:
|
|
update-tccbin-hosted:
|
|
if: github.repository == 'vlang/v' && (github.event_name != 'schedule' || github.ref == 'refs/heads/master')
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- id: linux-amd64
|
|
os: ubuntu-latest
|
|
branch: thirdparty-linux-amd64
|
|
script: thirdparty/build_scripts/thirdparty-linux-amd64_tcc.sh
|
|
- id: macos-amd64
|
|
os: macos-15-intel
|
|
branch: thirdparty-macos-amd64
|
|
script: thirdparty/build_scripts/thirdparty-macos-amd64_tcc.sh
|
|
- id: macos-arm64
|
|
os: macos-latest
|
|
branch: thirdparty-macos-arm64
|
|
script: thirdparty/build_scripts/thirdparty-macos-arm64_tcc.sh
|
|
runs-on: ${{ matrix.os }}
|
|
env:
|
|
TCC_COMMIT: ${{ github.event.inputs.tcc_commit || 'mob' }}
|
|
TCCBIN_REPO: vlang/tccbin
|
|
PUBLISH: ${{ github.event_name == 'schedule' || github.event.inputs.publish == 'true' }}
|
|
FORCE_REBUILD: ${{ github.event.inputs.force_rebuild == 'true' }}
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
|
|
- name: Install macOS build dependencies
|
|
if: runner.os == 'macOS'
|
|
run: brew install make
|
|
|
|
- name: Resolve TinyCC source hash
|
|
id: tinycc
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
git clone --quiet https://repo.or.cz/tinycc.git /tmp/tinycc-ref
|
|
git -C /tmp/tinycc-ref checkout --quiet "$TCC_COMMIT"
|
|
hash="$(git -C /tmp/tinycc-ref rev-parse HEAD)"
|
|
echo "hash=$hash" >> "$GITHUB_OUTPUT"
|
|
echo "TinyCC $TCC_COMMIT resolves to $hash"
|
|
|
|
- name: Clone tccbin branch
|
|
shell: bash
|
|
env:
|
|
TCCBIN_TOKEN: ${{ secrets.VLANG_BOT_SECRET }}
|
|
run: |
|
|
set -euo pipefail
|
|
git clone --branch "${{ matrix.branch }}" --depth=1 \
|
|
"https://github.com/${TCCBIN_REPO}.git" thirdparty/tcc
|
|
if [ "$PUBLISH" = 'true' ]; then
|
|
if [ -z "$TCCBIN_TOKEN" ]; then
|
|
echo "::error::VLANG_BOT_SECRET is required to publish to ${TCCBIN_REPO}"
|
|
exit 1
|
|
fi
|
|
git -C thirdparty/tcc remote set-url origin \
|
|
"https://vlang-bot:${TCCBIN_TOKEN}@github.com/${TCCBIN_REPO}.git"
|
|
fi
|
|
|
|
- name: Check whether rebuild is needed
|
|
id: rebuild
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
if [ "$FORCE_REBUILD" != 'true' ] \
|
|
&& [ -f thirdparty/tcc/build_source_hash.txt ] \
|
|
&& [ "$(cat thirdparty/tcc/build_source_hash.txt)" = "${{ steps.tinycc.outputs.hash }}" ]; then
|
|
echo "skip=true" >> "$GITHUB_OUTPUT"
|
|
echo "tccbin/${{ matrix.branch }} already has TinyCC ${{ steps.tinycc.outputs.hash }}"
|
|
else
|
|
echo "skip=false" >> "$GITHUB_OUTPUT"
|
|
fi
|
|
|
|
- name: Configure git identity
|
|
if: steps.rebuild.outputs.skip != 'true'
|
|
run: |
|
|
git config --global user.name vlang-bot
|
|
git config --global user.email vlang-bot@users.noreply.github.com
|
|
|
|
- name: Build TCC bundle
|
|
if: steps.rebuild.outputs.skip != 'true'
|
|
shell: bash
|
|
env:
|
|
BUILD_CMD: TCC_COMMIT=${{ env.TCC_COMMIT }} TCC_FOLDER=thirdparty/tcc bash ${{ matrix.script }}
|
|
run: |
|
|
set -euo pipefail
|
|
TCC_FOLDER=thirdparty/tcc bash "${{ matrix.script }}"
|
|
test "$(cat thirdparty/tcc/build_source_hash.txt)" = "${{ steps.tinycc.outputs.hash }}"
|
|
thirdparty/tcc/tcc.exe --version
|
|
thirdparty/tcc/tcc.exe -v -v
|
|
|
|
- name: Upload TCC bundle artifact
|
|
if: steps.rebuild.outputs.skip != 'true'
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
name: tccbin-${{ matrix.id }}
|
|
path: thirdparty/tcc
|
|
|
|
- name: Push tccbin branch
|
|
if: steps.rebuild.outputs.skip != 'true' && env.PUBLISH == 'true'
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
git -C thirdparty/tcc push origin HEAD:${{ matrix.branch }}
|
|
|
|
update-tccbin-bsd:
|
|
if: github.repository == 'vlang/v' && (github.event_name != 'schedule' || github.ref == 'refs/heads/master')
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- id: freebsd-amd64
|
|
operating_system: freebsd
|
|
version: '15.0'
|
|
branch: thirdparty-freebsd-amd64
|
|
script: thirdparty/build_scripts/thirdparty-freebsd-amd64_tcc.sh
|
|
install: sudo pkg install -y bash git gmake rsync
|
|
cc: cc
|
|
- id: openbsd-amd64
|
|
operating_system: openbsd
|
|
version: '7.8'
|
|
branch: thirdparty-openbsd-amd64
|
|
script: thirdparty/build_scripts/thirdparty-openbsd-amd64_tcc.sh
|
|
install: sudo pkg_add bash git gmake rsync
|
|
cc: clang
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
TCC_COMMIT: ${{ github.event.inputs.tcc_commit || 'mob' }}
|
|
TCCBIN_REPO: vlang/tccbin
|
|
PUBLISH: ${{ github.event_name == 'schedule' || github.event.inputs.publish == 'true' }}
|
|
FORCE_REBUILD: ${{ github.event.inputs.force_rebuild == 'true' }}
|
|
TCCBIN_TOKEN: ${{ secrets.VLANG_BOT_SECRET }}
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
|
|
- name: Start ${{ matrix.id }} VM
|
|
uses: cross-platform-actions/action@v1.2.0
|
|
with:
|
|
operating_system: ${{ matrix.operating_system }}
|
|
version: ${{ matrix.version }}
|
|
memory: 4G
|
|
shell: sh
|
|
sync_files: runner-to-vm
|
|
environment_variables: TCC_COMMIT TCCBIN_REPO PUBLISH FORCE_REBUILD TCCBIN_TOKEN
|
|
|
|
- name: Build and publish ${{ matrix.id }} TCC bundle
|
|
shell: cpa.sh {0}
|
|
run: |
|
|
set -eu
|
|
${{ matrix.install }}
|
|
git config --global user.name vlang-bot
|
|
git config --global user.email vlang-bot@users.noreply.github.com
|
|
git config --global --add safe.directory "$PWD"
|
|
|
|
git clone --quiet https://repo.or.cz/tinycc.git /tmp/tinycc-ref
|
|
git -C /tmp/tinycc-ref checkout --quiet "$TCC_COMMIT"
|
|
tinycc_hash="$(git -C /tmp/tinycc-ref rev-parse HEAD)"
|
|
echo "TinyCC $TCC_COMMIT resolves to $tinycc_hash"
|
|
|
|
git clone --branch "${{ matrix.branch }}" --depth=1 \
|
|
"https://github.com/${TCCBIN_REPO}.git" thirdparty/tcc
|
|
if [ "$PUBLISH" = 'true' ]; then
|
|
if [ -z "$TCCBIN_TOKEN" ]; then
|
|
echo "VLANG_BOT_SECRET is required to publish to ${TCCBIN_REPO}" >&2
|
|
exit 1
|
|
fi
|
|
git -C thirdparty/tcc remote set-url origin \
|
|
"https://vlang-bot:${TCCBIN_TOKEN}@github.com/${TCCBIN_REPO}.git"
|
|
fi
|
|
|
|
if [ "$FORCE_REBUILD" != 'true' ] \
|
|
&& [ -f thirdparty/tcc/build_source_hash.txt ] \
|
|
&& [ "$(cat thirdparty/tcc/build_source_hash.txt)" = "$tinycc_hash" ]; then
|
|
echo "tccbin/${{ matrix.branch }} already has TinyCC $tinycc_hash"
|
|
exit 0
|
|
fi
|
|
|
|
BUILD_CMD="TCC_COMMIT=$TCC_COMMIT TCC_FOLDER=thirdparty/tcc CC=${{ matrix.cc }} bash ${{ matrix.script }}" \
|
|
TCC_FOLDER=thirdparty/tcc CC="${{ matrix.cc }}" bash "${{ matrix.script }}"
|
|
test "$(cat thirdparty/tcc/build_source_hash.txt)" = "$tinycc_hash"
|
|
thirdparty/tcc/tcc.exe --version
|
|
thirdparty/tcc/tcc.exe -v -v
|
|
|
|
if [ "$PUBLISH" = 'true' ]; then
|
|
git -C thirdparty/tcc push origin HEAD:${{ matrix.branch }}
|
|
fi
|