Merge pull request #513 from jaredhendrickson13/next_patch #31
Workflow file for this run
This file contains 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: Release | |
on: | |
push: | |
tags: | |
- "v*.*.*" | |
concurrency: build | |
# Sets global environment variables for releases | |
env: | |
SWAGGER_UI_VERSION: "5.17.10" | |
PYTHON_VERSION: "3.10" | |
DEFAULT_PFSENSE_VERSION: "2.7.2" | |
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages | |
permissions: | |
contents: write | |
pages: write | |
id-token: write | |
jobs: | |
release_pkg: | |
runs-on: self-hosted | |
strategy: | |
matrix: | |
include: | |
# Note: The first item in this matrix must use env.DEFAULT_PFSENSE_VERSION as the PFSENSE_VERSION! | |
- FREEBSD_VERSION: FreeBSD-14.0-CURRENT | |
PFSENSE_VERSION: "2.7.2" | |
- FREEBSD_VERSION: FreeBSD-15.0-CURRENT | |
PFSENSE_VERSION: "24.03" | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup FreeBSD build VM | |
run: | | |
/usr/local/bin/VBoxManage controlvm ${{ matrix.FREEBSD_VERSION }} poweroff || true | |
/usr/local/bin/VBoxManage snapshot ${{ matrix.FREEBSD_VERSION }} restore initial | |
/usr/local/bin/VBoxManage startvm ${{ matrix.FREEBSD_VERSION }} --type headless | |
sleep 5 | |
- name: Build pfSense-pkg-RESTAPI on FreeBSD | |
run: | | |
/usr/bin/ssh -o StrictHostKeyChecking=no ${{ matrix.FREEBSD_VERSION }}.jaredhendrickson.com 'sudo pkill ntpd || true && sudo ntpdate pool.ntp.org || true' | |
/usr/local/bin/python3 tools/make_package.py --host ${{ matrix.FREEBSD_VERSION }}.jaredhendrickson.com --branch ${{ github.sha }} --tag ${{ github.ref_name }} --filename pfSense-${{ matrix.PFSENSE_VERSION }}-pkg-RESTAPI.pkg | |
- name: Teardown FreeBSD build VM | |
if: "${{ always() }}" | |
run: | | |
/usr/local/bin/VBoxManage controlvm ${{ matrix.FREEBSD_VERSION }} poweroff || true | |
/usr/local/bin/VBoxManage snapshot ${{matrix.FREEBSD_VERSION}} restore initial | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: pfSense-${{ matrix.PFSENSE_VERSION }}-pkg-RESTAPI.pkg | |
path: pfSense-${{ matrix.PFSENSE_VERSION }}-pkg-RESTAPI.pkg | |
- name: Release | |
uses: softprops/action-gh-release@v2 | |
with: | |
files: pfSense-${{ matrix.PFSENSE_VERSION }}-pkg-RESTAPI.pkg | |
build_openapi: | |
runs-on: self-hosted | |
needs: [release_pkg] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/download-artifact@v4 | |
with: | |
name: pfSense-${{ env.DEFAULT_PFSENSE_VERSION }}-pkg-RESTAPI.pkg | |
path: pfSense-${{ env.DEFAULT_PFSENSE_VERSION }}-pkg-RESTAPI.pkg | |
- name: Setup pfSense VM | |
run: | | |
/usr/local/bin/VBoxManage controlvm pfSense-${{ env.DEFAULT_PFSENSE_VERSION }}-RELEASE poweroff || true | |
/usr/local/bin/VBoxManage snapshot pfSense-${{ env.DEFAULT_PFSENSE_VERSION }}-RELEASE restore initial | |
/usr/local/bin/VBoxManage startvm pfSense-${{ env.DEFAULT_PFSENSE_VERSION }}-RELEASE --type headless | |
sleep 5 | |
# This is only necessary until GitHub Actions allows an easier way to get a URL to download the artifact within pfSense | |
- name: Copy pfSense-pkg-RESTAPI build to pfSense | |
run: | | |
pfsense-vshell --host pfSense-${{ env.DEFAULT_PFSENSE_VERSION }}-RELEASE.jaredhendrickson.com -u admin -p pfsense -c 'pfSsh.php playback enablesshd' -k | |
pfsense-vshell --host pfSense-${{ env.DEFAULT_PFSENSE_VERSION }}-RELEASE.jaredhendrickson.com -u admin -p pfsense -c "mkdir /root/.ssh/ && echo $(cat ~/.ssh/id_rsa.pub) > /root/.ssh/authorized_keys" -k | |
scp -o StrictHostKeyChecking=no pfSense-${{ env.DEFAULT_PFSENSE_VERSION }}-pkg-RESTAPI.pkg/pfSense-${{ env.DEFAULT_PFSENSE_VERSION }}-pkg-RESTAPI.pkg admin@pfSense-${{ env.DEFAULT_PFSENSE_VERSION }}-RELEASE.jaredhendrickson.com:/tmp/ | |
- name: Install pfSense-pkg-RESTAPI on pfSense | |
run: | | |
ssh -o StrictHostKeyChecking=no -o LogLevel=quiet admin@pfSense-${{ env.DEFAULT_PFSENSE_VERSION }}-RELEASE.jaredhendrickson.com "pkg -C /dev/null add /tmp/pfSense-${{ env.DEFAULT_PFSENSE_VERSION }}-pkg-RESTAPI.pkg" | |
sleep 5 | |
- name: Fetch OpenAPI schema from pfSense | |
run: curl -s -k -u admin:pfsense -X GET https://pfSense-${{ env.DEFAULT_PFSENSE_VERSION }}-RELEASE.jaredhendrickson.com/api/v2/schema > openapi.json | |
- name: Teardown pfSense VM | |
if: "${{ always() }}" | |
run: | | |
/usr/local/bin/VBoxManage controlvm pfSense-${{ env.DEFAULT_PFSENSE_VERSION }}-RELEASE poweroff || true | |
/usr/local/bin/VBoxManage snapshot pfSense-${{ env.DEFAULT_PFSENSE_VERSION }}-RELEASE restore initial | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: openapi.json | |
path: openapi.json | |
release_docs: | |
needs: [build_openapi] | |
runs-on: ubuntu-latest | |
environment: | |
name: github-pages | |
url: ${{ steps.deployment.outputs.page_url }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Pages | |
uses: actions/configure-pages@v5.0.0 | |
- name: Make website directory | |
run: mkdir ./www | |
- name: Setup python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.PYTHON_VERSION }} | |
- name: Build mkdocs site | |
run: | | |
python3 -m pip install -r ./requirements.txt | |
python3 -m mkdocs build | |
mv ./site/* ./www/ | |
- name: Download OpenAPI schema | |
uses: actions/download-artifact@v4 | |
with: | |
name: openapi.json | |
path: openapi.json | |
- name: Build Swagger UI | |
run: | | |
mkdir -p ./www/api-docs/ | |
wget -O /tmp/swagger.tar.gz https://github.com/swagger-api/swagger-ui/archive/refs/tags/v${{ env.SWAGGER_UI_VERSION }}.tar.gz | |
tar -xzf /tmp/swagger.tar.gz -C /tmp/ | |
cp -r /tmp/swagger-ui-${{ env.SWAGGER_UI_VERSION }}/dist/* ./www/api-docs/ | |
cp pfSense-pkg-RESTAPI/files/usr/local/www/api/swagger/index.css ./www/api-docs/index.css | |
cp openapi.json/openapi.json ./www/api-docs/openapi.json | |
echo 'window.onload = function() { | |
document.title = "pfSense REST API Documentation"; | |
window.ui = SwaggerUIBundle({ | |
url: "/api-docs/openapi.json", | |
dom_id: "#swagger-ui", | |
deepLinking: true, | |
presets: [ | |
SwaggerUIBundle.presets.apis, | |
SwaggerUIStandalonePreset | |
], | |
plugins: [ | |
SwaggerUIBundle.plugins.DownloadUrl | |
], | |
layout: "StandaloneLayout", | |
supportedSubmitMethods: [], | |
validatorUrl: null | |
}); | |
};' > ./www/api-docs/swagger-initializer.js | |
- name: Build PHP reference documentation | |
run: | | |
mkdir ./www/php-docs | |
wget https://phpdoc.org/phpDocumentor.phar | |
chmod +x phpDocumentor.phar | |
./phpDocumentor.phar | |
mv ./.phpdoc/build/* ./www/php-docs/ | |
- name: Upload artifact | |
uses: actions/upload-pages-artifact@v3.0.1 | |
with: | |
path: "./www" | |
- name: Deploy to GitHub Pages | |
id: deployment | |
uses: actions/deploy-pages@v4.0.5 |