Skip to content

pfSense REST API v2.3.0-dev-96ab4c0 #45

pfSense REST API v2.3.0-dev-96ab4c0

pfSense REST API v2.3.0-dev-96ab4c0 #45

Workflow file for this run

name: Release
on:
release:
types: [published]
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"
- FREEBSD_VERSION: FreeBSD-15.0-CURRENT
PFSENSE_VERSION: "24.11"
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 --notests
- 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_schemas:
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 schemas from pfSense
run: |
curl -s -k -u admin:pfsense -X GET https://pfSense-${{ env.DEFAULT_PFSENSE_VERSION }}-RELEASE.jaredhendrickson.com/api/v2/schema/openapi > openapi.json
curl -s -k -u admin:pfsense -X GET https://pfSense-${{ env.DEFAULT_PFSENSE_VERSION }}-RELEASE.jaredhendrickson.com/api/v2/schema/graphql > schema.graphql
- 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
- name: Upload OpenAPI schema
uses: actions/upload-artifact@v4
with:
name: openapi.json
path: openapi.json
- name: Upload GraphQL schema
uses: actions/upload-artifact@v4
with:
name: schema.graphql
path: schema.graphql
release_docs:
needs: [build_schemas]
runs-on: ubuntu-latest
if: ${{ !github.event.release.prerelease }}
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: Download GraphQL schema
uses: actions/download-artifact@v4
with:
name: schema.graphql
path: schema.graphql
- 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: Write GraphQL schema
run: |
mkdir -p ./www/graphql-docs/
cp schema.graphql/schema.graphql ./www/graphql-docs/schema.graphql
- 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