stages:
  - build
  - release

build_iso:
  stage: build
  image: ubuntu:24.04
  timeout: 90 minutes
  rules:
    - if: '$CI_COMMIT_BRANCH == "main"'
    - if: '$CI_COMMIT_TAG'
  artifacts:
    paths:
      - aethex-linux-build/
      - artifacts/local/
    expire_in: 90 days
  tags:
    - docker
  script:
    # Install full dependencies for layered OS build
    - apt-get update -qq
    - apt-get install -y -qq debootstrap xorriso genisoimage syslinux syslinux-common isolinux squashfs-tools grub-pc-bin grub-efi-amd64-bin wget curl nodejs npm git ca-certificates gnupg
    
    # Install Node dependencies
    - npm install
    
    # Build client
    - npm run build || echo "Build failed but continuing"
    
    # Build full ISO with Wine + Docker + Dev Tools (requires privileged mode)
    - mkdir -p aethex-linux-build
    - chmod +x script/build-linux-iso-full.sh
    - bash script/build-linux-iso-full.sh
    
    # Verify ISO exists (fail the build if not)
    - |
      ISO_PATH=$(ls aethex-linux-build/AeThex-OS-Full-*.iso 2>/dev/null | head -n 1)
      if [ -n "$ISO_PATH" ]; then
        echo "✅ ISO built successfully: $ISO_PATH"
        ls -lh "$ISO_PATH"
        sha256sum "$ISO_PATH" > aethex-linux-build/SHA256
        mkdir -p artifacts/local
        cp "$ISO_PATH" artifacts/local/
        cp aethex-linux-build/SHA256 artifacts/local/$(basename "$ISO_PATH").sha256
      else
        echo "❌ ISO not found! Build failed."
        ls -la aethex-linux-build/ || echo "Build directory doesn't exist"
        exit 1
      fi

release_iso:
  stage: release
  image: registry.gitlab.com/gitlab-org/release-cli:latest
  needs:
    - job: build_iso
      artifacts: true
  rules:
    - if: '$CI_COMMIT_TAG'
  variables:
    RELEASE_NAME: "AeThex OS $CI_COMMIT_TAG"
  script:
    - echo "Creating GitLab release for tag $CI_COMMIT_TAG"
    - |
      ISO_PATH=$(ls artifacts/local/AeThex-Linux-*.iso 2>/dev/null | head -n 1)
      if [ -z "$ISO_PATH" ]; then
        echo "No ISO found in artifacts/local. Listing..." && ls -la artifacts/local || true
      fi
    - |
      if [ -n "$ISO_PATH" ]; then
        # Create release and attach asset link pointing to job artifact (90-day retention)
        release-cli create \
          --name "$RELEASE_NAME" \
          --tag-name "$CI_COMMIT_TAG" \
          --assets-link name="AeThex OS ISO" url="$CI_PROJECT_URL/-/jobs/$CI_JOB_ID/artifacts/file/$ISO_PATH"
      else
        # Create release without asset if ISO missing
        release-cli create \
          --name "$RELEASE_NAME" \
          --tag-name "$CI_COMMIT_TAG"
      fi
