project-workflow #2184
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: project-workflow | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| BUILD_VARS_JSON: | |
| description: 'Build var json file' | |
| required: true | |
| jobs: | |
| build-project: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Capture start date and time | |
| id: start_time | |
| run: echo "start_time=$(date -u)" >> $GITHUB_ENV | |
| - name: Add start time to build_vars.json | |
| run: | | |
| modified_json=$(echo '${{ github.event.inputs.BUILD_VARS_JSON }}' | jq '.buildstats += { "${{ github.event.repository.name }}-start": "${{ env.start_time }}" }' ) | |
| BUILD_VARS_JSON=$(echo "$modified_json" | jq -c '.') | |
| echo "BUILD_VARS_JSON=$BUILD_VARS_JSON" >> $GITHUB_ENV | |
| echo "**** next next ****" | |
| echo "BUILD_VARS_JSON=$BUILD_VARS_JSON" | |
| - name: Get build vars from input file | |
| id: extract_build_vars | |
| run: | | |
| BUILD_OS=$(echo "$BUILD_VARS_JSON" | jq -r '.buildstats.OS' ) | |
| BUILD_BRANCH=$(echo "$BUILD_VARS_JSON" | jq -r '.buildstats.BUILD_BRANCH' ) | |
| BUILD_TYPE=$(echo "$BUILD_VARS_JSON" | jq -r '.buildstats.BUILD_TYPE' ) | |
| BUILD_REPO=$(echo "$BUILD_VARS_JSON" | jq -r '.buildstats.BUILD_REPO' ) | |
| echo "BUILD_OS=$BUILD_OS" >> $GITHUB_ENV | |
| echo "BUILD_BRANCH=$BUILD_BRANCH" >> $GITHUB_ENV | |
| echo "BUILD_TYPE=$BUILD_TYPE" >> $GITHUB_ENV | |
| echo "BUILD_REPO=$BUILD_REPO" >> $GITHUB_ENV | |
| echo "BUILD_OS=$BUILD_OS" | |
| echo "BUILD_BRANCH=$BUILD_BRANCH" | |
| echo "BUILD_TYPE=$BUILD_TYPE" | |
| echo "BUILD_REPO=$BUILD_REPO" | |
| - name: Check out Repo | |
| uses: actions/checkout@v6 | |
| - name: Fetch workflow script from projects | |
| env: | |
| github-token: ${{ secrets.GIT_ACTIONS }} | |
| run: | | |
| git clone https://github.com/perfsonar/project.git project | |
| case "${{ env.BUILD_OS }}" in | |
| 'ol8'|'el9'|'el10') | |
| cp project/toolbox/workflows/create-el-repo.sh . | |
| ;; | |
| 'd11'|'d12'|'u20'|'u22'|'u24') | |
| cp project/toolbox/workflows/create-db-repo.sh . | |
| ;; | |
| esac | |
| - name: Extract dependencies | |
| id: extract_deps | |
| run: | | |
| echo "$BUILD_VARS_JSON" | jq -r '.repos[] | select(.name == "${{ github.event.repository.name }}") | .deps[]' > deps.txt | |
| case "${{ env.BUILD_OS }}" in | |
| 'u20'|'u22'|'u24') | |
| sed -i '/minor-packages/d' deps.txt | |
| ;; | |
| *) | |
| echo "No specific packages to remove" | |
| ;; | |
| esac | |
| echo "Dependencies:" | |
| cat deps.txt | |
| - name: Download artifacts | |
| run: | | |
| mkdir -p artifacts | |
| while IFS= read -r repo; do | |
| echo "Downloading artifact for $repo" | |
| run_id=$(echo "$BUILD_VARS_JSON" | jq -r ".buildids | .[\"$repo\"]") | |
| echo "rund id $run_id" | |
| gh run download $run_id --repo perfsonar/$repo -D artifacts/$repo --name "$repo-${{ env.BUILD_OS }}" | |
| artifact_path="artifacts/$repo" | |
| echo "list artifact path" | |
| ls -al "$artifact_path" | |
| case "${{ env.BUILD_OS }}" in | |
| 'ol8'|'el9'|'el10') | |
| mkdir -p artifacts/RPMS | |
| echo "copy to the artifacts RPM dir" | |
| cp "$artifact_path"/RPMS/*.rpm artifacts/RPMS | |
| ;; | |
| 'd11'|'d12'|'u20'|'u22'|'u24') | |
| mkdir -p artifacts/debian | |
| if [ -d "$artifact_path" ]; then | |
| echo "copy directory $artifact_path" | |
| cp -r "$artifact_path" artifacts/debian/ | |
| else | |
| echo "Directory $artifact_path not found, skipping copy" | |
| fi | |
| echo "*********************************************" | |
| echo "list the copied files" | |
| ls -al artifacts/* | |
| echo "*********end copy artifacts for $artifact_path ****************" | |
| ;; | |
| esac | |
| done < deps.txt | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GIT_ACTIONS }} | |
| - uses: actions/upload-artifact@v6 | |
| with: | |
| name: ${{ github.event.repository.name }}-${{ env.BUILD_OS }} | |
| path: artifacts | |
| retention-days: 5 | |
| - name: Start SSH agent and add key | |
| run: | | |
| set -euo pipefail | |
| echo "Starting ssh-agent..." | |
| eval "$(ssh-agent -s)" | |
| # Persist agent for next step | |
| echo "SSH_AUTH_SOCK=$SSH_AUTH_SOCK" >> $GITHUB_ENV | |
| echo "SSH_AGENT_PID=$SSH_AGENT_PID" >> $GITHUB_ENV | |
| echo "Setting up ~/.ssh directory..." | |
| mkdir -p ~/.ssh | |
| chmod 700 ~/.ssh | |
| echo "Writing private key..." | |
| echo "${{ secrets.SERVER_SSH_KEY }}" > ~/.ssh/id_ed25519 | |
| chmod 600 ~/.ssh/id_ed25519 | |
| echo "Adding key to agent..." | |
| echo "${{ secrets.SERVER_SSH_PASSPHRASE }}" | ssh-add ~/.ssh/id_ed25519 | |
| echo "Loaded identities:" | |
| ssh-add -l | |
| - name: sign and copy artifact to server | |
| run: | | |
| echo "Prep the keys" | |
| echo "${{ secrets.GPG_PRIVATE_KEY }}" > private.key | |
| echo "${{ secrets.GPG_PASSPHRASE }}" | tr -d '\r\n' > passphrase.txt | |
| chmod 600 private.key passphrase.txt | |
| echo "import keys" | |
| gpg --batch --import private.key | |
| KEYID=$(gpg --list-secret-keys --with-colons | awk -F: '/^sec/ { print $5; exit }') | |
| echo "KEYID=$KEYID" >> $GITHUB_ENV | |
| echo "KEYID=$KEYID" | |
| # Write variables to the file | |
| file="variables.txt" | |
| echo "repo=$repo" > $file | |
| echo "build_branch=${{ env.BUILD_BRANCH }}" >> $file | |
| echo "os_version=$os_version" >> $file | |
| echo "os_dir=$os_dir" >> $file | |
| case "${{ env.BUILD_OS }}" in | |
| 'ol8'|'el9'|'el10') | |
| os_dir="el" | |
| os="${{ env.BUILD_OS }}" | |
| os_version="${os##*[!0-9]}" | |
| echo "Create the repo" | |
| curl -s https://raw.githubusercontent.com/perfsonar/docker-oneshot-builder/main/build | sh -s - --run create-el-repo.sh . "${{ env.BUILD_OS }}" | |
| echo "Call the oneshot signer for $os_dir version $os_version" | |
| # curl -s https://raw.githubusercontent.com/perfsonar/docker-oneshot-signer/main/sign | sh -s - --passphrase passphrase.txt ./artifacts/RPMS "$KEYID" | |
| echo "update the repo info" | |
| curl -s https://raw.githubusercontent.com/perfsonar/docker-oneshot-builder/main/build | sh -s - --run create-el-repo.sh . "${{ env.BUILD_OS }}" | |
| echo "create dirs on server if needed" | |
| ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p ${{ secrets.SERVER_PORT }} ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }} "mkdir -p ~/distribution/rpm/$os_dir/$os_version/x86_64/${{ env.BUILD_BRANCH }}" | |
| echo "Rsync to the distro servers" | |
| rsync -avz --delete -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p ${{ secrets.SERVER_PORT }}" ./artifacts/RPMS/ ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }}:~/distribution/rpm/$os_dir//$os_version/x86_64/${{ env.BUILD_BRANCH }} | |
| ;; | |
| 'd11'|'d12'|'u20'|'u22'|'u24') | |
| case "${{ env.BUILD_OS }}" in | |
| 'd11'|'d12') | |
| os_dir="debian" | |
| os="${{ env.BUILD_OS }}" | |
| os_version="${os#d}" | |
| echo "os_version=$os_version" >> $file | |
| echo "os_dir=$os_dir" >> $file | |
| ;; | |
| 'u20'|'u22'|'u24') | |
| os_dir="ubuntu" | |
| os="${{ env.BUILD_OS }}" | |
| os_version="${os#u}" | |
| echo "os_version=$os_version" >> $file | |
| echo "os_dir=$os_dir" >> $file | |
| ;; | |
| esac | |
| echo "get the major version" | |
| if [[ "${{ env.BUILD_REPO }}" == "nightly" ]]; then | |
| branch="${{ env.BUILD_BRANCH }}" | |
| MAJOR_VERSION="${branch%.*}.0" | |
| echo "major version is $MAJOR_VERSION" | |
| fi | |
| echo "run create-db-repo with docker oneshot" | |
| curl -s https://raw.githubusercontent.com/perfsonar/docker-oneshot-builder/main/build | sh -s - --run create-db-repo.sh . "${{ env.BUILD_OS }}" | |
| echo "create the dir and sync for the major version " | |
| ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p ${{ secrets.SERVER_PORT }} ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }} "mkdir -p ~/distribution/apt/$os_dir/$os_version/$MAJOR_VERSION" | |
| echo "rsync the files " | |
| echo "pwd" | |
| pwd | |
| echo "ls -al" | |
| ls -al | |
| echo "what is in artifacts dir?" | |
| ls -al ./artifacts | |
| echo "whats is var repo?" | |
| ls -al ./artifacts/repo | |
| rsync -avz \ | |
| -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p ${{ secrets.SERVER_PORT }}" \ | |
| ./artifacts/repo \ | |
| ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }}:~/distribution/apt/$os_dir/$os_version/$MAJOR_VERSION/ | |
| ;; | |
| esac | |
| - name: Capture end date and time | |
| id: end_time | |
| run: echo "end_time=$(date -u)" >> $GITHUB_ENV | |
| - name: Add end time to build_vars.json | |
| run: | | |
| modified_json=$(echo "$BUILD_VARS_JSON" | jq '.buildstats += { "${{ github.event.repository.name }}-end": "${{ env.end_time }}" }' ) | |
| BUILD_VARS_JSON=$(echo "$modified_json" | jq -c '.') | |
| echo "BUILD_VARS_JSON=$BUILD_VARS_JSON" >> $GITHUB_ENV | |
| echo "BUILD_VARS_JSON=$BUILD_VARS_JSON" | |
| - name: Add and display end time in BUILD_VARS_JSON | |
| run: | | |
| updated_json=$(echo "$BUILD_VARS_JSON" | jq '.buildstats += {"end_time": "${{ env.end_time }}"}') | |
| echo "$updated_json" | |
| echo "Misson accomplished!!" | |