name: Test Update Functionality
on:
workflow_run:
workflows: ["Release Packages"]
types:
- completed
workflow_dispatch:
jobs:
get-versions:
name: Extract Release Versions
runs-on: ubuntu-latest
outputs:
prev_version: ${{ steps.versions.outputs.PREV_VERSION }}
new_version: ${{ steps.versions.outputs.NEW_VERSION }}
steps:
- name: Install jq
run: sudo apt-get update && sudo apt-get install -y jq
- name: Get versions
id: versions
run: |
LATEST=$(curl -s https://api.github.com/repos/${{ github.repository }}/releases/latest \
| jq -r '.tag_name' | sed 's/^v//')
PREVIOUS=$(curl -s "https://api.github.com/repos/${{ github.repository }}/releases?per_page=2" \
| jq -r '.[1].tag_name' | sed 's/^v//')
if [ -z "$PREVIOUS" ] || [ -z "$LATEST" ] || [ "$PREVIOUS" = "null" ] || [ "$LATEST" = "null" ]; then
echo "โ Failed to extract versions (need at least 2 releases)"
echo "LATEST: $LATEST"
echo "PREVIOUS: $PREVIOUS"
exit 1
fi
echo "PREV_VERSION=$PREVIOUS" >> $GITHUB_OUTPUT
echo "NEW_VERSION=$LATEST" >> $GITHUB_OUTPUT
echo "โ Detected versions - Previous: v$PREVIOUS, Latest: v$LATEST"
test-deb-update:
name: Test .deb Package Update
runs-on: ubuntu-latest
needs: get-versions
if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name == 'workflow_dispatch' }}
steps:
- name: Display test versions
run: |
echo "Testing update from v${{ needs.get-versions.outputs.prev_version }} to v${{ needs.get-versions.outputs.new_version }}"
- name: Download previous version .deb
run: |
echo "๐ฅ Downloading previous version v${{ needs.get-versions.outputs.prev_version }}"
curl -L -o sticks-old.deb \
"https://github.com/${{ github.repository }}/releases/download/v${{ needs.get-versions.outputs.prev_version }}/sticks_${{ needs.get-versions.outputs.prev_version }}-1_amd64.deb"
if [ ! -f sticks-old.deb ]; then
echo "โ Failed to download previous version"
exit 1
fi
ls -lh sticks-old.deb
- name: Install previous version
run: |
echo "๐ฆ Installing previous version v${{ needs.get-versions.outputs.prev_version }}"
sudo dpkg -i sticks-old.deb || sudo apt-get install -f -y
echo "โ Verifying installation"
which sticks
sticks --version
- name: Verify previous version
run: |
VERSION_OUTPUT=$(sticks --version)
echo "Installed version: $VERSION_OUTPUT"
if echo "$VERSION_OUTPUT" | grep -q "${{ needs.get-versions.outputs.prev_version }}"; then
echo "โ Previous version installed correctly"
else
echo "โ Version mismatch!"
exit 1
fi
- name: Test update command
run: |
echo "๐ Testing update from v${{ needs.get-versions.outputs.prev_version }} to v${{ needs.get-versions.outputs.new_version }}"
echo "y" | sticks update > /tmp/update.log 2>&1 || UPDATE_FAILED=1
cat /tmp/update.log
if [ "$UPDATE_FAILED" = "1" ]; then
echo "โ Update command failed (exit code non-zero)"
exit 1
fi
sleep 2
echo "โ Verifying updated version"
sticks --version
- name: Verify updated version
run: |
VERSION_OUTPUT=$(sticks --version)
echo "Updated version: $VERSION_OUTPUT"
if echo "$VERSION_OUTPUT" | grep -q "${{ needs.get-versions.outputs.new_version }}"; then
echo "โ
Update successful! Now running v${{ needs.get-versions.outputs.new_version }}"
else
echo "โ Update failed or version mismatch!"
echo "Expected: ${{ needs.get-versions.outputs.new_version }}"
echo "Got: $VERSION_OUTPUT"
exit 1
fi
- name: Test basic functionality after update
run: |
echo "๐งช Testing basic functionality"
mkdir -p /tmp/test-project
cd /tmp/test-project
echo "Creating test project..."
sticks c test_app
if [ -d "test_app" ]; then
echo "โ
Project creation works after update"
else
echo "โ Project creation failed"
exit 1
fi
test-cargo-update:
name: Test Cargo Install Update
runs-on: ubuntu-latest
needs: get-versions
if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name == 'workflow_dispatch' }}
steps:
- name: Display test versions
run: |
echo "Testing cargo install update from v${{ needs.get-versions.outputs.prev_version }} to v${{ needs.get-versions.outputs.new_version }}"
- name: Install Rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: stable
- name: Install previous version via cargo
run: |
echo "๐ฅ Installing previous version v${{ needs.get-versions.outputs.prev_version }} via cargo"
cargo install sticks --version ${{ needs.get-versions.outputs.prev_version }} --force
- name: Verify previous version
run: |
VERSION_OUTPUT=$(sticks --version)
echo "Installed version: $VERSION_OUTPUT"
if echo "$VERSION_OUTPUT" | grep -q "${{ needs.get-versions.outputs.prev_version }}"; then
echo "โ Previous version installed correctly via cargo"
else
echo "โ Version mismatch!"
exit 1
fi
- name: Test update command
run: |
echo "๐ Testing cargo-based update from v${{ needs.get-versions.outputs.prev_version }} to v${{ needs.get-versions.outputs.new_version }}"
sticks update > /tmp/update.log 2>&1 || UPDATE_FAILED=1
cat /tmp/update.log
if [ "$UPDATE_FAILED" = "1" ]; then
echo "โ Update command failed (exit code non-zero)"
exit 1
fi
sleep 2
echo "โ Verifying updated version"
sticks --version
- name: Verify updated version
run: |
VERSION_OUTPUT=$(sticks --version)
echo "Updated version: $VERSION_OUTPUT"
if echo "$VERSION_OUTPUT" | grep -q "${{ needs.get-versions.outputs.new_version }}"; then
echo "โ
Update successful! Now running v${{ needs.get-versions.outputs.new_version }}"
else
echo "โ Update failed or version mismatch!"
echo "Expected: ${{ needs.get-versions.outputs.new_version }}"
echo "Got: $VERSION_OUTPUT"
exit 1
fi
- name: Test basic functionality after update
run: |
echo "๐งช Testing basic functionality"
mkdir -p /tmp/test-project
cd /tmp/test-project
echo "Creating test project..."
sticks c test_app
if [ -d "test_app" ]; then
echo "โ
Project creation works after update"
else
echo "โ Project creation failed"
exit 1
fi
test-binary-update:
name: Test Binary Update
runs-on: ubuntu-latest
needs: get-versions
if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name == 'workflow_dispatch' }}
steps:
- name: Display test versions
run: |
echo "Testing binary update from v${{ needs.get-versions.outputs.prev_version }} to v${{ needs.get-versions.outputs.new_version }}"
- name: Download previous version binary
run: |
echo "๐ฅ Downloading previous version v${{ needs.get-versions.outputs.prev_version }}"
curl -L -o sticks-old \
"https://github.com/${{ github.repository }}/releases/download/v${{ needs.get-versions.outputs.prev_version }}/sticks-linux-x86_64"
chmod +x sticks-old
if [ ! -f sticks-old ]; then
echo "โ Failed to download previous version"
exit 1
fi
ls -lh sticks-old
- name: Install previous version
run: |
echo "๐ฆ Installing previous version v${{ needs.get-versions.outputs.prev_version }}"
mkdir -p ~/.local/bin
mv sticks-old ~/.local/bin/sticks
echo "$HOME/.local/bin" >> $GITHUB_PATH
- name: Verify previous version
run: |
export PATH="$HOME/.local/bin:$PATH"
VERSION_OUTPUT=$(sticks --version)
echo "Installed version: $VERSION_OUTPUT"
if echo "$VERSION_OUTPUT" | grep -q "${{ needs.get-versions.outputs.prev_version }}"; then
echo "โ Previous version installed correctly"
else
echo "โ Version mismatch!"
exit 1
fi
- name: Test update command
run: |
export PATH="$HOME/.local/bin:$PATH"
echo "๐ Testing binary update from v${{ needs.get-versions.outputs.prev_version }} to v${{ needs.get-versions.outputs.new_version }}"
sticks update > /tmp/update.log 2>&1 || UPDATE_FAILED=1
cat /tmp/update.log
if [ "$UPDATE_FAILED" = "1" ]; then
echo "โ Update command failed (exit code non-zero)"
exit 1
fi
sleep 2
echo "โ Verifying updated version"
sticks --version
- name: Verify updated version
run: |
export PATH="$HOME/.local/bin:$PATH"
VERSION_OUTPUT=$(sticks --version)
echo "Updated version: $VERSION_OUTPUT"
if echo "$VERSION_OUTPUT" | grep -q "${{ needs.get-versions.outputs.new_version }}"; then
echo "โ
Update successful! Now running v${{ needs.get-versions.outputs.new_version }}"
else
echo "โ Update failed or version mismatch!"
echo "Expected: ${{ needs.get-versions.outputs.new_version }}"
echo "Got: $VERSION_OUTPUT"
exit 1
fi
- name: Test basic functionality after update
run: |
export PATH="$HOME/.local/bin:$PATH"
echo "๐งช Testing basic functionality"
mkdir -p /tmp/test-project
cd /tmp/test-project
echo "Creating test project..."
sticks c test_app
if [ -d "test_app" ]; then
echo "โ
Project creation works after update"
else
echo "โ Project creation failed"
exit 1
fi
update-test-summary:
name: Update Test Summary
runs-on: ubuntu-latest
needs: [get-versions, test-deb-update, test-cargo-update, test-binary-update]
if: always()
steps:
- name: Check test results
run: |
echo "## Update Test Results" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
if [ "${{ needs.test-deb-update.result }}" = "success" ]; then
echo "โ
.deb package update: PASSED" >> $GITHUB_STEP_SUMMARY
else
echo "โ .deb package update: FAILED" >> $GITHUB_STEP_SUMMARY
fi
if [ "${{ needs.test-cargo-update.result }}" = "success" ]; then
echo "โ
Cargo install update: PASSED" >> $GITHUB_STEP_SUMMARY
else
echo "โ Cargo install update: FAILED" >> $GITHUB_STEP_SUMMARY
fi
if [ "${{ needs.test-binary-update.result }}" = "success" ]; then
echo "โ
Binary update: PASSED" >> $GITHUB_STEP_SUMMARY
else
echo "โ Binary update: FAILED" >> $GITHUB_STEP_SUMMARY
fi
echo "" >> $GITHUB_STEP_SUMMARY
if [ "${{ needs.test-deb-update.result }}" = "success" ] && \
[ "${{ needs.test-cargo-update.result }}" = "success" ] && \
[ "${{ needs.test-binary-update.result }}" = "success" ]; then
echo "๐ All update tests passed successfully!" >> $GITHUB_STEP_SUMMARY
exit 0
else
echo "โ ๏ธ Some update tests failed. Please review the logs above." >> $GITHUB_STEP_SUMMARY
exit 1
fi