diff --git a/.gitea/workflows/auto-tag-develop.yml b/.gitea/workflows/auto-tag-develop.yml new file mode 100644 index 0000000..e08e983 --- /dev/null +++ b/.gitea/workflows/auto-tag-develop.yml @@ -0,0 +1,65 @@ +name: Auto Tag Develop + +on: + push: + branches: + - develop + +jobs: + tag: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + token: ${{ secrets.RELEASE_TOKEN }} + persist-credentials: true + + - name: Create next tag from VERSION + shell: bash + run: | + set -euo pipefail + + # Skip if current commit already has a vX.Y.Z tag + if git tag --points-at HEAD | grep -qE '^v[0-9]+\.[0-9]+\.[0-9]+$'; then + echo "Tag already exists on this commit. Skipping." + exit 0 + fi + + changed_version=false + if git diff --name-only "${{ gitea.event.before }}" "${{ gitea.event.after }}" | grep -q '^VERSION$'; then + changed_version=true + fi + + read_version() { + cat VERSION | tr -d '[:space:]' + } + + if $changed_version; then + version="$(read_version)" + if ! [[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "Invalid version in VERSION: $version" >&2 + exit 1 + fi + else + last_tag="$(git tag -l 'v*' --sort=-v:refname | head -n1 || true)" + if [ -z "$last_tag" ]; then + version="0.1.0" + else + base="${last_tag#v}" + IFS='.' read -r major minor patch <<< "$base" + version="${major}.${minor}.$((patch + 1))" + fi + + echo "$version" > VERSION + git config user.name "gitea-actions" + git config user.email "gitea-actions@local" + git add VERSION + git commit -m "chore : bump version to v$version" || true + git push origin develop || true + fi + + tag="v$version" + git tag "$tag" + git push origin "$tag" diff --git a/.gitea/workflows/release-artefact.yml b/.gitea/workflows/release-artefact.yml new file mode 100644 index 0000000..80a9699 --- /dev/null +++ b/.gitea/workflows/release-artefact.yml @@ -0,0 +1,67 @@ +name: Build Release Artefact + +on: + push: + tags: + - "v*" + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + persist-credentials: false + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: "8.4" + extensions: mbstring, intl, pdo_pgsql, xml, curl, zip, gd + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: "lts/*" + + - name: Install backend deps (prod) + env: + APP_ENV: prod + APP_DEBUG: "0" + run: composer install --no-dev --optimize-autoloader --no-interaction --no-scripts + + - name: Build frontend (static) + run: | + cd frontend + npm ci + CI=1 NUXT_TELEMETRY_DISABLED=1 NUXT_PUBLIC_API_BASE_URL=/api NUXT_PUBLIC_APP_BASE=/ npm run generate + test -f .output/public/index.html + + - name: Build artefact + shell: bash + run: | + set -euo pipefail + mkdir -p release + tar -czf "release/inventory-${GITHUB_REF_NAME}.tar.gz" \ + .env \ + bin \ + config \ + migrations \ + public \ + src \ + templates \ + vendor \ + composer.json \ + composer.lock \ + symfony.lock \ + VERSION \ + frontend/.output + + - name: Create Release + uses: softprops/action-gh-release@v2 + with: + files: release/inventory-${{ github.ref_name }}.tar.gz + env: + GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }}