diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml new file mode 100644 index 0000000..9aa45af --- /dev/null +++ b/.gitea/workflows/ci.yml @@ -0,0 +1,122 @@ +name: CI/CD + +on: + pull_request: + branches: + - master + types: + - closed + +jobs: + build-deploy: + runs-on: act_runner_java + if: ${{ github.event.pull_request.merged == true }} + steps: + - name: Set up environment + run: | + echo "PR #${{ github.event.number }} merged into master" + echo "Source branch: ${{ github.event.pull_request.head.ref }}" + echo "Target branch: ${{ github.event.pull_request.base.ref }}" + - name: Run tests + run: | + echo "Running test suite..." + - name: Build project + run: | + mvn -B -DskipTests clean package source:jar javadoc:jar + - name: Deploy + if: success() + run: | + if [ -z "${{ secrets.NEXUS_USERNAME }}" ] || [ -z "${{ secrets.NEXUS_PASSWORD }}" ]; then + echo "Missing secrets.NEXUS_USERNAME or secrets.NEXUS_PASSWORD" + exit 1 + fi + mkdir -p ~/.m2 + cat > ~/.m2/settings.xml < + + + timi-nexus + ${{ secrets.NEXUS_USERNAME }} + ${{ secrets.NEXUS_PASSWORD }} + + + + EOF + version=$(mvn -q -DforceStdout help:evaluate -Dexpression=project.version) + artifact_id=$(mvn -q -DforceStdout help:evaluate -Dexpression=project.artifactId) + main_jar="target/${artifact_id}-${version}.jar" + sources_jar="target/${artifact_id}-${version}-sources.jar" + javadoc_jar="target/${artifact_id}-${version}-javadoc.jar" + if [ ! -f "$main_jar" ] || [ ! -f "$sources_jar" ] || [ ! -f "$javadoc_jar" ]; then + echo "Missing build artifacts in target" + exit 1 + fi + mvn -B deploy:deploy-file \ + -Dfile="$main_jar" \ + -Dsources="$sources_jar" \ + -Djavadoc="$javadoc_jar" \ + -DpomFile="./pom.xml" \ + -Durl="https://nexus.imyeyu.com/repository/maven-releases/" \ + -DrepositoryId="timi-nexus" + - name: Upload jar artifact + if: success() + uses: actions/upload-artifact@v3 + with: + name: build-jar + path: target/*.jar + if-no-files-found: error + create-release: + runs-on: act_runner_base + needs: build-deploy + if: ${{ success() && github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'master' && startsWith(github.event.pull_request.title, 'v') }} + steps: + - name: Download jar artifact + uses: actions/download-artifact@v3 + with: + name: build-jar + path: dist + - name: Create release + env: + GITEA_TOKEN: ${{ secrets.RUNNER_TOKEN }} + GITEA_SERVER_URL: ${{ github.server_url }} + GITEA_REPOSITORY: ${{ github.repository }} + RELEASE_TAG: ${{ github.event.pull_request.title }} + RELEASE_TARGET: ${{ github.sha }} + run: | + if [ -z "$GITEA_TOKEN" ]; then + echo "Missing secrets.RUNNER_TOKEN" + exit 1 + fi + api_url="$GITEA_SERVER_URL/api/v1/repos/$GITEA_REPOSITORY/releases" + payload=$(cat </dev/null 2>&1; then + echo "Missing jar artifact in dist" + exit 1 + fi + for asset_path in dist/*.jar; do + asset_name=$(basename "$asset_path") + curl -sS -X POST "$api_url/$release_id/assets?name=$asset_name" \ + -H "Authorization: token $GITEA_TOKEN" \ + -H "Content-Type: application/octet-stream" \ + --data-binary @"$asset_path" + done diff --git a/.gitignore b/.gitignore index 5ff6309..8f95f01 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,7 @@ +/.claude +/AGENTS.md +/CLAUDE.md + target/ !.mvn/wrapper/maven-wrapper.jar !**/src/main/**/target/