diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..3171526 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,76 @@ +stages: + - build + - release + +variables: + # Use official NixOS container + NIX_IMAGE: "nixos/nix:latest" + # Binary path relative to project root + BINARY_PATH: "build/compose/binaries/main/app/Theorycrafter/bin/Theorycrafter" + +build: + stage: build + image: $NIX_IMAGE + + # Only run on new tags for main branch + only: + - tags + + before_script: + - echo "Setting up Nix environment..." + - nix --version + - nix-channel --update + + script: + - echo "Building Java project with Gradle via Nix shell..." + # Enter nix-shell and run the build + - nix-shell --run "./gradlew package" + + # Verify the binary exists + - ls -la $BINARY_PATH + - file $BINARY_PATH + + # Create the tarball with the tag name + - mkdir -p release + - tar -czf "release/Theorycrafter-${CI_COMMIT_TAG}-x86_64-linux.tar.gz" -C "$(dirname $BINARY_PATH)" "$(basename $BINARY_PATH)" + + # Verify the tarball was created + - ls -la release/ + + artifacts: + paths: + - release/Theorycrafter-${CI_COMMIT_TAG}-x86_64-linux.tar.gz + expire_in: 1 week + + cache: + key: gradle-cache-$CI_COMMIT_REF_SLUG + paths: + - .gradle/caches/ + - .gradle/wrapper/ + + release: + stage: release + image: registry.gitlab.com/gitlab-org/release-cli:latest + + # Only run on new tags for main branch + only: + - tags + + # Depend on build job completion + dependencies: + - build + + before_script: + - apk add --no-cache curl jq + + script: + - echo "Creating GitLab release for tag ${CI_COMMIT_TAG}..." + + # Create release using GitLab Release CLI + - | + release-cli create \ + --name "Theorycrafter ${CI_COMMIT_TAG}" \ + --tag-name "${CI_COMMIT_TAG}" \ + --description "Release ${CI_COMMIT_TAG}" \ + --assets-link "{\"name\":\"Theorycrafter-${CI_COMMIT_TAG}-x86_64-linux.tar.gz\",\"url\":\"${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/file/release/Theorycrafter-${CI_COMMIT_TAG}-x86_64-linux.tar.gz\"}" + diff --git a/nvim b/nvim new file mode 100644 index 0000000..a2d7778 --- /dev/null +++ b/nvim @@ -0,0 +1,28 @@ +{ pkgs ? import {} }: + +pkgs.mkShell { + buildInputs = with pkgs; [ + openjdk17 + gradle + git + mesa + libglvnd + ]; + + shellHook = '' + echo "Java development environment loaded!" + echo "- OpenJDK 17: $(java -version 2>&1 | head -n1)" + echo "- Gradle: $(gradle --version | grep 'Gradle' | head -n1 2>/dev/null || echo 'Gradle available')" + echo "- OpenGL libraries available" + + export LD_LIBRARY_PATH=${pkgs.mesa.out}/lib:${pkgs.libglvnd.out}/lib:$LD_LIBRARY_PATH + export JAVA_HOME=${pkgs.openjdk17} + + echo "" + echo "Environment variables set:" + echo "- JAVA_HOME: $JAVA_HOME" + echo "- LD_LIBRARY_PATH: $LD_LIBRARY_PATH" + echo "" + echo "Ready to build! Run: ./gradlew package" + ''; +} diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..a2d7778 --- /dev/null +++ b/shell.nix @@ -0,0 +1,28 @@ +{ pkgs ? import {} }: + +pkgs.mkShell { + buildInputs = with pkgs; [ + openjdk17 + gradle + git + mesa + libglvnd + ]; + + shellHook = '' + echo "Java development environment loaded!" + echo "- OpenJDK 17: $(java -version 2>&1 | head -n1)" + echo "- Gradle: $(gradle --version | grep 'Gradle' | head -n1 2>/dev/null || echo 'Gradle available')" + echo "- OpenGL libraries available" + + export LD_LIBRARY_PATH=${pkgs.mesa.out}/lib:${pkgs.libglvnd.out}/lib:$LD_LIBRARY_PATH + export JAVA_HOME=${pkgs.openjdk17} + + echo "" + echo "Environment variables set:" + echo "- JAVA_HOME: $JAVA_HOME" + echo "- LD_LIBRARY_PATH: $LD_LIBRARY_PATH" + echo "" + echo "Ready to build! Run: ./gradlew package" + ''; +}