Skip to content

project-workflow

project-workflow #2184

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!!"