diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7ac6e8d..b40a5c2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -25,39 +25,26 @@ on: jobs: build: runs-on: ubuntu-latest - container: - image: rockylinux:9 steps: - name: Checkout code uses: actions/checkout@v4 - - name: Install system dependencies + - name: Build Docker image run: | - dnf install -y \ - python3.11 \ - python3.11-pip \ - mandoc \ - rpm-build \ - dnf-plugins-core \ - git + docker build -t rocky-man:latest . - - name: Install UV + - name: Create output directories run: | - curl -LsSf https://astral.sh/uv/install.sh | sh - echo "$HOME/.cargo/bin" >> $GITHUB_PATH + mkdir -p ./html ./tmp - - name: Install Python dependencies + - name: Build man pages in container run: | - uv pip install --system -e . - - - name: Build man pages - run: | - python3.11 -m rocky_man.main \ - --versions ${{ github.event.inputs.versions || '8.10 9.5' }} \ - --output-dir ./html \ - --download-dir ./tmp/downloads \ - --extract-dir ./tmp/extracts \ + docker run --rm \ + -v "$(pwd)/html:/data/html" \ + -v "$(pwd)/tmp:/data/tmp" \ + rocky-man:latest \ + --versions ${{ github.event.inputs.versions || '8.10 9.6 10.0' }} \ --verbose env: PYTHONUNBUFFERED: 1 @@ -68,11 +55,3 @@ jobs: name: rocky-man-pages path: html/ retention-days: 30 - - - name: Deploy to GitHub Pages - if: github.ref == 'refs/heads/main' - uses: peaceiris/actions-gh-pages@v3 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./html - force_orphan: true diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..b0f6b10 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,114 @@ +// Jenkinsfile for Rocky Man +// This pipeline uses Kubernetes agents to build and run the container + +pipeline { + agent { + kubernetes { + yaml """ +apiVersion: v1 +kind: Pod +metadata: + labels: + jenkins: agent +spec: + containers: + - name: docker + image: docker:24-dind + securityContext: + privileged: true + volumeMounts: + - name: docker-sock + mountPath: /var/run + command: + - dockerd-entrypoint.sh + - name: docker-cli + image: docker:24-cli + command: + - cat + tty: true + volumeMounts: + - name: docker-sock + mountPath: /var/run + volumes: + - name: docker-sock + emptyDir: {} +""" + } + } + + parameters { + string( + name: 'VERSIONS', + defaultValue: '8.10 9.6 10.0', + description: 'Rocky Linux versions to build (space-separated)' + ) + } + + options { + buildDiscarder(logRotator(numToKeepStr: '10')) + timeout(time: 2, unit: 'HOURS') + timestamps() + } + + stages { + stage('Checkout') { + steps { + checkout scm + } + } + + stage('Build Docker Image') { + steps { + container('docker-cli') { + sh ''' + docker build -t rocky-man:${BUILD_NUMBER} . + docker tag rocky-man:${BUILD_NUMBER} rocky-man:latest + ''' + } + } + } + + stage('Build Man Pages') { + steps { + container('docker-cli') { + sh ''' + # Create output directories + mkdir -p ./html ./tmp + + # Run the container to build man pages + docker run --rm \ + -v "$(pwd)/html:/data/html" \ + -v "$(pwd)/tmp:/data/tmp" \ + rocky-man:${BUILD_NUMBER} \ + --versions ${VERSIONS} \ + --verbose + ''' + } + } + } + + stage('Archive Artifacts') { + steps { + archiveArtifacts artifacts: 'html/**/*', fingerprint: true + } + } + } + + post { + success { + echo 'Build completed successfully!' + } + failure { + echo 'Build failed!' + } + cleanup { + container('docker-cli') { + sh ''' + # Clean up Docker images to save space + docker rmi rocky-man:${BUILD_NUMBER} || true + docker rmi rocky-man:latest || true + ''' + } + } + } +}