Merge branch 'development' into 'master'

build: static website

See merge request nofusscomputing/infrastructure/website!3
This commit is contained in:
2023-12-09 15:19:12 +00:00
149 changed files with 4858 additions and 0 deletions

7
.cz.yaml Normal file
View File

@ -0,0 +1,7 @@
commitizen:
bump_message: "build(version): bump version $current_version \u2192 $new_version"
changelog_incremental: false
name: cz_conventional_commits
tag_format: $major.$minor.$patch$prerelease
update_changelog_on_bump: true
version: 1.0.0rc3

20
.gitignore vendored Normal file
View File

@ -0,0 +1,20 @@
# Ignore build Directory
build/
aux/
# ignore dev env
dev_env
__pycache__
package*json
# ignore junit
*.junit.xml
.markdownlint-cli2.jsonc
# ignore log files
*.log
#gitlab temp files
artifacts.zip
artifacts/
public/

557
.gitlab-ci.yml Normal file
View File

@ -0,0 +1,557 @@
---
variables:
MY_PROJECT_ID: "13001358"
include:
- project: nofusscomputing/projects/gitlab-ci
ref: development
file:
- .gitlab-ci_common.yaml
- template/automagic.gitlab-ci.yaml
Documentation.Lint:
rules:
- when: never
Documentation.Build:
rules:
- when: never
Website.Lint:
extends: .Lint_Markdown_Docs
variables:
MDLINT_PATHS: "pages/*.md pages/**/*.md pages/**/**/*.md pages/**/**/**/*.md pages/**/**/**/**/**/*.md #CHANGELOG.md !gitlab-ci !website-template"
Website.Build:
extends: .MKDocs_Build
needs: [ 'Website.Lint' ]
resource_group: build
Assemble.Website.Prepare:
# extends: .MKDocs_Build
stage: prepare
# image: python:3.7.5-buster
# turn mkdocs build template script section to a command template so that customizations can be added.
script:
- mkdir -p "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/source"
# - mkdir -p "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build"
- echo "fetch artifacts from child repo's"
- echo "copy static pages source to" "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/source"
- echo "copy sub-repo source to (merge)" "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/source"
- echo "mkdocs build source dir"
# - mkdir -p "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/full-site"
- mv "$CI_PROJECT_DIR/artifacts/build/Website.Build/build" "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/"
#- ls -laR $CI_PROJECT_DIR
# remove ops placeholder index.html
# Project: Operations
- echo "[DEBUG] fetch operations docs"
- 'HTTP_STATUS_FILE=$(curl --location -o /dev/null --silent --head --write-out "%{http_code}" --header "PRIVATE-TOKEN: ${GIT_COMMIT_TOKEN}" "https://gitlab.com/api/v4/projects/32419575/jobs/artifacts/development/download?job=Documentation%2EBuild")'
- echo "[DEBUG] HTTP_STATUS_FILE=$HTTP_STATUS_FILE"
- |
if [ "0$HTTP_STATUS_FILE" != "0200" ]; then
echo "[ERROR] Unable to fetch Job Artifacts due to HTTP status of $HTTP_STATUS_FILE";
# exit 1;
else
curl --location --output operations-artifacts.zip --header "PRIVATE-TOKEN: ${GIT_COMMIT_TOKEN}" "https://gitlab.com/api/v4/projects/32419575/jobs/artifacts/development/download?job=Documentation%2EBuild";
unzip operations-artifacts.zip;
rm -Rf "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/operations/index.html";
cp -rvf "$CI_PROJECT_DIR/artifacts/build/Documentation.Build/build/operations" "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/";
rm -Rf "$CI_PROJECT_DIR/artifacts/build/Documentation.Build";
fi
# Project: Gitlab-CI
- echo "[DEBUG] fetch gitlab-ci project docs"
- 'HTTP_STATUS_FILE=$(curl --location -o /dev/null --silent --head --write-out "%{http_code}" --header "PRIVATE-TOKEN: ${GIT_COMMIT_TOKEN}" "https://gitlab.com/api/v4/projects/28543717/jobs/artifacts/development/download?job=Documentation%2EBuild")'
- echo "[DEBUG] HTTP_STATUS_FILE=$HTTP_STATUS_FILE"
- |
if [ "0$HTTP_STATUS_FILE" != "0200" ]; then
echo "[ERROR] Unable to fetch Job Artifacts due to HTTP status of $HTTP_STATUS_FILE";
# exit 1;
else
curl --location --output gitlab-ci-artifacts.zip --header "PRIVATE-TOKEN: ${GIT_COMMIT_TOKEN}" "https://gitlab.com/api/v4/projects/28543717/jobs/artifacts/development/download?job=Documentation%2EBuild";
unzip gitlab-ci-artifacts.zip;
rm -Rf "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/projects/gitlab-ci";
cp -rvf "$CI_PROJECT_DIR/artifacts/build/Documentation.Build/build/projects/gitlab-ci" "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/projects/gitlab-ci/";
rm -Rf "$CI_PROJECT_DIR/artifacts/build/Documentation.Build";
fi
# Project: ansible role, git_configuration
- echo "[DEBUG] fetch git_configuration project docs"
- 'HTTP_STATUS_FILE=$(curl --location -o /dev/null --silent --head --write-out "%{http_code}" --header "PRIVATE-TOKEN: ${GIT_COMMIT_TOKEN}" "https://gitlab.com/api/v4/projects/45705596/jobs/artifacts/development/download?job=Documentation%2EBuild")'
- echo "[DEBUG] HTTP_STATUS_FILE=$HTTP_STATUS_FILE"
- |
if [ "0$HTTP_STATUS_FILE" != "0200" ]; then
echo "[ERROR] Unable to fetch Job Artifacts due to HTTP status of $HTTP_STATUS_FILE";
# exit 1;
else
curl --location --output git_configuration-artifacts.zip --header "PRIVATE-TOKEN: ${GIT_COMMIT_TOKEN}" "https://gitlab.com/api/v4/projects/45705596/jobs/artifacts/development/download?job=Documentation%2EBuild";
unzip git_configuration-artifacts.zip;
rm -Rf "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/projects/git_configuration";
cp -rvf "$CI_PROJECT_DIR/artifacts/build/Documentation.Build/build/projects/git_configuration" "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/projects/git_configuration/";
rm -Rf "$CI_PROJECT_DIR/artifacts/build/Documentation.Build";
fi
# Project: Docker Mail Server
- echo "[DEBUG] fetch docker-mail project docs"
- 'HTTP_STATUS_FILE=$(curl --location -o /dev/null --silent --head --write-out "%{http_code}" --header "PRIVATE-TOKEN: ${GIT_COMMIT_TOKEN}" "https://gitlab.com/api/v4/projects/33611657/jobs/artifacts/development/download?job=Documentation%2EBuild")'
- echo "[DEBUG] HTTP_STATUS_FILE=$HTTP_STATUS_FILE"
- |
if [ "0$HTTP_STATUS_FILE" != "0200" ]; then
echo "[ERROR] Unable to fetch Job Artifacts due to HTTP status of $HTTP_STATUS_FILE";
# exit 1;
else
curl --location --output docker-mail-artifacts.zip --header "PRIVATE-TOKEN: ${GIT_COMMIT_TOKEN}" "https://gitlab.com/api/v4/projects/33611657/jobs/artifacts/development/download?job=Documentation%2EBuild";
unzip docker-mail-artifacts.zip;
rm -Rf "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/projects/docker-mail";
cp -rvf "$CI_PROJECT_DIR/artifacts/build/Documentation.Build/build/projects/docker-mail" "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/projects/docker-mail/";
rm -Rf "$CI_PROJECT_DIR/artifacts/build/Documentation.Build";
fi
# Project: Ansible Execution Environment
- echo "[DEBUG] fetch execution_environment project docs"
- 'HTTP_STATUS_FILE=$(curl --location -o /dev/null --silent --head --write-out "%{http_code}" --header "PRIVATE-TOKEN: ${GIT_COMMIT_TOKEN}" "https://gitlab.com/api/v4/projects/45741845/jobs/artifacts/development/download?job=Documentation%2EBuild")'
- echo "[DEBUG] HTTP_STATUS_FILE=$HTTP_STATUS_FILE"
- |
if [ "0$HTTP_STATUS_FILE" != "0200" ]; then
echo "[ERROR] Unable to fetch Job Artifacts due to HTTP status of $HTTP_STATUS_FILE";
# exit 1;
else
curl --location --output execution_environment-artifacts.zip --header "PRIVATE-TOKEN: ${GIT_COMMIT_TOKEN}" "https://gitlab.com/api/v4/projects/45741845/jobs/artifacts/development/download?job=Documentation%2EBuild";
unzip execution_environment-artifacts.zip;
rm -Rf "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/projects/execution_environment";
cp -rvf "$CI_PROJECT_DIR/artifacts/build/Documentation.Build/build/projects/execution_environment" "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/projects/execution_environment/";
rm -Rf "$CI_PROJECT_DIR/artifacts/build/Documentation.Build";
fi
# Project: NodeRED LDAP Self Service
- echo "[DEBUG] fetch nodered_ldap_self_service project docs"
- 'HTTP_STATUS_FILE=$(curl --location -o /dev/null --silent --head --write-out "%{http_code}" --header "PRIVATE-TOKEN: ${GIT_COMMIT_TOKEN}" "https://gitlab.com/api/v4/projects/48321671/jobs/artifacts/development/download?job=Documentation%2EBuild")'
- echo "[DEBUG] HTTP_STATUS_FILE=$HTTP_STATUS_FILE"
- |
if [ "0$HTTP_STATUS_FILE" != "0200" ]; then
echo "[ERROR] Unable to fetch Job Artifacts due to HTTP status of $HTTP_STATUS_FILE";
# exit 1;
else
curl --location --output nodered_ldap_self_service-artifacts.zip --header "PRIVATE-TOKEN: ${GIT_COMMIT_TOKEN}" "https://gitlab.com/api/v4/projects/48321671/jobs/artifacts/development/download?job=Documentation%2EBuild";
unzip nodered_ldap_self_service-artifacts.zip;
rm -Rf "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/projects/ldap_self_service";
cp -rvf "$CI_PROJECT_DIR/artifacts/build/Documentation.Build/build/projects/ldap_self_service" "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/projects/ldap_self_service/";
rm -Rf "$CI_PROJECT_DIR/artifacts/build/Documentation.Build";
fi
# Project: docker GLPI
- echo "[DEBUG] fetch docker-glpi project docs"
- 'HTTP_STATUS_FILE=$(curl --location -o /dev/null --silent --head --write-out "%{http_code}" --header "PRIVATE-TOKEN: ${GIT_COMMIT_TOKEN}" "https://gitlab.com/api/v4/projects/12928828/jobs/artifacts/development/download?job=Documentation%2EBuild")'
- echo "[DEBUG] HTTP_STATUS_FILE=$HTTP_STATUS_FILE"
- |
if [ "0$HTTP_STATUS_FILE" != "0200" ]; then
echo "[ERROR] Unable to fetch Job Artifacts due to HTTP status of $HTTP_STATUS_FILE";
# exit 1;
else
curl --location --output docker-glpi-artifacts.zip --header "PRIVATE-TOKEN: ${GIT_COMMIT_TOKEN}" "https://gitlab.com/api/v4/projects/12928828/jobs/artifacts/development/download?job=Documentation%2EBuild";
unzip docker-glpi-artifacts.zip;
rm -Rf "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/projects/glpi";
cp -rvf "$CI_PROJECT_DIR/artifacts/build/Documentation.Build/build/projects/glpi" "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/projects/glpi/";
rm -Rf "$CI_PROJECT_DIR/artifacts/build/Documentation.Build";
fi
# Project: kubernetes monitoring helm chart
- echo "[DEBUG] fetch kubernetes_monitoring project docs"
- 'HTTP_STATUS_FILE=$(curl --location -o /dev/null --silent --head --write-out "%{http_code}" --header "PRIVATE-TOKEN: ${GIT_COMMIT_TOKEN}" "https://gitlab.com/api/v4/projects/50510268/jobs/artifacts/development/download?job=Documentation%2EBuild")'
- echo "[DEBUG] HTTP_STATUS_FILE=$HTTP_STATUS_FILE"
- |
if [ "0$HTTP_STATUS_FILE" != "0200" ]; then
echo "[ERROR] Unable to fetch Job Artifacts due to HTTP status of $HTTP_STATUS_FILE";
# exit 1;
else
curl --location --output kubernetes_monitoring.zip --header "PRIVATE-TOKEN: ${GIT_COMMIT_TOKEN}" "https://gitlab.com/api/v4/projects/50510268/jobs/artifacts/development/download?job=Documentation%2EBuild";
unzip kubernetes_monitoring.zip;
rm -Rf "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/projects/kubernetes_monitoring";
cp -rvf "$CI_PROJECT_DIR/artifacts/build/Documentation.Build/build/projects/kubernetes_monitoring" "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/projects/kubernetes_monitoring/";
rm -Rf "$CI_PROJECT_DIR/artifacts/build/Documentation.Build";
fi
# Project: Ansible Public Playbooks
- echo "[DEBUG] fetch Ansible Public Playbooks project docs"
- 'HTTP_STATUS_FILE=$(curl --location -o /dev/null --silent --head --write-out "%{http_code}" --header "PRIVATE-TOKEN: ${GIT_COMMIT_TOKEN}" "https://gitlab.com/api/v4/projects/46364551/jobs/artifacts/development/download?job=Documentation%2EBuild")'
- echo "[DEBUG] HTTP_STATUS_FILE=$HTTP_STATUS_FILE"
- |
if [ "0$HTTP_STATUS_FILE" != "0200" ]; then
echo "[ERROR] Unable to fetch Job Artifacts due to HTTP status of $HTTP_STATUS_FILE";
# exit 1;
else
curl --location --output ansible_playbooks.zip --header "PRIVATE-TOKEN: ${GIT_COMMIT_TOKEN}" "https://gitlab.com/api/v4/projects/46364551/jobs/artifacts/development/download?job=Documentation%2EBuild";
unzip ansible_playbooks.zip;
rm -Rf "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/projects/ansible/playbooks";
cp -rvf "$CI_PROJECT_DIR/artifacts/build/Documentation.Build/build/projects/ansible/playbooks" "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/projects/ansible/playbooks/";
rm -Rf "$CI_PROJECT_DIR/artifacts/build/Documentation.Build";
fi
# Project: Ansible role common
- echo "[DEBUG] fetch Ansible common project docs"
- 'HTTP_STATUS_FILE=$(curl --location -o /dev/null --silent --head --write-out "%{http_code}" --header "PRIVATE-TOKEN: ${GIT_COMMIT_TOKEN}" "https://gitlab.com/api/v4/projects/52226103/jobs/artifacts/development/download?job=Documentation%2EBuild")'
- echo "[DEBUG] HTTP_STATUS_FILE=$HTTP_STATUS_FILE"
- |
if [ "0$HTTP_STATUS_FILE" != "0200" ]; then
echo "[ERROR] Unable to fetch Job Artifacts due to HTTP status of $HTTP_STATUS_FILE";
# exit 1;
else
curl --location --output nfc_common.zip --header "PRIVATE-TOKEN: ${GIT_COMMIT_TOKEN}" "https://gitlab.com/api/v4/projects/52226103/jobs/artifacts/development/download?job=Documentation%2EBuild";
unzip nfc_common.zip;
rm -Rf "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/projects/ansible/roles/common";
cp -rvf "$CI_PROJECT_DIR/artifacts/build/Documentation.Build/build/projects/ansible/roles/common" "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/projects/ansible/roles/common/";
rm -Rf "$CI_PROJECT_DIR/artifacts/build/Documentation.Build";
fi
# Project: Ansible role firewall
- echo "[DEBUG] fetch Ansible firewall project docs"
- 'HTTP_STATUS_FILE=$(curl --location -o /dev/null --silent --head --write-out "%{http_code}" --header "PRIVATE-TOKEN: ${GIT_COMMIT_TOKEN}" "https://gitlab.com/api/v4/projects/51640016/jobs/artifacts/development/download?job=Documentation%2EBuild")'
- echo "[DEBUG] HTTP_STATUS_FILE=$HTTP_STATUS_FILE"
- |
if [ "0$HTTP_STATUS_FILE" != "0200" ]; then
echo "[ERROR] Unable to fetch Job Artifacts due to HTTP status of $HTTP_STATUS_FILE";
# exit 1;
else
curl --location --output nfc_firewall.zip --header "PRIVATE-TOKEN: ${GIT_COMMIT_TOKEN}" "https://gitlab.com/api/v4/projects/51640016/jobs/artifacts/development/download?job=Documentation%2EBuild";
unzip nfc_firewall.zip;
rm -Rf "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/projects/ansible/roles/firewall";
cp -rvf "$CI_PROJECT_DIR/artifacts/build/Documentation.Build/build/projects/ansible/roles/firewall" "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/projects/ansible/roles/firewall/";
rm -Rf "$CI_PROJECT_DIR/artifacts/build/Documentation.Build";
fi
# Project: Ansible role homeassistant
- echo "[DEBUG] fetch Ansible Public homeassistant project docs"
- 'HTTP_STATUS_FILE=$(curl --location -o /dev/null --silent --head --write-out "%{http_code}" --header "PRIVATE-TOKEN: ${GIT_COMMIT_TOKEN}" "https://gitlab.com/api/v4/projects/51020674/jobs/artifacts/development/download?job=Documentation%2EBuild")'
- echo "[DEBUG] HTTP_STATUS_FILE=$HTTP_STATUS_FILE"
- |
if [ "0$HTTP_STATUS_FILE" != "0200" ]; then
echo "[ERROR] Unable to fetch Job Artifacts due to HTTP status of $HTTP_STATUS_FILE";
# exit 1;
else
curl --location --output nfc_homeassistant.zip --header "PRIVATE-TOKEN: ${GIT_COMMIT_TOKEN}" "https://gitlab.com/api/v4/projects/51020674/jobs/artifacts/development/download?job=Documentation%2EBuild";
unzip nfc_homeassistant.zip;
rm -Rf "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/projects/ansible/roles/homeassistant";
cp -rvf "$CI_PROJECT_DIR/artifacts/build/Documentation.Build/build/projects/ansible/roles/homeassistant" "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/projects/ansible/roles/homeassistant/";
rm -Rf "$CI_PROJECT_DIR/artifacts/build/Documentation.Build";
fi
# Project: Ansible role kubernetes
- echo "[DEBUG] fetch Ansible kubernetes project docs"
- 'HTTP_STATUS_FILE=$(curl --location -o /dev/null --silent --head --write-out "%{http_code}" --header "PRIVATE-TOKEN: ${GIT_COMMIT_TOKEN}" "https://gitlab.com/api/v4/projects/51640029/jobs/artifacts/development/download?job=Documentation%2EBuild")'
- echo "[DEBUG] HTTP_STATUS_FILE=$HTTP_STATUS_FILE"
- |
if [ "0$HTTP_STATUS_FILE" != "0200" ]; then
echo "[ERROR] Unable to fetch Job Artifacts due to HTTP status of $HTTP_STATUS_FILE";
# exit 1;
else
curl --location --output nfc_kubernetes.zip --header "PRIVATE-TOKEN: ${GIT_COMMIT_TOKEN}" "https://gitlab.com/api/v4/projects/51640029/jobs/artifacts/development/download?job=Documentation%2EBuild";
unzip nfc_kubernetes.zip;
rm -Rf "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/projects/ansible/roles/kubernetes";
cp -rvf "$CI_PROJECT_DIR/artifacts/build/Documentation.Build/build/projects/ansible/roles/kubernetes" "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/projects/ansible/roles/kubernetes/";
rm -Rf "$CI_PROJECT_DIR/artifacts/build/Documentation.Build";
fi
# # below 2 lines commented out as need to ffigure out how to download artifacts.
# - rm -Rf "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/operations/index.html"
# - echo "cp -rvn" "$CI_PROJECT_DIR/artifacts/build/Website.Build/build/operations" "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/"
# # copy ops pages into main site, not overwriting
# #- cp -rvn "$CI_PROJECT_DIR/artifacts/build/Static Pages/build/"* "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/"
# # below line commented out as need to ffigure out how to download artifacts.
# - cp -rvf "$CI_PROJECT_DIR/artifacts/build/Website.Build/build/operations" "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/"
- echo "copy prepare files (sitemap, search file) to fullsite (overwrite)"
- echo "copy each sub-repo build to fullsite (merge)"
# - echo mv "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/full-site" public
needs:
- 'Website.Build'
# only available in gitlab premium
# use: - "curl -O --header 'PRIVATE-TOKEN: ${GITLAB_API_TOKEN}' https://gitlab.example.com/api/v4/projects/${PROJECT_A_ID}/jobs/${REMOTE_JOB_ID}/artifacts/${REMOTE_FILENAME}"
# - project: nofusscomputing/ops
# job: Static Pages
# ref: development
# artifacts: true
artifacts:
expire_in: 24 hrs
when: always
paths:
- "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/*"
resource_group: build
rules:
# - if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != "master" && $CI_PIPELINE_SOURCE == "push"'
# when: always
# Build docs on tag so they can be downloaded from the tag job and are always available.
- if: # condition_git_tag
$CI_COMMIT_TAG != null &&
$CI_COMMIT_BRANCH == null
exists:
- '{docs/**,pages/**}/*.md'
when: always
- if: # condition_master_branch_push
$CI_COMMIT_BRANCH == "master" &&
$CI_PIPELINE_SOURCE == "push"
exists:
- '{docs/**,pages/**}/*.md'
when: always
- if: # condition_dev_branch_push
$CI_COMMIT_BRANCH == "development" &&
(
$CI_PIPELINE_SOURCE == "pipeline"
||
$CI_PIPELINE_SOURCE == "push"
||
$CI_PIPELINE_SOURCE == "schedule"
)
# See nofusscomputing/projects/gitlab-ci#34 for extra $CI_PIPELINE_SOURCE
exists:
- '{docs/**,pages/**}/*.md'
# No changes check # See nofusscomputing/projects/gitlab-ci#34
# changes:
# paths:
# - '{docs/**,pages/**}/*.md'
# compare_to: 'master'
when: always
- if: # condition_not_master_or_dev_push
$CI_COMMIT_BRANCH != "master" &&
$CI_COMMIT_BRANCH != "development" &&
$CI_PIPELINE_SOURCE == "push"
exists:
- '{docs/**,pages/**}/*.md'
changes:
paths:
- '{docs/**,pages/**}/*.md'
compare_to: 'development'
when: always
- when: never
pages:
stage: deploy
variables:
GIT_STRATEGY: none
script:
- mv "$CI_PROJECT_DIR/artifacts/prepare/Assemble.Website.Prepare/build" public
needs: [ 'Assemble.Website.Prepare' ]
environment:
name: staging
url: $CI_PAGES_URL
artifacts:
paths:
- public
rules:
# - if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != "master" && $CI_PIPELINE_SOURCE == "push"'
# when: on_success
# Build docs on tag so they can be downloaded from the tag job and are always available.
- if: # condition_git_tag
$CI_COMMIT_TAG != null &&
$CI_COMMIT_BRANCH == null
exists:
- '{docs/**,pages/**}/*.md'
when: always
- if: # condition_master_branch_push
$CI_COMMIT_BRANCH == "master" &&
$CI_PIPELINE_SOURCE == "push"
exists:
- '{docs/**,pages/**}/*.md'
when: always
- if: # condition_dev_branch_push
$CI_COMMIT_BRANCH == "development" &&
(
$CI_PIPELINE_SOURCE == "pipeline"
||
$CI_PIPELINE_SOURCE == "push"
||
$CI_PIPELINE_SOURCE == "schedule"
)
# See nofusscomputing/projects/gitlab-ci#34 for extra $CI_PIPELINE_SOURCE
exists:
- '{docs/**,pages/**}/*.md'
# No changes check # See nofusscomputing/projects/gitlab-ci#34
# changes:
# paths:
# - '{docs/**,pages/**}/*.md'
# compare_to: 'master'
when: always
- if: # condition_not_master_or_dev_push
$CI_COMMIT_BRANCH != "master" &&
$CI_COMMIT_BRANCH != "development" &&
$CI_PIPELINE_SOURCE == "push"
exists:
- '{docs/**,pages/**}/*.md'
changes:
paths:
- '{docs/**,pages/**}/*.md'
compare_to: 'development'
when: always
- when: never
.Pytest_template:
stage: test
image: ubuntu:18.04
before_script:
- mkdir -p "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME"
- mkdir -p "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/tests"
- apt update
- apt install -y python3 python3-pip ca-certificates
- apt install --no-install-recommends -y chromium-chromedriver
- pip3 install --upgrade pip
- pip3 install -r test/requirements.txt
artifacts:
expire_in: 24 hrs
when: always
paths:
- "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/*"
reports:
junit:
- "*.junit.xml"
rules:
# - if: '$CI_COMMIT_BRANCH && $CI_PIPELINE_SOURCE == "push"'
# when: on_success
# Build docs on tag so they can be downloaded from the tag job and are always available.
- if: # condition_git_tag
$CI_COMMIT_TAG != null &&
$CI_COMMIT_BRANCH == null
exists:
- '{docs/**,pages/**}/*.md'
when: on_success
- if: # condition_master_branch_push
$CI_COMMIT_BRANCH == "master" &&
$CI_PIPELINE_SOURCE == "push"
exists:
- '{docs/**,pages/**}/*.md'
when: on_success
- if: # condition_dev_branch_push
$CI_COMMIT_BRANCH == "development" &&
(
$CI_PIPELINE_SOURCE == "pipeline"
||
$CI_PIPELINE_SOURCE == "push"
||
$CI_PIPELINE_SOURCE == "schedule"
)
# See nofusscomputing/projects/gitlab-ci#34 for extra $CI_PIPELINE_SOURCE
exists:
- '{docs/**,pages/**}/*.md'
# No changes check # See nofusscomputing/projects/gitlab-ci#34
# changes:
# paths:
# - '{docs/**,pages/**}/*.md'
# compare_to: 'master'
when: on_success
- if: # condition_not_master_or_dev_push
$CI_COMMIT_BRANCH != "master" &&
$CI_COMMIT_BRANCH != "development" &&
$CI_PIPELINE_SOURCE == "push"
exists:
- '{docs/**,pages/**}/*.md'
changes:
paths:
- '{docs/**,pages/**}/*.md'
compare_to: 'development'
when: on_success
- when: never
Unit Tests:
extends: .Pytest_template
needs: [ 'Website.Build' ]
script:
- mv "$CI_PROJECT_DIR/artifacts/build/Website.Build/build" build
- pytest --verbose --junitxml=unit_test.junit.xml --tb=line test/unit
- cp *.junit.xml "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/"
- echo "[DEBUG] python_exit[$python_exit]"
#Integration Tests:
# extends: .Pytest_template
# needs:
# - pages
# - 'Unit Tests'
# script:
# - echo "placeholder job for integration tests" > "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/DETEMEME.txt"
public_website:
stage: publish
image: alpine
variables:
GIT_STRATEGY: none
before_script:
- ls -la /html
script:
- rm -rf /html/*
- cp -r "$CI_PROJECT_DIR/artifacts/prepare/Assemble.Website.Prepare/build"/* /html/
- ls -laR /html/
needs: [ 'Assemble.Website.Prepare', 'Unit Tests']
resource_group: production
environment:
name: production
url: https://nofusscomputing.com
artifacts:
paths:
- public
rules:
- if: # condition_master_branch_push
$CI_COMMIT_BRANCH == "master" &&
$CI_PIPELINE_SOURCE == "push"
exists:
- '{docs/**,pages/**}/*.md'
when: on_success
- if: # condition_dev_branch_push
$CI_COMMIT_BRANCH == "development" &&
(
$CI_PIPELINE_SOURCE == "pipeline"
||
$CI_PIPELINE_SOURCE == "push"
||
$CI_PIPELINE_SOURCE == "schedule"
)
# See nofusscomputing/projects/gitlab-ci#34 for extra $CI_PIPELINE_SOURCE
exists:
- '{docs/**,pages/**}/*.md'
# No changes check # See nofusscomputing/projects/gitlab-ci#34
# changes:
# paths:
# - '{docs/**,pages/**}/*.md'
# compare_to: 'master'
allow_failure: true
when: manual
- when: never
tags:
- production
- website

View File

@ -0,0 +1,5 @@
What is the Page URL? <!-- Place the url after this text -->
### :books: Summary
<!-- Please put a detailed summary of what you wish to report under this heading. including any suggestions you would like to make. -->

View File

@ -0,0 +1,27 @@
### :memo: Summary
### :link: Links / References
- LinksOrReferencesListed
#### :construction_worker: Tasks
- Required Metadata
- [ ] meta.title
- [ ] meta.description
- [ ] meta.date _format YYYY-MM-DD_
- [ ] meta.tags
``` yaml
tags:
- tagname1
- tagname2
```
/target_branch development

8
.gitmodules vendored Normal file
View File

@ -0,0 +1,8 @@
[submodule "gitlab-ci"]
path = gitlab-ci
url = https://gitlab.com/nofusscomputing/projects/gitlab-ci.git
branch = development
[submodule "website-template"]
path = website-template
url = https://gitlab.com/nofusscomputing/infrastructure/website-template.git
branch = development

8
.nfc_automation.yaml Normal file
View File

@ -0,0 +1,8 @@
---
role_git_conf:
gitlab:
submodule_branch: "development"
default_branch: development
mr_labels: ~"type::automation" ~"impact::0" ~"priority::0"
auto_merge: true

8
.vscode/extensions.json vendored Normal file
View File

@ -0,0 +1,8 @@
{
"recommendations": [
"gitlab.gitlab-workflow",
"ms-python.python",
"njpwerner.autodocstring",
"davidanson.vscode-markdownlint"
]
}

8
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,8 @@
{
"python.pythonPath": "dev_env/bin/python",
"python.testing.pytestArgs": [
"--verbose", "--junit-xml=${workspaceFolder}/unit_test.junit.xml", "--tb=line", "test"
],
"python.testing.unittestEnabled": false,
"python.testing.pytestEnabled": true
}

22
.vscode/tasks.json vendored Normal file
View File

@ -0,0 +1,22 @@
{
"version": "2.0.0",
"command": "bash",
"showOutput": "always",
"args": [
"-c"
],
"tasks": [
{
"suppressTaskName": true,
"args": [
"cd ${workspaceFolder}; . dev_env/bin/activate; pip install -r gitlab-ci/mkdocs/requirements.txt; pip install -r requirements.txt; mkdocs build --clean"
],
"problemMatcher": [],
"label": "MKDocs Build Static Site",
"group": {
"kind": "build",
"isDefault": true
}
}
]
}

173
CHANGELOG.md Normal file
View File

@ -0,0 +1,173 @@
## 1.0.0rc3 (2023-05-31)
### Bug Fixes
- **ci**: [c40dc037](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/c40dc037b3b7e0e0be97e9421c7c0097c8c494fe) - website.lint paths updated [ [!13](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/13) ]
### Continious Integration
- **chore**: [aec1b98e](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/aec1b98e9a6f466d18981f84902964446ba50b88) - add nfc automation config [ [!12](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/12) ]
## 1.0.0rc2 (2023-05-29)
### Bug Fixes
- **cz**: [32ec703d](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/32ec703d720c3230728cd220fe76f0efacbc5c05) - remove 'v' suffix from tag [ [!10](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/10) [#10](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/10) ]
- **unit_test**: [b5268e18](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/b5268e18638499fa14c61066ab11e44ea346deb8) - ignore gitlab ide links for alive checks [ [!9](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/9) ]
- **ci**: [6ed8e5ba](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/6ed8e5bae3159ad9575f8c630bf34cf2f42214b1) - only deploy when assemble site success [ [!9](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/9) ]
- **assemble_site**: [46f8585c](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/46f8585cc3fa1ca8cbe60762bb8f476fcb31554a) - remove downloaded artifacts [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) ]
- **ci**: [90a22fcc](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/90a22fcc515383d1031fb6bba95327ba3d24e1c8) - url encode artifact path for assemble [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) ]
- **build**: [8cde3310](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/8cde331079e9701962879c0d78e60bcd05938543) - use correct gitlab-ci index page [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) [!26](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/26) ]
- **ci**: [b0fbe31c](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/b0fbe31cbe0d0a4057c3ebc53d1c25bcdbfe96d7) - typo in includes [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) ]
- [eb32851d](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/eb32851d32e7e4136c114616b15a11303ec78d81) - use relative path [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) ]
- [f1eb1a8c](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/f1eb1a8cba32d6378dd68d81e21e93e5ab740007) - set ssh user [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) ]
- [4b28e8aa](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/4b28e8aa64d2be6e62cf8b88bb48953a987e05bb) - typo [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) ]
- **artifacts**: [2551d764](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/2551d764d87b63248a46be1a68c4a4c193d03fe6) - fix fetching ops artifacts and allow publish [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) ]
- **ssh**: [f75cf83e](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/f75cf83e9a819694db54fd1f384fbaddaaadfd4c) - ssh key set to file var [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) ]
- **ci**: [ad671405](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/ad67140571f41eb2e01b3b7de44602401e8fc5ac) - fix pages job to run [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) ]
- **website-template**: [d0121f60](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/d0121f60bae36cb1bd685d9ed393dfef3fb1acac) - update module to fixed template commit [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) [!2](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/2) ]
- **vscode**: [0c3a878c](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/0c3a878cfa35bd43cd381e89b54785b95f40d1ee) - don't force mkdocs strict [ [!7](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/7) ]
- **mobile_display**: [3e1e8886](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/3e1e8886efd50d948d4b66434063c08d6b0228d3) - added padding between sections [ [!6](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/6) ]
- **article**: [d0719e35](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/d0719e356d4e56db8d2b4c6191484326c9701a03) - add required metadata. [ [!6](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/6) ]
### Code Refactor
- **assemble_site**: [5549fa8f](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/5549fa8f37f6c060dd26de446c8e56d460c71093) - use new job name [ [!11](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/11) [!34](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/34) ]
- **ci**: [546bc11a](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/546bc11ad23e410ccc2e073d3288d0c1f875cc2c) - use new build job name `Website.Build` [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) [!25](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/25) [!11](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/11) ]
- [2eef305f](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/2eef305f0e9ffe2ededb3e19c7ce5a99238103ed) - ad copy holder to article [ [!7](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/7) ]
- [c2fe3bb7](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/c2fe3bb7f051a67c47f555c6039d421761cdadd0) - clear up MD linting errors [ [!7](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/7) ]
- **blog_post**: [67b9379f](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/67b9379fe7eed288d00d8451678d338f2ad2a835) - renamed to article to reflect direction [ [!7](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/7) ]
- **home_page**: [8b50d28a](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/8b50d28aabdb1361036c137329695c29edf04f62) - added nfc logo [ [!7](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/7) ]
- **gitlab_templates**: [59999e09](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/59999e09e37450faee13387f0cc1154d8a9ee1c5) - changed to use correct path [ [!6](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/6) ]
### Continious Integration
- **automagic**: [7574bb4b](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/7574bb4b89fac79310fdfe21ef79e17af9dbf1f1) - use gitlab-ci project template [ [!11](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/11) [#30](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/30) [#11](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/11) ]
- [a290aa79](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/a290aa79ba0a0681182f05a21dda0344af50718d) - fix path
- [016f566d](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/016f566dbf2fb2474c31fc7edae3c6c8818d218f) - debugging [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) ]
- [29eee4b0](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/29eee4b0c481164c6522e943c1268964a4957a73) - fix scp command [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) ]
- **publish**: [b63e55db](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/b63e55db0ff81ec66b7fecade358e0430947a550) - fix path [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) ]
- [4ed51277](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/4ed51277a2f9bfdb2c3077e0afc9e72b06274964) - now???? [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) ]
- [84385dc3](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/84385dc3898d34ecb9e66f8bd5339d751f1b2901) - for fucks sake [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) ]
- [92fb084c](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/92fb084ca6cf2d4d87ea92df9a43f34ae3b80188) - fix file [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) ]
- **publish**: [37b15f90](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/37b15f90d2b8d67b75034c73a4c6a1ea015553c7) - fix ssh must be installed to deploy [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) ]
- [e36d1387](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/e36d1387b64d5c705a5f53cc351cfdfde43b669f) - removed cross-repo build see change notes [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) ]
- **gitlab-ci**: [a816041c](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/a816041cffc8f64deec087bfe354faf12cbc0260) - updated to latest dev [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) ]
- **public_website**: [47ae7aa9](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/47ae7aa9e1ace97ee0083229faaa5a509823ed49) - only enable manual publish on dev branch [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) ]
- **publish**: [53d5d3ff](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/53d5d3ff62e3dd70a450803c93087d6018fa835e) - add placeholder publish job [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) [#3](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/3) ]
- **pages**: [71d10e1d](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/71d10e1d79e2802c43de23f9a4b93db6c307b42f) - use the sub-pages repo for pages [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) [#3](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/3) ]
- **sub-repo-pages**: [272da7e7](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/272da7e77655eedadcd0d0737ddf20da2672d95d) - add placeholder sub-pages job [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) [#3](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/3) ]
- [f5b317bc](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/f5b317bcada125f696101b565fb94f39ce110185) - add prepare stage [ [#3](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/3) [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) ]
- **markdown_lint**: [228b5780](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/228b57804efcdcbbffca5cf99a8da2d5f02ba44f) - updated for mkdocs md files clarity. [ [!7](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/7) ]
- **gitlab-ci**: [927a97c9](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/927a97c9136aef1aa6f0524a473fea7171df409b) - updated to new commit for markdown lint to work [ [!7](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/7) ]
### Features
- **ci**: [bbf08468](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/bbf084686176451db843947fb818ae9e374dad50) - assemble job now does check for sub-site dependencies [ [!11](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/11) ]
- **ci**: [266eff37](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/266eff376668a2bf5f5fcf7926dcd7b38e476179) - use automagic gitlab-ci template [ [!10](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/10) [!33](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/33) [#11](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/11) ]
- **ci**: [a86b4bef](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/a86b4befcc7696a00575fe8303934b5c6cd4abf8) - enable publishing docker-mail docs [ [!9](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/9) [!10](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/10) [!27](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/27) ]
- **website**: [fe6b84cf](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/fe6b84cf28f845162714569749a2ef82b95647ea) - enable edit button [ [!9](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/9) ]
- **ci**: [fc74464e](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/fc74464ea852b9b71ceb9f11ec8cfc243d667d7c) - add resource groups to prevent dup jobs [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) ]
- **publish**: [1dffe52c](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/1dffe52c7a7ceb2930a7533108e44447f67ad2ae) - on publish website on success [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) ]
- **build**: [189e7cd6](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/189e7cd64557471d0609dd59c95edbf14771444c) - include project gitlab-ci docs [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) [!26](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/26) ]
- **requirements.txt**: [0ec5cdc9](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/0ec5cdc9a33b7083e51e172b3402a9808279aa19) - removed as part of template [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) [!26](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/26) [!7](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/7) ]
- **md_lint_config**: [e0de8665](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/e0de8665fe18003a504dd1ecc3e045ecc5844cd3) - moved to website-template repo [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) ]
- **publish**: [0c539a23](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/0c539a23c3dcd22bef702915aa70974dbf04eb0b) - clean remote dir first anduse correct source [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) ]
- **operations**: [20392be0](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/20392be05a30f4bc9496237c0a3f71689f433f8e) - Pull Operations website pages job artifacts. [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) [#41](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/41) ]
- **website_template**: [70f0facb](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/70f0facb118a9e54bcf20648f69c73469483cf56) - Added website template as submodule [ [!8](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/8) [!2](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/2) ]
- **mkdocs**: [054b38a4](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/054b38a4a7b62e54b582d50be64bfd25f467516b) - enabled tabbed content [ [!7](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/7) ]
- **wiki**: [765bae0e](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/765bae0e0750f46b7a82fd2ff57cd75571c188b6) - remove wiki as it wont be used. [ [!7](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/7) ]
- **article**: [3ef36f49](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/3ef36f49e82e1fcff6e49b25ac9dacc9f564a1ac) - added microdata to the article. [ [!7](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/7) ]
- **article**: [b9529fea](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/b9529feaba842ed76212b945730ac574ddcf60c8) - articles must have a type [ [!7](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/7) ]
- **markdown_lint**: [c19d097b](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/c19d097b28123692610bf29857cdf1f9c4170985) - allow html p in markdown [ [!7](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/7) ]
- **vscode**: [bbb63963](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/bbb639634b166b4f36a771c13bff430d38b6953b) - extension recommendations added. [ [!7](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/7) ]
- **article**: [466f6e86](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/466f6e8632c8392cae26f4ba0871c5fff4f2f0d6) - migrate mdt setup article [ [!6](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/6) ]
- **home_page**: [f14b17c3](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/f14b17c3b00dde626083bcb4c5bb84ab599fdff5) - created template for homepage [ [!6](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/6) ]
- **home_page**: [1a6fc5a8](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/1a6fc5a814c7dc1ceb8a13c5db806a23db53073d) - add metadata [ [!6](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/6) ]
## v1.0.0rc1 (2022-01-29)
### Bug Fixes
- **mkdocs-plugin-tags**: [ddc871ac](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/ddc871accabbbdafe28576265ee66755a5ffe17c) - ensure trailing '/' added to tag hyperlink [ [!5](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/5) ]
- **vscode**: [b4fdcb61](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/b4fdcb61834a6d9d1536b2a93aefd855fbe25006) - use correct params for tests [ [!4](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/4) ]
- **blog_metadata**: [a9237c59](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/a9237c59508979f673faa565f086ce0d2782e53d) - set the date to be in a format that is normal [ [!2](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/2) ]
- **mkdocs-plugin-tags**: [54b75f38](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/54b75f38b432050836f1f0f41eb6a9f9235ca88d) - fix markdown generation so it passes linting [ [!1](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/1) ]
- **mkdocs-plugin-tags**: [10a81f0b](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/10a81f0bed073ef865e8c98013ae186d7c70a467) - ensure heading reference in a url is in lower case. [ [#3](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/3) [!1](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/1) ]
- **mkdocs-plugin-tags**: [653c535b](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/653c535b2cfae1a54e45f27fd5c23950ddbe64ed) - the template not using the specified css class for the tag [ [#3](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/3) [!1](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/1) ]
- **mkdocs-plugin-tags**: [7267f8f2](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/7267f8f2ad287fafcbae0fc88f3ceb7dadd19035) - Build a relative link for the url to the tag page [ [#3](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/3) ]
### Code Refactor
- [a6bcfa6b](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/a6bcfa6b3f877489891905adb120f3fa4228e7fd) - update article requirements
- **article**: [2e534c5d](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/2e534c5dd01b046f8fb520b9a2c607d432d2c309) - include meta.description [ [!5](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/5) ]
- **mkdocs.yml**: [f73011d2](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/f73011d29dbedd3617f37648c2a2fac5501a7a0d) - fix tabbing of plugin
- **privacy_test**: [94ced085](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/94ced08565dac3b26c23e66e9f61e929a8f07ddd) - rename test 'test_page_external_requests' -> 'test_page_load_external_requests' [ [!2](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/2) ]
- **syntax**: [d67a264e](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/d67a264ef010b3a182147d6e40407310e37fb099) - updated tags and added title metadata [ [!2](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/2) ]
- **choose_internet_service**: [98d0acf0](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/98d0acf0aca74c904236bc686f72e669009a8363) - removed extra tags and moved archive notice to bottom of page [ [!2](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/2) ]
- [72ed1cb4](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/72ed1cb4408fcddf202e819cf73c3ce9d9cb2169) - change hover for content tags to yellow text. [ [!1](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/1) ]
- **navigation**: [93ceceb3](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/93ceceb3965f93ae4b0d0d3ffa86c0002927ee4b) - rename tags -> 'Content Tags' [ [!1](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/1) ]
- **markdown_lint**: [f2969de7](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/f2969de739230bc8c5d44c15a65c61bfdfc74027) - correct linting errors [ [!1](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/1) ]
- **mkdocs-plugin-tags**: [5dfeeb81](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/5dfeeb81b10a7e86c30b90dc360a06c3ad429adf) - rebranded plugin to be from nfc [ [!1](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/1) [#3](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/3) ]
- [2a16ca06](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/2a16ca065c08759b31ee24f53d1e0ac67a406a9d) - md linting error, ul must be indent four spaces
- [449ec4a9](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/449ec4a9fc5d8421eea4cb79477d2124fc0a308c) - linting error. removed trailing empty line in choosing an internet service. [ [!1](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/1) ]
- **article**: [c2d3a178](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/c2d3a178a5ab335bd769a19e9a88839f17021bca) - fixing lists in choosing an internet service [ [!1](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/1) ]
- **markdown_lint**: [3a08f14d](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/3a08f14d74899d2f2200503db3ca1bd96ffa859f) - clean up linting errors. [ [!1](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/1) ]
### Continious Integration
- [217f159c](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/217f159c5c6593c33f27f6c36f0b54735fe3703b) - amend to last commit
- **integration_test**: [88af5fed](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/88af5fedab608986855ae7f1a29ccadd7a53d0f0) - disable job until developed
- **unit_test**: [ec46764d](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/ec46764d72db8de1fc25f8cfb73f56107007932f) - copy report to right location
- **pytest**: [c6f44892](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/c6f44892e7300f9e33b79a12df66bea866bfcd86) - fix to collect junit report
- [a73362ab](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/a73362abe74f9498c200bb76ac4b744ddf762462) - command only required for unit test [ [!4](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/4) ]
- [c3f1ccc8](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/c3f1ccc8dd31c0bce3b3f709c54b3c39c1698b3c) - ensure placeholder test runs and passes [ [!4](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/4) ]
- **static_pages**: [8b041133](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/8b041133dce19647310b24a09161338029765a28) - dont run build if MD lint fails [ [!4](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/4) ]
- **tests**: [13b829d0](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/13b829d0b54d06540ea68b801e59139bedf176ea) - rijigged the job order [ [!4](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/4) ]
- **stages**: [c50e9a0a](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/c50e9a0a6ec438aa1211215202eb66363ef22de0) - deploy job to occur after build [ [!4](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/4) ]
- **unit_test**: [c4dd5b4a](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/c4dd5b4a24a383c84bb6759e3c482b8b11784859) - include requests in test pipfile [ [!4](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/4) [#7](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/7) ]
- **unit_test**: [f811a7ac](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/f811a7aceffbfdea77c4ff429d0edf386023f07f) - capture stdout in JUnit Report [ [!4](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/4) ]
- **unit_test**: [65726fda](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/65726fda02b7001c7b5315f787136a86d7549566) - ensure only unit test jobs run for the 'unit test' job. [ [!2](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/2) ]
- **pytest**: [7e99d55b](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/7e99d55bdab2263b224aa8297e43e5b156e2bc6b) - Added pytest job to run tests against build. [ [!2](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/2) ]
- **gitlab-ci**: [34ff1e34](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/34ff1e34df74437edf5dbb1a05c2ed41215da056) - use gitlab-ci markdown linting job [ [!2](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/2) ]
- **mkdocs**: [b7919633](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/b79196335d8d471ebffd071cc61276e964fd2482) - use gitlab-ci mkdocs job [ [!2](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/2) ]
- **gitlab-ci**: [95f20fee](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/95f20fee7391674730ff5bbe3e4decdfc57de350) - updated to v0.6.0 [ [!2](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/2) ]
- **markdown_lint**: [b0c91fa6](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/b0c91fa68bda0fac2c4492a6fb227d0970a8f1d0) - set unordered list indentation to four.
- **markdown_lint**: [893d3dfd](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/893d3dfd5c393131f69fddd7d5e80d3f025b48bb) - disable line length for markdown files [ [!1](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/1) ]
- **pages**: [a02d2c3b](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/a02d2c3bb5fd0e933b42edce96b624ea355dcb69) - ensure the static site artifacts are available for gitlab pages [ [#3](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/3) [!1](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/1) ]
- **build**: [696138c3](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/696138c317e0f898188b1ba9f0a3e287933f5249) - Added config to build and publish to gitlab pages [ [#3](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/3) [!1](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/1) ]
### Features
- **merge_requests**: [ce3a2c2e](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/ce3a2c2e1e434d4910979fee482d071cc050c2b4) - added article MR template [ [!5](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/5) ]
- **vscode**: [cc7a4116](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/cc7a411613c02649fac2e5519079a1cc1b109677) - fix junit path to use workspace folder [ [!5](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/5) ]
- **blog_list**: [286caa16](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/286caa1696692216a09d4fe9dbfc3d4126c7dfd7) - layout not to include post content [ [!5](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/5) ]
- **blog_post**: [08bdf09d](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/08bdf09d30d7f8bbd1f6728d46835d0401f490c0) - remove meta.description from page [ [!5](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/5) ]
- **theme**: [7bd7abd0](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/7bd7abd0e40e56ccb2321a21dd974e8a5ef3de61) - removed post content from 'blog_list' [ [!5](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/5) ]
- **sitemap**: [006a36ac](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/006a36ac0cee8450ce0523add551081b87a235c2) - git_revision_date for page change [ [!4](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/4) ]
- **vscode**: [247f85c3](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/247f85c319e7456e5cb256b1e4fc15bff743424d) - added pytest settings [ [!4](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/4) ]
- **vscode**: [40a92b97](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/40a92b975fc706fdef584d40212d5403646f012a) - added build task [ [!4](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/4) ]
- **minify**: [8292b0a6](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/8292b0a6cfdfd8812a55775809947a0f4fc9501a) - disable minifying website until site ready to deploy [ [!2](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/2) ]
- **minify**: [e4999a44](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/e4999a446267c134d24bae252e363797fb188c95) - minify the mkdocs static html build files
- **mkdocs**: [0e65f046](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/0e65f0465b47f2d58774c44e028b6d6395f7a69c) - minify plugin added to pipfile for usage with build
- **emoji**: [0c7c36d7](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/0c7c36d7e1fd46925a805ad3a98fb682614d510f) - removed emoji support until a solution can be found to self-host. [ [!2](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/2) ]
- **blog_post**: [452fbe12](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/452fbe1225d8f0d22f3976b2c90aef9217a2ecd2) - change location of updated date to be in the social metadata. [ [!2](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/2) ]
- **gitlab**: [0e09b249](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/0e09b249dc72292b36e45449aaaf264a41e74140) - added a default issue templete for reporting issues with the website. [ [!2](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/2) [#5](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/5) ]
- **blog_list**: [5d75c663](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/5d75c663a1c8472462d53a7bf758a91914ecfbfe) - change articles page to be a preview list of articles. [ [!2](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/2) ]
- **blog_post**: [61f3331d](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/61f3331db0602241b8a4b68952f38707e2b1043a) - include git revision date plugin
- **blog**: [9d9f9c73](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/9d9f9c73c8261cb6a4529acb7c59f4085fd2df27) - added blog capability to posts [ [#3](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/3) [!1](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/1) ]
- **markdownlint**: [d6524ac9](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/d6524ac9cf2e305218ec5d3862b85d12b341ba48) - specifiy the allowed inline html elements [ [!1](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/1) ]
- **mkdocs**: [1a1b7776](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/1a1b77769d7f924fc018fb303e6f656826c578a1) - use custom plugin from custom-plugins/mkdocs-plugin-tags [ [#3](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/3) [!1](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/1) ]
- **plugin**: [f77b36a1](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/f77b36a138809b50389dce016557497fbaaf5adb) - cloned plugin tags repo so it can be customized and used [ [#3](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/3) ]
- **mkdocs**: [830371c6](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/830371c691e283418e373da881f13727ef63ec17) - add lists and task lists to markdown [ [!1](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/1) ]
- **sitemap**: [59c2593c](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/59c2593c68fbc3f5b5d9e553e328586ce0811859) - remove sitemap as the changed dates for files is wrong. [ [#3](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/3) [!1](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/1) ]
- **operations**: [c6de8bc9](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/c6de8bc9600a9c740660b8523f2efdd33a879b9e) - Added markdown syntax page. [ [#3](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/3) [!1](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/1) ]
- **article**: [6667f4f0](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/6667f4f0761dcba22a1825c9514963931618140e) - migrated choosing an internet service from old wiki [ [#3](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/3) [!1](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/1) ]
- **contact**: [268e076e](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/268e076e9a04fb071490f4d532aa3cdb53c4ee06) - updated the page content to include how to fix an issue with a page. [ [#3](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/3) [!1](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/1) ]
- **markdown**: [47bfd4e5](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/47bfd4e5cc9c19da8c82e37eb7513f1b75d68f45) - added ability to colour by brand name. [ [#3](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/3) [!1](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/1) ]
- **markdown**: [f6d6bd62](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/f6d6bd627b755cafe9e45f9edd17f7436a323b4a) - Support admonations in markdown. [ [#3](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/3) [!1](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/1) ]
- **footer**: [c0aa5cbe](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/c0aa5cbe12f92cea496a902f68ce4f7114f36d1a) - Add colour to the social icons within the page footer [ [#3](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/3) [!1](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/1) ]
- **mkdocs**: [2460b4c7](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/2460b4c70cf3a7ccf11da60c8b356fad2fad352d) - add document creation and last edited date. [ [#3](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/3) [!1](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/1) ]
- **mkdocs**: [8fbb9d95](https://gitlab.com/nofusscomputing/infrastructure/website/-/commit/8fbb9d95ac452b550c65cff32a88f7b6c23437d3) - Add the default config and the site layout directory [ [#3](https://gitlab.com/nofusscomputing/infrastructure/website/-/issues/3) [!1](https://gitlab.com/nofusscomputing/infrastructure/website/-/merge_requests/1) ]
## v1.0.0rc0 (2022-01-29)

7
README.md Normal file
View File

@ -0,0 +1,7 @@
# Pages urls
the site is deployed to the following URLs:
- [https://no-fuss-computing.gitlab.io/infrastructure/website](https://no-fuss-computing.gitlab.io/infrastructure/website)
- [http://test.nofusscomputing.com](http://test.nofusscomputing.com)

1
gitlab-ci Submodule

Submodule gitlab-ci added at a5a9fa4437

91
mkdocs.yml Normal file
View File

@ -0,0 +1,91 @@
INHERIT: website-template/mkdocs.yml
repo_name: Website
repo_url: https://gitlab.com/nofusscomputing/infrastructure/website
edit_uri: '/-/ide/project/nofusscomputing/projects/website/edit/development/-/pages/'
nav:
- Home: index.md
- Articles:
- articles/index.md
- 2023:
- articles/2023/new_website.md
- 2015:
- articles/2015/choose_internet_service.md
- 2014:
- articles/2014/mdt_setup.md
- Content Tags: tags.md
- Projects:
- projects/index.md
- Ansible:
- projects/ansible/index.md
- Ansible Execution Environment:
- projects/execution_environment/index.md
- Playbooks:
- projects/ansible/playbooks/index.md
- Roles:
- projects/ansible/roles/index.md
- Common:
- projects/ansible/roles/common/index.md
- Firewall:
- projects/ansible/roles/firewall/index.md
- Home Assistant:
- projects/ansible/roles/homeassistant/index.md
- Kubernetes:
- projects/ansible/roles/kubernetes/index.md
- Git Configuration:
- projects/git_configuration/index.md
- Docker:
- projects/docker/index.md
- BIND DNS Server: projects/docker/bind/index.md
- Docker Mail: projects/docker-mail/index.md
- Gitlab CI: projects/gitlab-ci/index.md
- Docker GLPI: projects/glpi/index.md
- Kubernetes Monitoring: projects/kubernetes_monitoring/index.md
- LDAP Self Service: projects/ldap_self_service/index.md
- Python Gitlab Management: projects/python-gitlab-management/README.md
- Operations:
- operations/index.md
- Contact Us: contact.md

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

View File

@ -0,0 +1,108 @@
---
title: How I use Microsoft Deployment Toolkit
description: This article is a record of how I setup my Microsoft Deployment Toolkit. There are many ways to set it up. However this is how I do it.
date: 2014-09-01
template: article.html
type: blog
author: jon
copyrightHolder: jon
about: https://en.wikipedia.org/wiki/Microsoft_Deployment_Toolkit
tags:
- Administration
- Microsoft
- Microsoft Deployment Toolkit
- Windows
---
!!! info
This information has been created as a record of how I do something, if you decide to follow anything within this set of pages and stuff up, you're on your own!!
I use Microsoft Deployment Tool Kit (MDT) to reduce the time it takes to install/update and to deploy a working Windows OS. The setup of MDT and time taken to test and get it right far outweighs deploying an OS by hand. Below you will find how I have setup my MDT structure and why. Most of my setup has been chopped and changed due to trial and error and to ease the burden.
My goals for MDT are:
- Deploy any Windows OS quickly
- Easily update Applications / Drivers / Operating System
- make deployment media that could be used by a less savvy computer user.
I currently use MDT to Deploy windows on my own network (Active Directory Domain), Stand alone machines and family and friends computers. I also use MDT to install applications and force a computer to update using my WSUS Server.
## Folder Layout
![MDT Folder Structure](images/mdtstructure.png)
## Applications
I not only use MDT to deploy applications during OS deployment but I also have a 'Post OS Install' task sequence to install applications as well.
Application folders Layout is pretty straight forward.
- Client Software Suite - Standard Suite
All Freeware applications that I install is under this structure
- Client Software Suite - Domain
Local Domain only Applications
- Server Software Suite - Domain
Software for use on domain Servers
Each suite folder is setup as follows.
| Folder | Description |
|:----|:----|
| Suite | Applications listed here are only Application Bundles. The dependent applications for these Application bundles are selected from the AppTree folder. They are visible from the deployment wizard. |
| Suite\AppTree | Applications here are 'Applications with Source files' these applications are contain the acutual installers for the application in question. They are not visible from the deployment wizard. |
| Suite\Archive | Applications here are old versions, they are visible from the deployment wizard. |
![MDT Folder Structure](images/mdtapptree.png)
**Figure 1. AppTree Folder Structure** This is where new applications are imported to they are imported as an application with source files.
![MDT Folder Structure](images/mdtapplications.png)
**Figure 2. Suite Application bundles** These applications are application bundles with the application under the app tree folder added as a dependency.
### Add New Application
To add a new application the following process is followed.
- Import an application with source files into the AppTree Folder ensuring you hide it from the deployment wizard.
- Create an application Bundle under the Suite root folder and set its dependency to the application you wish to install, from the AppTree folder.
- if the application you wish to install has dependent applications, select the dependent application bundle from the suite root folder making sure it is set to install before the application that requires it does.
### Update an Application
- Import an application with source files into the AppTree Folder ensuring you hide it from the deployment wizard.
- goto the application Bundle under the Suite root folder and set its dependency to the application you just added to the AppTree folder and remove the old version of that application.
- return to the AppTree folder and move the old app to the Archive directory making sure you 'uncheck' the 'hide from deployment wizard'.
### other useful info
- utilize the uninstall key, within each application it will prevent the app from trying to install again.
### Reasoning
This structure was adopted for the following reasons:
- Create Deployment media based on suites (Departments / Groups / ETC.)
- If you have mandatory applications in your config file providing you have used the Suit 'Application Bundle' you don't have to leave the GUI/Edit the config file to update the application.
- clarity
!!! attention
This post is considered an archived post.
This article was originally posted on 01 Sep 2014. It has been migrated from its original source http://nofusscomputing.com/wiki/public/help/mdt/home and http://nofusscomputing.com/wiki/public/help/mdt/applications to here.

View File

@ -0,0 +1,167 @@
---
title: Choosing an Internet Service
description: The Internet has now become a mainstream item within the average Australian home. The Internet has become so ingrained within our daily lives that for those of us that were around when the Internet was born have actually forgotten what life was like without it. I remember when I was growing up that if we wanted to learn about something you would go to the local library or to a family/friends house to look through their Encyclopaedia Britannica which more often than not was at least five years out of date. Believe it or not that was only 15 to 20 years ago. Now if I haven't lost you already and hopefully by the end of this article I have been able to provide you with more insight on being able to choose an Internet service from an ISP with a little more of an understanding of the technology behind that Internet connection.
date: 2015-02-25
template: article.html
type: blog
author: jon
copyrightHolder: jon
tags:
- ADSL
- Archive
- Article
- Broadband
- Internet
- NBN
- Australia
---
!!! info
This article has been targeted towards the common mass who dont understand the technical details and considerations for choosing an Internet package.
The Internet has now become a mainstream item within the average Australian home. The Internet has become so ingrained within our daily lives that for those of us that were around when the Internet was born have actually forgotten what life was like without it. I remember when I was growing up that if we wanted to learn about something you would go to the local library or to a family/friends house to look through their Encyclopaedia Britannica which more often than not was at least five years out of date. Believe it or not that was only 15 to 20 years ago. I would consider myself lucky in the regard we were introduced to the Internet in high school way back when Web Crawler was what Google is today and the only thing of any value was searching for random phrases like <s>porn</s> homework answers. It was a very new concept to have the Internet or even access, which was often met with confusion and a sheer lack of knowledge. Being part of that generation we grew with the Internet and became the first generation to learn about it, and to the behest of the generations before us who were either left in the dark or were very slow on the uptake.
Now if I haven't lost you already and hopefully by the end of this article I have been able to provide you with more insight on being able to choose an Internet service from an ISP with a little more of an understanding of the technology behind that Internet connection.
Below I will cover a little of the technical details and hopefully bringing into perspective, so you can better understand what is being explained to you. To do this I will use the flow of water methodology.
<p hidden>#more</p>
## Bandwidth
Bandwidth is the actual speed of your Internet connection and its unit of measure is bits per second. So basically if you think water pipe, only so much water will flow through a water pipe but if you increase its pressure you will receive more water. For the actual Internet connection different technology is used to essentially achieve the same
thing.
## Quota
This is how much you can download and/or upload from the Internet. Its unit of measure is bytes. Think of a water tank, larger the tank the more quota you have available. This will be set by your ISP and 9 times out of 10 will be limited. Every Time you connect to the Internet you are using this available quota.
## Theory
Now to fully understand the quota and bandwidth I will have to cover a little bit of computer theory. Computers compute information by doing mathematical equations. The only numbers a computer recognizes are Base 2. Base 2 numbering means it uses the first 2 numbers, being zero and one. In common computer terms this is called binary which is always in the computer world as a minimum 8 bits wide i.e. 01010101. Each digit of the number is a bit, four bits to a nibble and 2 nibbles to a byte. Unlike the English language; Binary is read from right to left and each one or zero, within a binary number is actually counting from 1 through to 255, which takes 8 bits of information. Binary is a notational reference system, so starting from right to left each digit represents another number, the first number being one, each number after that is double the number before it so the next number would be two, then four, eight, 16, 32, 64 finishing with the leftmost digit as 128. Confusing? Not really, when the bit is zero you don't add each notated number, you only add if the bit is one. So 0001 would be one, 0010 would be two, 0011 is three and so on.
Communication between different components or computers (network or The Internet) is measured in bits per second or bps (lowercase). Computers store data in bytes or B (uppercase). Each unit of measure has multipliers like normal numbers, computers use the following multipliers, Kilo (K) for thousands, Mega (M) for millions, Giga (G) for billions, Tera (T) for trillions and Peta (P) for quintillion's. The conversion from bits to bytes is a division of 8.
So why use different units of measure for the same data? simply put, computers are electronic devices which communicate with an electronic signal with 1 being on and zero being off; basically the signal is either on or off. So the transmission of data is serial or singular and storage is in parallel or stored in octets which is a group of bits. Hence bits and bytes. generally you will find lowercase letters are used to represent bits and uppercase letters are used for bytes.
### Connection types
The common Internet connection types in Australia are ADSL or via the Mobile network. Very rarely used but still available if you look hard enough dial-up. and the newest and greatest is the National Broadband Network or NBN. With the exception of the NBN all of the above connection types will have a max speed. This max speed is a theoretical maximum speed and there are many factors which generally slow down your connection. All connection methods have a technological peak, which basically means there is no known way to improve that technology any further.
### Dial-Up
Dial-UpInternet was the first mainstream way to connect to the Internet. For this to happen you needed an active phone line, a computer with a MODEM (short for modulator/demodulator) and you would plug a phone cable into your computer, which would dial a number to connect to the Internet. At its technological peak the max theoretical download speed was 56kb and approx 33kb up. Dial-up modems are generally part of the computer. The downside to Dial-up is that it relies on good quality phone cables, basically if you have a bad phone line you will have unstable and slower Internet. Dial-up also suffers from signal attenuation which means the further away from the telephone exchange the lower the speed your Internet is going to be. The biggest downside to having Dial-up Internet is that you can either be connected to the Internet or on the phone, not both.
### ADSL
Asynchronous Digital Subscriber Line or ADSL is the most common Internet in Australia. This is also commonly referred to as broadband Internet, the biggest difference between ADSL and Dial-up is that it is always on. When ADSL first arrived it had a speed of 1.5mb, which was a massive increase over Dial-up. As ADSL evolved its speed increased, when this occurred its name slightly changed to suit the technological level, ADSL1, ADSL2 and finishing with ADSL2+ which has a maximum theoretical download speed of 24Mb and 2Mb Up. An ADSL connection like dial-up Internet requires a modem and suffers with the same line issues. Where ADSL is an improvement over Dial-up is that you can still make telephone calls when you are have an active Internet connection for this you will need a line filter. To utilise an ADSL connection you require an ADSL modem.
### Mobile Network
Again this method of connecting to the Internet has been around for a while and with the invention of the smartphone has become quite a common way to “surf the Web”. 4th generation or 4G being the current technology has a max theoretical speed of 50Mb. The connection speed is shared amongst all users utilizing that mobile tower to connect to the Internet, and if you dont have good mobile reception you will not have a stable Internet connection.
### NBN
The National broadband network or NBN as it is known is the new way to connect to the Internet. The NBN unlike Dial-up or ADSL does not use a phone line to connect to the Internet. The NBN uses fiber optic cable, which uses light not electricity to communicate. Fiber optic cable can be thinner than a human hair. Fiber Optic cable, or fiber networks have one purpose; transmit data, not voice or electronic signals like a copper cable Since fiber is designed for networking you require a router to connect to it. A router looks very similar to an ADSL modem. Unlike the other Internet connection methods above, communication in either direction is the same. Within Australia this is not the case, and for whatever reason you will find most NBN capable ISPs will still have packages with different upload and download speeds. Fiber networks are very mature and their speed is actual, not theoretical maximums and are capable of transmitting data at 10gbps. Using that speed for connecting to the Internet is overkill and you will find that most ISPs offer no connection speed above 100mbps at the moment.
## Choosing a suitable Internet service
Now hopefully by now I have given you a little better understanding of the connection types and terminology in relation to choosing an Internet service; believe me it is still a cumbersome task. Yes there are a lot of things to consider. From a technical standpoint the following should be taken into account:
- availability in your area
- what you will be using the Internet for
- bang for buck
### Availability in Your Area
For a majority of Australians, ADSL is the best Internet service you will have available. The most annoying thing when trying to connect an ADSL service is the wait time. This wait time is due to the requirement for a technician to have to go to your local telephone exchange to actually connect you, that is if there are spare ports available in the exchange. If though, you can get the NBN, go for it. Seriously you are being foolish if you don't. Why? the NBN is an actual data network and the speed you pay for is what you get, overall the NBN is more reliable.
### What You Will be Using the Internet For?
Most website designers will aim for a page load time of within one-two seconds; Even now how website technology is becoming more media focused, I would not recommend any speed lower that ADSL2+(24mbps) or 12mbps for the NBN. Why the different speeds? Remember that ADSL is a theoretical maximum, on average. Most ADSL users will have an actual connection speed of between 8mbps-22mbps and the NBN is actual speed. Anything faster than this for just “surfing the web” is overkill, and a waste of money. Where would you require a faster connection speed? if you start to use services like netflix and/or Foxtel IPTV to stream videos. Having more than ~5 users, may also be a consideration for a speed increase. How much quota do you need? if you have had the Internet before, go look at your previous bills, most of the time you will see what you used for the billing period, use this figure as a basis to guesstimate how much quota you are going to need. If you have never had an Internet package before then as a guide I would recommend nothing less than 10GB quota per month for the average light Internet user. I can't emphasize this enough, please do your research before you take this as gospel. Most people do know someone who <s>“knows boats”</s> would be able to assist in assessing how much quota you may require.
### Bang for Buck
Read the fine print………. READ THE FINE PRINT……… oh, did I mention fine print? Every Internet package has fine print. This fine print will cover things like:
- what is unmetered((this is a category of sites that you can use without it being counted towards your quota.))
- how much quota you have, read carefully some ISPs will charge by the megabyte if you go over
- what happens when you reach your quota limit (good ISPs will shape your speed ((slow your Internet connection speed)))
- what you should not do with your Internet package (some ISPs wont allow you to host your own website.)
- contract period
- exit fees associated with leaving your contract early
- fees associated with moving house
- support
- your responsibilities
### Further Considerations
- "**Unlimited Packages"** Some ISPs do offer "unlimited packages". Please read the fine print so you can get the definition of unlimited as sometimes unlimited does not exactly mean unlimited. Some ISPs have been know to use peak and off-peak times, during peak you will have a quota and off peak is “unlimited”. A big consideration for unlimited or large packages with lower download speeds is calculating what you could actually download in that billing period. This is a simple task and would use the following formula.
> (Billing Period Days x seconds in day) × max download speed in bits ÷ 8 = max bytes for period
>Example:
>
>- Billing Period days = 30
>- Second in one day = 86,400
>- Max download speed = 22,000,000
>- ( 30 x 86,400 ) × 22,000,000 ÷ 8 = 7,128,000,000,000Bytes or 7.128TB
>So with the example above a package with a quota above 7.128TB with a download speed of 22mb would be a waste of money.
- **Bundled Items** We have all seen and heard of them.
- "Select our Internet Package for $120 a month and we will give you a telephone with free calls, 200gb of download and if you sign up for a 24month contract we will throw in a free iPad"
- With the exception of a modem-if you don't have one; be very careful of falling into this trap. These “Bundled Packages” are plain and simply designed to get your business. Believe me when I say you can get all of this for a hell of a lot cheaper. Again <u>READ THE FINE PRINT</u> and calculate the cost of the whole contract period including any hidden fees and you will find that these are quite expensive packages. A simple way to test these packages is how much is thrown in, the more free stuff that is included outside of the Internet package, then the more desperate they are for your business. Listen to your gut and the age old saying "If it's too good to be true, than it probably is". Once in my life time I have seen one of these packages and it was too good to be true, but turned out to actually be worth while in the long run, again this was more than likely a “once in a lifetime good package”
- **Naked ADSL** works exactly the same as normal ADSL Internet but you dont have to pay for the phone line as it is included in the “Naked ADSL package” if you dont use the telephone much or you are utilizing VOIP choosing one of these packages can save you some money. Like ADSL this is only available in certain areas, Please confirm with your ISP for availability.
- **Support** It's common practice for ISPs to outsource the first stage of customer support. This problem is a plague that needs to be truncated from the IT((Information Technology)) industry. Why? 9 times out of 10 the person on the other end of the phone either does not have a good grasp on our native language or has an accent that is so thick you can not understand them, which makes it very difficult for the hearing impaired. When this occurs the assistance you called for doesn't happen, and is escalated to someone else in the chain who may or may not be able to help you. In the end you are stuck with no internet and built up frustration from a 1:30h phone call.
There are however some ISPs who are old school. they will give you a callback after being on hold for a few minutes and if your assistance call needs to be escalated will either call you back or give a detailed handover to the next person you need to speak to. bottom line if you are not technically minded than ask around to find a good ISP who can assist you and be wary of outsourced tech support.
## Conclusion
Lets face it, The Internet has made our lives easier. You can now sit in your lounge room and read this long, very mind numbing article on how to choose a better Internet Service, do your Banking, Pay Bills, Buy Goods, <s>look at porn</s> and best of all place video calls to family and friends. What will the future hold? Who knows but given how far technology has evolved in the last 50 years, I think the next 50 will yield even more from this simple little invention courtesy of DARPA.
<s>Like this article? Please consider buying me a coffee. Donations can be accepted via PayPal via our store at No Fuss Computing</s>
Some ISPs in Australia:
- Internode
- IINet
- WestNet
!!! warning
The information contained within this article based on the opinion of the author and is provided for informational purposes only. Before utilizing any information or advice from this article you are encouraged to do your own research
!!! attention
This post is considered an archived post.
This article was originally posted on 25 Feb 2015. It has been migrated from its original source _http://nofusscomputing.com/wiki/public/article/150225_choose_internet_service_ to here.

View File

@ -0,0 +1,29 @@
---
title: Site Refurbishment
description: it's an update.
date: 2023-08-01
template: article.html
type: blog
author: jon
copyrightHolder: jon
about: https://nofusscomputing.com
tags:
- Automation
- Website
- Update
---
It's been a while and for all intents and purposes; Prior to today you would not have been mistaken for thinking that our site was dead in the water. I could give reasons, but the reality is it's an excuse and we all know that *"they're like arseholes, everyones got one!!"* As it currently stands, I find myself with a little extra time on my hands so this site revamp is the start and first visibility of what I've been doing.
I've spent a good part of a few of a few decades working with computers. Whilst this has been an interesting journey, in the last few years I've discovered Configuration-as-Code. The concept itself wasn't exactly new to me, I just put off learning anything about it past the name. As creatures of habits, us humans, once we have found our way we tend to stick to that routine or better stated, with what we know.
Moving from the early days (norton ghost and clonezilla) with manually built images for every different type of machine. which became very monotonous to manually update the images with patches. The opportunity had presented itself resently where for the first time in over two decades, I'm required to rebuild my infrastructre from scratch. As daunting as this sounds, given the leaps and bounds that have occured in the last decade, even more in the last five years. Technologies have evolved to the point where now it takes a fraction of the time to do what used to take upwards of a week. Upgrades now are not rebuild the image from scratch, clone and redeploy. Now, I punch the keyboard and characters show on the screen, then I run a program, Ansible. It reads the jibberish (json/yaml) and presto, Bobs your uncle, a deploy has occured. Fresh deployment or updates, doesn't matter, run the same code again and Ansible ensures it's setup how it's supposed to be. Need to update a piece of software, too easy, change the version number in your config files.
Other things of note worthy mention:
- For Family and friends, free of course I host Password vault, <https://vault.nofusscomputing.com>. This enables you to install an app on your phone and within your web browser which lets you sync your passwords, identities and secrets-and using zero-trust full encryption. Best feature of all,you only have to remember your vault password, as everything else is stored in the vault.
- Helpdesk now deployed publicly, <https://helpdesk.nofusscomputing.com>. Along with automating everything else a Service Catalog is being extended to automate other tasks.
- Website updating now occurs automagically. We do this via Gitlab using CD/CI pipelines. Now I just edit a file, push the changes and the changes deploy my site on the interwebs.
- Our [projects](../../projects/index.md) from [GitHub](https://github.com/NoFussComputing) and [GitLab](https://gitlab.com/nofusscomputing) deploy their docs to our site, again automagically.

8
pages/articles/index.md Normal file
View File

@ -0,0 +1,8 @@
---
template: article_list.html
title: No Fuss Computing Articles
---
Please see below for our articles.

BIN
pages/assets/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
pages/assets/nfc_header.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
pages/assets/nfc_revamp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

24
pages/contact.md Normal file
View File

@ -0,0 +1,24 @@
# Contact Us
We can be found in the following places on the internet:
- [:fontawesome-brands-docker:{ .docker } Docker Hub](https://hub.docker.com/u/nofusscomputing)
- [:fontawesome-brands-facebook:{ .facebook } Facebook](https://www.facebook.com/NoFussComputing)
- [:fontawesome-brands-github:{ .github } Github](https://github.com/NoFussComputing)
- [:fontawesome-brands-gitlab:{ .gitlab } Gitlab](https://gitlab.com/nofusscomputing)
- [:books: Read the Docs](https://readthedocs.org/profiles/nofusscomputing/)
## Found an issue with a page on this website?
On every page of this website that you are able to edit, you will find this icon :material-pencil:. Located in the top right hand corner of the content. After clicking on this icon, you will be taken to the git repository that contains the page in question for you to edit. An understanding of Git and Gitlab is required for the use of this method.
For the non-developers out there, you can still contribute by submitting an issue about the related page. To do this find this icon :fontawesome-brands-gitlab: on the subject page. Copy the page url to your clipboard, then click :fontawesome-brands-gitlab: icon. You will be taken to Gitlab.com and the repository in question. There will be a menu on the left hand side of the screen, where you will click issues. On the issues page loading, click new issue and use a relevant template for your report. _**Don't forget to include the url of the subject page and to ensure there is enough details for us to rectify the issue.**_
??? info "Where is the owner located??"
Jon can be found on [:fontawesome-brands-github:{ .github } Github](https://github.com/jon-nfc) and [:fontawesome-brands-gitlab:{ .gitlab } Gitlab](https://gitlab.com/jon_nfc)

13
pages/index.md Normal file
View File

@ -0,0 +1,13 @@
---
template: home.html
title: No Fuss Computing
description: Here at No Fuss Computing we predominately do research and development into, making your computing experience a more enjoyable one. See our projects page to find out what we are working on.
hide:
- navigation
- toc
---
<div style="background: url(assets/nfc_revamp.png) no-repeat center top; background-size: 282px 90px; width: 100%; height: 120px; display: flex;">
<span style="align-self: flex-end; width: 100%; text-align: center; color: #009900; font-weight: bold; font-size: 14pt;">Using Technology to make life easier</span>
</div>

View File

@ -0,0 +1,5 @@
# No Fuss Computing Operations
| :red_circle: This page is a placeholder for the operations repo's docs. |
|:---|
| _If you can see this page there has been an error, please report the issue on gitlab_ |

View File

@ -0,0 +1,5 @@
# Ansible Roles
| :red_circle: This page is a placeholder for the ansible-roles repo's docs. |
|:---|
| _If you can see this page there has been an error, please report the issue on gitlab_ |

View File

@ -0,0 +1,156 @@
---
title: Ansible Projects
description: No Fuss Computings Ansible Projects
date: 2023-06-01
template: project.html
about: https://gitlab.com/nofusscomputing/projects/ansible
---
This section of the website contains Ansible projects and the details of how to use said projects. Across All of our Ansible projects we standardize as much as possible.
Any playbooks and roles we create are designed with the below ansible setup in mind. Whilst there are many ways ~~to skin a cat~~ setup ansible, If you deviate from below you will be required to test to ensure that if using our playbooks/roles, that they work as intended. If you find that there is a better way of setting up Ansible, raise an issue with your proposal and we'll discuss.
- [No Fuss Computing playbooks](playbooks/index.md)
- [No Fuss Computing roles](roles/index.md)
## Inventory Setup
The Inventory should be setup under an SCM, git in this case; So that a version history is maintained. This also fosters a full audit trail as part of the complete host lifecycle. Idealy the Inventory along with directories `files` and `templates.` should be contained in it's own git repository. Using this method provides that the git history only pertain to the inventory alone, and therefore any install/configuration of a host.
!!! tip
If you must include `playbooks` and `roles` wihin your inventory repository it's a good idea that these still be their own repositories with them added to the inventory repository as a git sub-module.
Ansible inventory directory structure.
``` bash
.
├── ansible.cfg
├── files
│   ├── all
│   │   ├──
│   │   ├──
│   ├── node1
│   │   ├──
│   │   ├──
│   ├── k3s-prod
│   │   ├── Ingress-manifest-AWX.yaml
│   │   └── deployment-manifest-test_web_server.yaml
│   ├── k3s-testing
│      └── deployment-manifest-test_web_server.yaml
|
├── .inventory_root
├── inventory
│   ├── development
│   │   ├── group_vars
│   │   │   ├── all.yaml
│   │   │   ├── debian.yaml
│   │   ├── hosts.yaml
│   │   └── host_vars
│   │   ├── laptop2.yaml
│   │   ├── node1.yaml
│   │   ├── node2.yaml
│   │   ├── node3.yaml
│   │   ├── node4.yaml
│   │   └── node5.yaml
│   └── production
│   ├── group_vars
│   │   ├── all
│   │   │   ├── main.yaml
│   │   │   ├── vault.yaml
│   │   │   └── versions_software.yaml
│   │   ├── awx.yaml
│   ├── hosts.yaml
│   └── host_vars
│   ├── node1.yaml
│   ├── k3s-prod
│   │   ├── backup.yaml
│   │   ├── kubernetes.yaml
│   │   ├── main.yaml
│   │   └── vault.yaml
│   ├── k3s-testing
│      ├── main.yaml
│      └── vault.yaml
├── playbooks
│   ├── all.yaml
├── README.md
└── templates
├── hosts
   │ └── k3s-prod
    └── HelmChart-manifest-NginX-ingress.yaml
└── groups
```
| name | Type | Description |
|:---|:---:|:---|
| ansible.cfg | _file_ | Ansible configuration file applicable to this inventory |
| files | _directory_ | Contain files that a host may require. Playbook task iterates over by hostname and group name. Sub-directories for hostname / group-name |
| .inventory_root | _file_ | This file is used by `nfc_common` role to determin the root directory of the inventory. |
| inventory | _directory_ | Ansible inventory. If multiple inventories exist can use sub folders. |
| playbooks | _directory_ | Should be a git submodule. _This keeps inventory and playbooks SCM related to each only._ |
| README.md | _file_ | Inventory readme with applicable info. |
| templates | _directory_ | This directory is the same as the `files` directory except contains jinja templates. |
### Inventory
Naming of host inventory files is to use the hostname portion of the FQDN only. i.e. for a host with a FQDN of `myhostname.domain.tld` it's `inventory_hostname` would be `myhostname`. This requirement is a must as many parts of our roles and playbooks depend upon this value matching the DNS system.
#### hosts file
The hosts file `host.yaml` contains all hosts and by which group they are part of.
### Playbooks
### Templates
Templates directory contains only two sub-deirectories `groups` and `hosts` under each of these folders are folders by group/host name that contain template files. Preferernece is leaning toards not using the `.j2` extension as the IDE may loose functionality by using.
Naming of template files is in format `{item-type}-{what-uses}-{friendly name that uses underscores not hyphon}.{file_extension}`
| Item Type | what uses | Notes
|:---|:---:|:---|
| config | bind | Configuration file for bind dns server |
| dnszone | bind | a bind server DNS zone |
| `{kubernetes kind}` | manifest | A kubernetes manifest |
#### Feature gates
Templates when added to the group folder should be setup with a feature gate. This eanbles simple yaml to be defined to allow the template to deploy.
example of yaml declaration that host/group would read.
``` yaml
feature_gates:
is_prime: false
monitoring: true
operator_awx: true
operator_grafana: true
operator_prometheus: true
postgres_cluster: true
rook_ceph: true
```
Seting a feature gate on a template is as simple as enclosing the entire contents of the file with a jinja if statement. i.e. `{% if path.feature_gates.monitoring | default(false) | bool %}the content here{% endif %}`
## AWX / Tower / Automation Platform
### Prime host
If you use a system like AWX / Tower / Automation Platform the inventory should be designed in a way that you have a prime host. The prime host is a single host that once it exists, it's capable of rebuilding all of the infrastructure within the inventory. Using the prime host method, you only require the variable secrets (vault encrypted) of the prime host and only those pertinent to rebuilding the prime host. This should only be the backup decryption key (vault encrypted).
!!! warning Warning
Prime Host requires that the backup decryption key be updated within the inventory whenever it changes. There is also a requirement that the vault encryption key be available and not stored on infrastructure that without or that infrastructure not existing you cant access the vault key. i.e. password manager.
## ToDo
- Explain usage of file `.inventory_root` which must exist as nfc_common _(todo: see kubernetes playbook/master)_ _may no longer be required a project structure is known along with using variable `playbook_dir`_

View File

@ -0,0 +1,81 @@
---
title: Ansible Roles
description: No Fuss Computings Ansible Roles Projects
date: 2023-11-10
template: project.html
about: https://gitlab.com/nofusscomputing/projects/ansible
---
This section of the website contains Ansible roles and the details of how to use said projects. Across All of our Ansible roles we standardize as much as possible. This document will contain the details of said standardization.
Our roles:
- Common
- Docker Management
- [Firewall](firewall/index.md)
- Git Configuration
- [Home Assistant](homeassistant/index.md)
- [Kubernetes](kubernetes/index.md)
- SSH
## Role Requirements
This section covers what by default, be part of all ansible roles we create.
=== "ansible.builtin.set_stats"
As part of the role, setting of ansible stats with `ansible.builtin.set_stats` must be provided. This enables a single variable that can be used after the play has completed. Usage of a role that includes the usage of `ansible.builtin.set_stats` within AWX enables population of the artifacts and passing of the stats between workflows/job templates.
```yaml
- name: Stat Values
ansible.builtin.set_fact:
stat_values: |
{
"host_{{ inventory_hostname | replace('.', '_') | replace('-', '_') }}": {
"roles": {
role_name: {
"enabled": true,
"installed": false,
"empty_list": [],
"empty_dict": {}
}
},
playbooks: {
"{{ inventory_hostname }}": "here"
}
}
}
- name: Create Final Stats not Per Host
ansible.builtin.set_stats:
data: "{{ stat_values | from_yaml }}"
per_host: false
aggregate: true
- name: Clear Stat Values
ansible.builtin.set_fact:
stat_values: null
```
- `Stat Values` is only required if the variable names require expansion. _Can be omitted if no variable expansion required for variable name._
- `Create Final Stats not Per Host` sets the artifacts/stats.
- `Clear Stat Values` remove the stat fact. only required if using `Stat Values`.
!!! tip AWX Gotcha
AWX requires that `per_host` be set to `false` when setting stats for artifacts to work. Hence the structure of the artifacts above use hostname prefixed with `host_`. This method enables programatic checking if by host due to the presence of `host_` in the dictionary name.
=== "Variable naming"
- All Role Variables to be prefixed with the role name.

View File

@ -0,0 +1,5 @@
# Docker E-Mail Server
| :red_circle: This page is a placeholder for the ansible-roles repo's docs. |
|:---|
| _If you can see this page there has been an error, please report the issue on gitlab_ |

View File

View File

View File

@ -0,0 +1,5 @@
# Gitlab Continuous Integration Templates
| :red_circle: This page is a placeholder for the gitlab-ci repo's docs. |
|:---|
| _If you can see this page there has been an error, please report the issue on gitlab_ |

View File

@ -0,0 +1,5 @@
# Docker GLPI
| :red_circle: This page is a placeholder for the python-gitlab-management repo's docs. |
|:---|
| _If you can see this page there has been an error, please report the issue on gitlab_ |

9
pages/projects/index.md Normal file
View File

@ -0,0 +1,9 @@
---
tags:
- Development
- brand new
---
# No Fuss Computing Projects
## Our Projects

View File

@ -0,0 +1,5 @@
# Docker GLPI
| :red_circle: This page is a placeholder for the python-gitlab-management repo's docs. |
|:---|
| _If you can see this page there has been an error, please report the issue on gitlab_ |

View File

@ -0,0 +1,5 @@
# Python Gitlab Management
| :red_circle: This page is a placeholder for the python-gitlab-management repo's docs. |
|:---|
| _If you can see this page there has been an error, please report the issue on gitlab_ |

13
pages/robots.txt Normal file
View File

@ -0,0 +1,13 @@
User-agent: *
# example: Redirect 301 /oldpage.html /newpage.html
Redirect 301 /wiki/public/article/150225_choose_internet_service /articles/2015/choose_internet_service
Redirect 301 /wiki/syntax /operations/syntax
Redirect 301 /wiki/public/help/mdt/home /articles/2014/mdt_setup
Redirect 301 /wiki/public/help/mdt/applications /articles/2014/mdt_setup
Redirect 301 /wiki/public/help/mantis/* /wiki/info/*

121
pages/stylesheets/extra.css Normal file
View File

@ -0,0 +1,121 @@
html .md-social a[title="DockerHub"] {
color: #0DB7ED;
}
html .md-social a[title="Facebook"] {
color: #3B5998;
}
html .md-social a[title="Github"] {
color: #F5F5F5;
}
html .md-social a[title="Gitlab"] {
color: #fc6d26;
}
.docker {
color: #0DB7ED;
}
.facebook {
color: #3B5998;
}
.github {
color: #333;
}
.gitlab {
color: #fc6d26;
}
.tags {
background-color: #4051B5;
border-radius: 10px;
font-size: 12px;
color: white;
padding: 3px 6px;
text-align: center;
}
a.tags:hover {
color: #FFFF00;
}
.tags:link {
color: white;
}
.tags:visited {
color: white;
}
/* Blog Styles */
.mdx-author {
display: flex;
font-size: 13.6px;
}
.mdx-author img {
height: 40px;
border-radius: 100%;
}
.mdx-author p:first-child {
flex-shrink: 0;
margin-right: 16px;
}
.mdx-author p > span {
display: block;
}
.container{
width: 100%;
}
.container .row {
width: 95%;
margin: 0 auto;
height: fit-content;
}
.container .row:after {
content: "";
display: table;
clear: both;
}
.container .column {
float: left;
width: 50%;
padding-top: 30px;
}
.container .column .mdx-author {
padding-left: 30px;
}
.container .column h2 {
margin: 0px;
text-align: center;
}
.container .column ul {
margin: 0px;
}
.container .column h3 {
margin: 0px;
}
.container .column img {
height: 22px;
}
@media screen and ( max-width: 700px ) {
.container .column {
float: none;
width: 100%;
}
}

3
pages/tags.md Normal file
View File

@ -0,0 +1,3 @@
# tags
Do not edit this file as it is auto generated.

5
pytest.ini Normal file
View File

@ -0,0 +1,5 @@
[pytest]
#junit_suite_name=Unit Test
junit_log_passing_tests=true
#enable_assertion_pass_hook=true
junit_logging=all

4
test/requirements.txt Normal file
View File

@ -0,0 +1,4 @@
selenium==3.141.0
pytest==6.2.5
requests==2.27.1

164
test/unit/conftest.py Normal file
View File

@ -0,0 +1,164 @@
import hashlib
import json
import os
import re
import pytest
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
class Data:
def process_browser_log_entry(self, entry):
response = json.loads(entry['message'])['message']
return response
def parse_url(self, url):
request_protocol = re.match("^[http|file]+s?", url).group(0)
url_id = hashlib.md5(bytes(url, 'utf-8')).hexdigest()
if re.match("^http.*", url) is not None:
domain = re.match(r'^([a-z]+[\.|a-z|]+)',url.replace(request_protocol + '://', '')).group(0)
request_path = url.replace(request_protocol + '://','').replace(domain, '')[1:]
elif re.match("^file.*", url) is not None:
domain = 'file'
request_path = url.replace(request_protocol + '://','')[1:]
request_path = request_path.replace(self.suffux_path[1:], '')
return {
'url_id': url_id,
'url': url,
'request_protocol': request_protocol,
'domain': domain,
'request_path': request_path
}
def __init__(self):
caps = DesiredCapabilities.CHROME
caps['goog:loggingPrefs'] = {'performance': 'ALL'}
chrome_options = Options()
chrome_options.add_argument("no-sandbox")
chrome_options.add_argument("headless")
chrome_options.add_argument("start-maximized")
chrome_options.add_argument("window-size=1900,1080");
self.driver = webdriver.Chrome(desired_capabilities=caps, options=chrome_options)
self.urls = []
self.suffux_path = os.path.realpath('./build')
self.urls += [os.path.join(dp, f) for dp, dn, fn in os.walk(os.path.expanduser('./build')) for f in fn if f.endswith('.html')]
data = {
'page_load_resource_links': {},
'source_files': [],
'hyperlinks': {}
}
for check_file in self.urls:
check_url = 'file://' + self.suffux_path + check_file.replace('./build','')
source_file = check_file.replace('./build','')[1:]
if source_file not in data['source_files']:
data['source_files'].append(source_file)
self.driver.get(check_url)
links = self.driver.find_elements_by_css_selector("a")
for link in links:
link_location = link.location
url = link.get_attribute('href')
if 'gitlab.com/-/ide/project' not in url: # ignore gitlab ide links
if 'nofusscomputing.com' not in url: # ignore gitlab ide links
link = self.parse_url(url)
hyperlink_source_file = {'name': source_file, 'location': link_location}
if link['url_id'] in data['hyperlinks']:
data['hyperlinks'][link['url_id']]['source_files'].append(hyperlink_source_file)
else:
link['source_files'] = [ hyperlink_source_file ]
data['hyperlinks'][link['url_id']] = link
events = [self.process_browser_log_entry(entry) for entry in self.driver.get_log('performance')]
for entry in events:
if entry['method'] == 'Network.requestWillBeSent':
http_status = str([response['params']['response']['status'] for response in events if response['method'] == 'Network.responseReceived' and response['params']['requestId'] == entry['params']['requestId']]).replace('[', '').replace(']', '')
url = str(entry['params']['request']['url'])
url_id = hashlib.md5(bytes(url, 'utf-8')).hexdigest()
if re.match("^http|file.*", url) is not None:
source_file_line_number = ''
if 'lineNumber' in entry['params']['initiator']:
source_file_line_number = str(entry['params']['initiator']['lineNumber'])
request_protocol = re.match("^[http|file]+s?", url).group(0)
if re.match("^http.*", url) is not None:
domain = re.match(r'^([a-z]+[\.|a-z|]+)',url.replace(request_protocol + '://', '')).group(0)
request_path = url.replace(request_protocol + '://','').replace(domain, '')[1:]
elif re.match("^file.*", url) is not None:
domain = 'file'
request_path = url.replace(request_protocol + '://','')[1:]
if url_id in data['page_load_resource_links']:
data['page_load_resource_links'][url_id]['source_files'].append({'name': source_file, 'line_number': source_file_line_number, 'http_status': http_status})
else:
data['page_load_resource_links'][url_id] = {'url': url, 'request_protocol': request_protocol, 'domain': domain, 'request_path': request_path, 'source_files': [ {'name': source_file, 'line_number': source_file_line_number, 'http_status': http_status} ]}
self.driver.quit()
self.test_data = data
def __del__(self):
self.driver.quit()
print("\n"+'Creating test data')
print("\n\ntest data:\n" + json.dumps(Data().test_data, indent=2, default=str))

126
test/unit/main_test.py Normal file
View File

@ -0,0 +1,126 @@
import pytest
import os
from conftest import Data
class Test:
data = Data()
def setup_class(self):
#copy data so it can be used
self.source_files = self.data.test_data['source_files']
def setup_method(self):
self.ignore_url_alive_check = {
'gitlab.com': [
'nofusscomputing/infrastructure/website//-/new/development'
]
}
@pytest.mark.parametrize(
argnames='data',
argvalues=[link for url_id, link in data.test_data['hyperlinks'].items() if link['request_protocol'][0:4] =='http'],
ids=[url_id for url_id, link in data.test_data['hyperlinks'].items() if link['request_protocol'][0:4] =='http']
)
def test_hyperlink_external_alive_check(self, data):
"""Test hyperlinks that are found within each page of the site.
SSL verification has been disabled as this test only checks if the link is alive and valid.
Args:
data (dict): A dictionary of hyperlinks constructed within conftest.py
"""
from requests import get
from requests import packages
from urllib3.exceptions import InsecureRequestWarning
packages.urllib3.disable_warnings(category=InsecureRequestWarning)
request = get(data['url'], verify=False)
skip_test = False
print(str(data) + str(request.status_code))
if data['domain'] in self.ignore_url_alive_check:
if data['request_path'] in self.ignore_url_alive_check[data['domain']]:
skip_test = True
if not skip_test:
assert (
request.status_code == 200
or
request.status_code == 401
or
request.status_code == 403
), (
f"Hyperlink [{data['url_id']}] to location [{data['url']}] failed,"
f"with status [{request.status_code}].")
else:
assert True
@pytest.mark.parametrize(
argnames='data',
argvalues=[link for url_id, link in data.test_data['hyperlinks'].items() if link['request_protocol'][0:4] =='file' and link['request_path'] != ''],
ids=[url_id for url_id, link in data.test_data['hyperlinks'].items() if link['request_protocol'][0:4] =='file' and link['request_path'] != '']
)
def test_hyperlink_internal_alive_check(self, data):
""" Test all internal hyperlinks are valid and the page exists.
This test constructs the actual file path from a found internal (contains file as the protocol) link. After the link is found it is checked against the pages that exist.
Args:
data (list): list of dictionaries containing the urls to test
"""
path_suffix = os.path.realpath('./build')
print('URL Data:' + str(data))
request_path = str(data['request_path'])
if request_path[0:1] == '/':
if request_path[0:1] == request_path:
request_path = 'index.html'
else:
request_path = request_path[1:]
if '#' in request_path:
request_path_split = request_path.split('#')
request_path = str(request_path_split[0])
print('Debug # in path ' + request_path_split[0])
# Reconstruct a valid url. append 'index.html' for paths ending in '/'
if (request_path[len(request_path)-1:] == '/'
and request_path[len(request_path)-5:] != '.html'
):
request_path = str(request_path) + 'index.html'
elif (request_path[len(request_path)-1:] != '/'
and request_path[len(request_path)-5:] == '.html'
):
request_path = request_path
print('DEBUG consructed path:' + request_path)
assert request_path in self.source_files, (
f"hyperlink [{str(data['request_path'])}] that was reconstructed to[{request_path}] "
"does not exist. This link was found "
f"within the following pages [{str(data['source_files'])}]"
)
def teardown_method(self):
pass
def teardown_class(self):
del self.data

65
test/unit/privacy_test.py Normal file
View File

@ -0,0 +1,65 @@
import pytest
from conftest import Data
class Test:
data = Data()
def setup_method(self):
self.approved_external_requests = {
'gitlab.com': [
'api/v4/projects/nofusscomputing%2Finfrastructure%2Fwebsite',
'uploads/-/system/user/avatar/4125177/avatar.png'
]
}
@pytest.mark.parametrize(
argnames='data',
argvalues=[link for url_id, link in data.test_data['page_load_resource_links'].items() if link['request_protocol'][0:4] =='http'],
ids=[url_id for url_id, link in data.test_data['page_load_resource_links'].items() if link['request_protocol'][0:4] =='http']
)
def test_page_load_external_requests(self, data):
check_url = data['url']
print(str(data))
assert data['request_protocol'] == 'https', f"Insecure Request to domain [{data['request_path']}] in source files [{data['source_files']}]"
assert data['domain'] in self.approved_external_requests, f"A request is being made to a non-approved domain [{data['domain']}] path [{data['request_path']}] in source files [{data['source_files']}]"
assert data['request_path'] in self.approved_external_requests[data['domain']], f"A request is being made to a non-approved path [{data['request_path']}] on domain [{data['domain']}] in source files [{data['source_files']}]"
@pytest.mark.parametrize(
argnames='data',
argvalues=[link
for url_id, link in data.test_data['hyperlinks'].items()
if link['request_protocol'][0:4] =='http'],
ids=[url_id for url_id, link in data.test_data['hyperlinks'].items() if link['request_protocol'][0:4] =='http']
)
def test_ssl_hyperlinks_only(self, data):
"""Ensure all hyperlinks from our site are to https ONLY
Tests to ensure that all hyperlinks from our site are to 'https' links only. Any link that is not secure will fail this test.
Args:
data (dict): A dictionary of hyperlinks constructed within conftest.py
"""
print(str(data))
assert data['request_protocol'] == 'https', (
f"Hyperlink [{data['url_id']}] to location [{data['url']}] is insecure"
)
def teardown_method(self):
pass
def teardown_class(self):
del self.data

1
website-template Submodule

Submodule website-template added at 59b16501a6

View File

@ -0,0 +1,50 @@
====== 1. Bug Tracker Access ======
First go to the Bug and Feature Tracker at [[https://nofusscomputing.com/mantis/]].
===== 1.1. Access =====
You don't have a bug tracker account, but if you wish to log or track tickets you will need an account as the anonymous user wont allow you to do this. \\
==== 1.1.1 Guest Account ====
When you first navigate to the bug tracker you will be automatically logged on as an anonymous user. An anonymous user has view access to public projects and tickets only.
==== 1.1.2 Create Your Own Account ====
To create an account follow this [[https://nofusscomputing.com/mantis/signup_page.php|link]].
{{:public:help:mantis:mantislogon.png?nolink|The signup page}}
To create a new account please follow the steps below:
- Fill in your username using format //firstname.lastname//
- Fill in your E-Mail address that you wish to receive notification's on
- Fill in the CAPTCHA box //(using the image beside the input box)//
- Click on sign up.
You will be redirected to a new page and a confirmation email will be sent to you. To finalise the signup process please follow the instructions provided in the email.
===== 1.2. Lost/Forgotten password =====
You forgot your password? No Problems, [[https://nofusscomputing.com/mantis/lost_pwd_page.php|click Here]].
{{:public:help:mantis:mantisforgotpassword.png?nolink|Forgotten Password Page}}
From the forgotten passwords page please follow the steps below to reset your password:
- Enter your username
- Enter in the password you use for the Bug Tracker
- Click Submit
Once form has been submitted, instructions will be printed on the screen stating what you need to complete the password reset process.
===== 1.3. Login Form =====
{{:public:help:mantis:mantislogonscreen.png?nolink|}}
From the logon screen please follow the instructions below to logon
- Enter your username as set during account creation
- Enter your password
- Check this box to remember your logon details between browser sessions //You must have cookies enable to take advantage of this feature//
- Only allow your username to be used on this PC. //once you log out you will be able to use another PC//
- Click login, and [[02_browse|Browse the Bug Tracker]].
==== 1.3.1 Successful ====
* You will be redirected to the start page of the ticket tracker,
==== 1.3.2 Unsuccessful ====
* An error message will be displayed.
<WRAP important>The **Save Login** checkbox is used to remember your logon, even if you close the browser. The next time the browser is opened you will be directly authenticated under your username, if you checked this field. __//Don't use this feature on a shared computer//__ </WRAP>

View File

@ -0,0 +1,36 @@
====== 2. Browse the Bug Tracker ======
After login you are redirected to the **My View** page. There are four parts to the page:
* Header
* Menu Bar
* Body
* Footer
Each section of the page is described in further detail below.
===== 2.1. Header =====
The Header consists the Bug Tracker title, No Fuss Computing's own customized Mantis logo, the login information and the switch [[project]] select box.
==== 2.1.1 Project Select Box ====
This is where you select what project you would like to filter and display only those tickets. After you have selected the project, the page will automatically redirect.
===== 2.2. Menu Bar =====
The Menu Bar is how you navigate around the bug tracker and is comprised of the following links.
==== 2.2.1 Description ====
{{:public:help:mantis:mantismenubar.png?nolink|Bug Tracker Menu Bar}}
- My View
- View Issues
- Report Issue
- Change Log
- Road map
- My Account
- Logout
==== 2.2.2 Ticket Jump Box ====
Also included on the header bar is an input box. This input box is where you can put a ticket number in, once you enter a number press 'Enter'/'Click Jump' and you will be taken directly to that tickets detail page.
===== 2.3. Body =====
This section of the page is where the content of the site will be displayed, each time you click on a link within the Bug Tracker the body will update and change accordingly.
===== 2.4. Footer =====
The Footer begins after a horizontal rule and is composed of some info (copyright) on the left and the Mantis logo at right.

View File

@ -0,0 +1,108 @@
====== 3. Support Tickets ======
Support tickets are a way to enable you, the end user; to communicate with the developers or owners of a specific product. this method of communication will enable you to directly affect the product you are reporting on by filing bug tickets or feature requests.\\
\\
When you file a ticket on No Fuss Computing's Bug and Feature Tracker you will be directly communicating with the person who creates the product you are reporting on.
===== 3.1. Reporting =====
To report a bug, isssue, improvement or to request a feature please click on 'Report Issue' on the menu Bar.
==== 3.1.1 Select a Project ====
When you click this link, and if you haven't selected a project; you will be redirected to the 'Select Project' Page.
{{ :public:help:mantis:mantisreportselectproject.png?nolink |}}\\
- Select the project you wish to report on
- Click 'Select Project'
<WRAP tip center 90%>If you check 'Make Default' every time you use the bug tracker you will not have to select a project. but if you wish to refer to other projects, you will have to manually select the project on the top right of the screen </WRAP>
==== 3.1.2 Report Form ====
You will be required to fill in the following form. More details on each of the fields are covered below.
{{ :public:help:mantis:mantisreport.png?nolink |Mantis Ticket Reporting}}
=== 3.1.2.1 Category ===
Category: Select the most appropriate category for the report. These categories are pre-defined by the administrator. If you are completely unsure then select "other" as a the category.
=== 3.1.2.2 Reproducibility ===
This is the key to being able to quickly fix a bug possible values are:
- Always
- Some times
- Random
- Have not tried
- Unable to reproduce
- N/A
If you are not reporting an issue then select N/A.
=== 3.1.2.3 Severity ===
This dictates how bad you think the problem is and genrally if correctly assessed will become the order in which it gets fixed.
Severity levels are:
- block - //prevents further work / progress from being made//
- crash - // crashes the application or OS//
- major - // major bug//
- minor - // minor bug//
- tweak - // needs tweaking (Graphic alignment, formatting, etc)//
- text - // error in the text, grammar, wording, etc//
- trivial - // being nit picky//
- feature - // request new feature//
<WRAP info Center 90%>the severity level may be changed by a developer, this only occurs if you have been a little zealous with your grading of the problem.</WRAP>
=== 3.1.2.4 Priority ===
Priority is how quickly you think it should be fixed. The available priorities are:
- None
- Low
- Normal
- High
- Urgent
- Immediate
<WRAP info Center 90%>Yes, you may think a problem should be fixed straight away, but at the end of the day a developer needs to prioritize all of their work so your assessed priority may be down graded.</WRAP>
=== 3.1.2.5 Summary ===
A one line description of the problem. Please be helpful, and make it descriptive for the developer, meaningful titles get your issue looked at sooner.
=== 3.1.2.6 Description ===
A detailed description of the problem. As a rule of thumb you should always enter enough information for the developer to feel like he is in your shoes. a good way to be descriptive is to start of by answering the following two questions:
- What is the product doing that it should __not__ be doing?
- What is the product __not__ doing that it should be doing?
Once you have answered those two questions, state what you were doing that led to the issue. Describe what you were doing, what you expected to happen, what should have happened, the error, setup and system settings, software version(s), and possible ideas and suspicions.\\
\\
** Feature Requests**\\
If you wish to change something than the description you put here must be relatively descriptive covering What you want done, what you want to achieve and how you want it to look. __Please no 2000 page novels!!__
=== 3.1.2.7 Steps To Reproduce ===
List the detailed steps to reproduce a problem. This is useful for bugs that take a while to show up or tricky cases. A developer will take an order of magnitude more time to fix a bug that is not easily reproducible. So, if at all possible go back and try to reproduce the bug.\\
\\
It would be best to use a bullet format like:
* Step 1
* Step 2
* Step 3
=== 3.1.2.8 Additional Information ===
Any extra information that you didnt put into the description goes here. This might be a dump of the error, a proposed fix, or anything that is related to, but not directly a part of the request.
=== 3.1.2.9 Upload File ===
If necessary then you can attach a document or any image like Screen Shoot of the bug.
=== 3.1.2.10 View Status ===
Allows You to set who can view it. Private: Only you and a developer can see it and public: anyone who has access to the project.
=== 3.1.2.11 Submit Report ===
After submit the report it will be filed with the other requests on the bug tracker; ready for a developer to review your request.
On submission, a notification will be sent to the person responsible for the project.
===== 3.2 Notification =====
Whenever there is any update or change to a ticket you have filed you will receive notification via E-Mail.
<WRAP tip center 90%>notifications are on by default, if you do not wish to receive email about changes to your tick goto [[04_manage_account#notifications|Account Management]]</WRAP>
===== 3.3. Monitor a Ticket =====
Our bug tracker gives you the ability to monitor a ticket. if you monitor a ticket you will be notified every time there is a change to the ticket. //As long as you haven't changed your notification settings!//
{{ :public:help:mantis:mantismonitor.png?nolink |}}
To monitor please follow thes steps
- goto the ticket you wish to monitor
- put your user name in the 'users monitoring this issue box'
- click add, and your username should be displayed.

View File

@ -0,0 +1,38 @@
====== 4. Manage Account ======
This section of the bug tracker will allow you to change your E-Mail and password. It also has subsections to manage and change other preferences.\\
\\
Each section can be navigated to by clicking on the links in the upper right corner; the following sub-sections are available:
* My Account
* Preferences
* Profiles
===== 4.1. Pages =====
==== 4.1.1 My Account ====
This section gives you the ability to change your E-Mail address and password. within this section you also get a list of projects you have access to including the level of access.
==== 4.1.2 Preferences ====
Within this section you can customize the following preferences:
- Default Project - //This is the project you are automatically logged into when you log into the bug tracker//
- Refresh Delay - //You can set the view bugs pages to refresh every X minutes. 0 means never refresh, The defeult is 30 minutes//
- Redirect Delay - //Each action page has a delay value that you can set. Minimum of 0//
- Email on New - //Email you if you are a Developer, Manager, or Administrator when a new bug report is filed.//
- Email on Assigned - //Email you when a bug you are attached to is set to assigned//
- Email on Feedback - //Email you when a bug you are attached to is set to feedback status//
- Email on Resolved - //Email you when a bug you are attached to is set to resolved status//
- Email on Closed - //Email you when a bug you are attached to is set to closed status//
- Email on Reopened - //Email you when a bug you are attached to is Reopened//
- Email on Bug note Added - //Email you when a bug you are attached to has a bug note added//
- Email on Status Change - //Email you when the status of a bug you are attached to is changed//
- Email on Priority Change - //Email you when the priority of a bug you are attached to is changed//
- Timezone - //the timezone your in, will enable the times on tickets to be displayed in your local timezone//
- Language - //Select your language//
You can reset the defaults with the "Reset Prefs" button. The administrator sets the default values in the configuration file.
==== 4.1.3 Profiles ====
Here you can add new profiles. This is useful when you don't want to keep re-entering your system configuration in the Advanced Bug Reports. It allows for multiple bug reports for multiple system configurations. There is a "Description" field as a catchall for more details
===== 4.2 Notifications =====
All notifications from us come from our helpdesk and if it is from or bug tracker the name will be "NFC Bug and Feature Tracker".

View File

@ -0,0 +1,109 @@
====== 5. Ticket Workflow and Transitions ======
The Management of tickets on our ticketing system is left to either an administrator, manager or developer. at each stage of the ticket being worked on the ticket status will be reflected to show what stage the ticket is at.
===== 5.1 Status =====
The status of a ticket is denoted on and publicly available to anyone who can view the ticket. The available status' for a ticket is as follows:
* New
* Feedback
* Acknowledged
* Confirmed
* Assigned
* Resolved
* Closed
Each of the ticket status' will be explained further below.
==== 5.1.1 New ====
When a ticket is first created, it's status will be automatically set as 'New'. This status also reflects that the reporter has just left feedback, but only if the previous status was 'Feedback'. Normally, a ticket shouldn't remain marked as 'new' for too long; but that is dependant on a few factors. Being workload, or ticket priority.
==== 5.1.2 Feedback ====
A developer, Manager or administrator require feedback. there will always be a note added if this status is requested. on first instance the note left will denote who the feedback is required from. as soon as that person generally the ticket raiser leaves the feedback (Note) the ticket status will automatically change to 'New'.
==== 5.1.3 Acknowledged ====
A developer, Manager or administrator have acknowledged the ticket or feedback received. Also of note for this status. no one on the development team have attempted to reproduce this issue, if applicable.
==== 5.1.4 Confirmed ====
A developer, Manager or administrator have either confirmed this as an issue or are able to reproduce the cause. This status is optional and may not be used at all for the ticket workflow.
==== 5.1.5 Assigned ====
A developer, Manager or administrator have begun to work on a ticket. This status will always be assigned to a person on the development team, the actual person working on a resolution. the general workflow after this status is either, Acknowledged/Confirmed as applicable if the ticket is no longer being worked on or resolved.
==== 5.1.6 Resolved ====
The ticket has been resolved or deemed to be resolved by a developer, Manager or administrator. when a ticket is marked as resolved, it will have a designated resolution assigned by the developer, Manager or administrator as well.
==== 5.1.7 Closed ====
This status reflects that the issue is closed and no further action is required on it.
===== 5.2 Workflow =====
As each ticket is worked on it's status will updated to reflect what is happening in relation to the ticket. This reflection is done by adjusting the ticket status. the basic workflow of a ticket is as follows
New -> Acknowledged -> Confirmed -> Assigned -> Resolved
This basic workflow can change depending on what the requirements to the ticket are for instance, if a developer needs to ask a question, then the 'Feedback' status will be used which can add additional steps i.e.
New -> Feedback -> New -> Acknowledged -> Confirmed -> Assigned -> Resolved.
After a ticket has been assigned it's workflow can either go backwards or forwards. for instance, a ticket is assigned to developer A as he has begun working on it, Now if developer A can not continue to work on the ticket, they would return it to either, Acknowledged or confirmed as applicable. now if Developer B decides to work on this ticket he would assign it to himself.
New -> Assigned -> Acknowledged -> Assigned -> Resolved.
The workflow can spear off in many different directions, some status' can be or may be missed, but generally when this happens it is done as it may not be necessary to change to a certain status. i.e. ticket is new, developer notices that it is a small fix and can resolve the ticket straight away, so therefor would immediately resolve the ticket without following the basic workflow.
There is however one exception, that being a ticket with a status of 'Feedback', which will always return to 'New' after the required person leaves feedback. when ever there is a change in status, there should always be notes to accompany them, depending on your level of access, unless you left the note you may not be able to view it if the note has been marked as private.
==== 5.2.1 Transitions ====
As per the workflows as denoted above the transitions between each status are as follows
^ Current Status ^ Next Available Status |
| NEW | acknowledged,feedback,confirmed,assigned,resolved |
| FEEDBACK | new,acknowledged,confirmed,assigned,resolved |
| ACKNOWLEDGED | confirmed,feedback,assigned,resolved |
| CONFIRMED | assigned,feedback,acknowledged,resolved |
| ASSIGNED | resolved,feedback,acknowledged,confirmed |
| RESOLVED | closed,feedback,assigned |
| CLOSED | feedback,assigned |
==== 5.2.2 Thresholds ====
All status' have permissions or access levels on who can change that status. Typically these thresholds are set at developer or higher. Feedback is the only status that can be changed by anyone else. The reported if required to leave feedback, on leaving a note in this status will automatically set the status back to new.
===== 5.3 Resolution =====
When ticket is marked as either resolved of closed there is a resolution field that is set as well. this resolution further denotes the resolution of the ticket. when the ticket is marked as resolved, a version should also be selected. This way the change log feature of the ticketing system will automagically record the changes for a particular version. The available resolutions are:
* open
* Fixed
* reopened
* unable to reproduce
* Not Fixable
* duplicate
* No change required
* Suspended
* Won't fix
when a ticket is either closed or resolved one of these will be selected to denote the final resolution in relation to the ticket.
==== 5.3.1 Open ====
Ticket is open, this should not be selected if the ticket is being resolved or closed.
==== 5.3.2 Fixed ====
The ticket is considered resolved with a devised fix.
==== 5.3.3 reopened ====
That the ticket has been reopened, this should not be used for a status of closed or resolved.
==== 5.3.4 unable to reproduce ====
A member of the development team can no reproduce your issue and is either closing or marking the ticket as resolved based on that.
==== 5.3.5 Not Fixable ====
The ticket issue can not be fixed. normally this resolution will only be used if the issue is outside of there control.
==== 5.3.6 duplicate ====
the ticket is a duplicate of another ticket. if this resolution is selected then the duplicate ticket number is to be entered in the applicable field (Applies to Development Team only)
==== 5.3.7 No change required ====
There is no action that the development team needs to implement.
==== 5.3.8 Suspended ====
There is no timeframe set for or if this ticket will be worked on. generally items that have been marked with this resolution are considered to be 'Wish list' items.
==== 5.3.9 Won't fix ====
Exactly as the resolution states. the development team will not be fixing the ticket. this could be for any number of reasons, a note will generally be added to support the reasons behind this resolution.

View File

@ -0,0 +1,38 @@
~~NOCACHE~~
~~NOTOC~~
{{ :public:logos:nfc_mantis_logo.png?nolink |}}
====== Bug and Feature Tracker User Manual ======
This Manual describes our bug and feature tracker, Mantis; and how you can view, report and monitor bugs and/or features. \\
\\
**Table of Contents:**
* [[01_access]]
* [[01_access#1.1. Access]]
* [[01_access#1.2. Lost/Forgotten password]]
* [[01_access#1.3. Login Form]]
* [[02_browse]]
* [[02_browse#2.1. Header]]
* [[02_browse#2.2. Menu Bar]]
* [[02_browse#2.3. Body]]
* [[02_browse#2.4. Footer]]
* [[03_tickets]]
* [[03_tickets#3.1. Reporting]]
* [[03_tickets#3.2. Notifications]]
* [[03_tickets#3.3. Monitor a Ticket]]
* [[04_manage_account]]
* [[04_manage_account#4.1. Pages]]
* [[04_manage_account#4.2 Notifications]]
* [[05_workflow_transitions]]
* [[05_workflow_transitions#5.1 Status]]
* [[05_workflow_transitions#5.2 Workflow]]
* [[05_workflow_transitions#5.3 Resolution]]
* [[Search]]
* [[Report]]
* [[Update]]
* [[Print]]
<WRAP info>
If you identify any issues, inconsistencies or would like to suggest an improvement to this 'Bug and Feature Tracker Manual', Please open a Feature ticket and reference [[mantis>81|Feature Ticket #81]] as a parent to your ticket.
</WRAP>

View File

@ -0,0 +1,9 @@
====== ======
This file is used by the [[public:projects:application_manager:home|Application Manager]] when installing Mozilla Firefox.
===== Download =====
<WRAP center download 90%>
<file text filename.txt>
</file>
</WRAP>

View File

@ -0,0 +1,52 @@
====== Mozilla Firefox - Mozilla.cfg ======
This file is used by the [[public:projects:application_manager:home|Application Manager]] when installing Mozilla Firefox.
===== Download =====
<WRAP center download 90%>
<file java mozilla.cfg>
//
try {
lockPref("app.update.enabled", false);
lockPref("app.update.autoUpdateEnabled", false);
lockPref("extensions.update.enabled", true);
lockPref("extensions.update.autoUpdateEnabled", false);
lockPref("dwhelper.conversion-enabled", false);
lockPref("dwhelper.conversion-was-enabled", true);
lockPref("dwhelper.convert-free", true);
lockPref("dwhelper.first-time", false);
lockPref("dwhelper.mediaweight", "1024");
lockPref("dwhelper.menu-expiration", 60);
lockPref("dwhelper.passwords-migrated", true);
lockPref("dwhelper.storagedirectory", "h:\\downloads");
lockPref("security.enable_ssl3", true);
lockPref("security.enable_tls", true);
// Clear History when firefox closed
lockPref("privacy.sanitize.sanitizeOnShutdown", true);
lockPref("privacy.sanitize.promptOnSanitize", false);
lockPref("privacy.item.downloads", true);
lockPref("privacy.item.cache", true);
lockPref("privacy.item.cookies", true);
lockPref("privacy.item.sessions", true);
lockPref("privacy.item.history", false);
lockPref("browser.startup.homepage", "http://nofusscomputing.com");
//disable firefox dns cache
lockPref("network.dnsCacheExpiration", 0);
// Change default paper size from US-Letter to A4:
lockPref("print.postscript.paper_size", "A4");
// added to remove browser rights
lockPref("browser.rights.3.shown", true);
lockPref("browser.download.panel.firstSessionCompleted", true);
} catch(e) {
displayError("lockedPref", e);
}
</file>
</WRAP>

View File

@ -0,0 +1,10 @@
====== Mozilla Firefox - Local-Settings.js ======
This file is used by the [[public:projects:application_manager:home|Application Manager]] when installing Mozilla Firefox.
===== Download =====
<WRAP center download 90%>
<file java Local-Settings.js>
pref("general.config.obscure_value", 0);
pref("general.config.filename", "mozilla.cfg");
</file>
</WRAP>

View File

@ -0,0 +1,151 @@
====== Application.XML ======
<WRAP center 90%>
| [[public:projects:application_manager:user_documentation:home]] | [[public:projects:application_manager:home| Application Manager Home]] | [[public:projects:application_manager:administration_documentation:home]] |
</WRAP>
This file is used by the Application Manager to either install or uninstall an application including any custom tasks that are required to be run.
===== Packages =====
This is the root XML Node. this tells the Application Manager that the XML contains one or more Application Packages. This node must contain at least one 'ApplicationPackage' Node but can contain as many as you would like.
===== ApplicationPackage =====
This node is sub node of 'Packages' but the root node for the application being processed. This node also has sub-nodes that are essentially tasks. This node also has attributes that pertinent to the application being installed.
==== Attributes ====
^ Attribute Name ^ Type ^ Valid Values ^ Max Length ^ Description ^
| Arch | String | AMD64\\ Any\\ x86 | 5 | Used to determine what processor architecture to process this application on. |
| ID | String | ASCII Chars | 5 | This is a unique value assigned to each application. if you use a SHA256 then our database will be queried for the application details. |
| Name | String | ASCII Chars | 255 | The value used here is what is presented to the end user in the log file. |
| Version | Float | Major.Minor[.Build[.Revision]]\\ i.e.\\ 1.2\\ 1.2.3\\ 1.2.3.4 | | This attribute contains the version to be installed. A valid Value is the version that is found in the registry after it has been installed. |
| Reboot | Boolean | TRUE\\ FALSE | 5 | Regardless for what exit codes tell the Application manager to do if this is set to true then a reboot will occur after installation. |
| [Uninstall] | String | ASCII Chars | | This value contains the Registry Key Name that will be used to determine if the Application is installed. |
| //Values in '[ ]' are optional// |||||
===== FileDetails =====
This node contains the download information for the application installer. There must be a minimum of one Download sub-node.
==== Download Node Attributes ====
^ Attribute Name ^ Type ^ Valid Values ^ Max Length ^ Description ^
| Arch | String | AMD64\\ Any\\ x86 | 5 | Processor Architecture to run this download. |
| Extension | String | ASCII | 3 | File extension of the file being downloaded. |
| SHA1 | HEX String | ASCII | 40 | This value indicates what the Hash of the download should be. There must be at least one hash type attribute. if two hash attributes are added the order of precedence is SHA256 followed by SHA1. |
| SHA256 | HEX String | ASCII | 64 |::: |
| URL | String | ASCII | | File Download URL. must contain '%%http://%%' or '%%https://%%' |
| [Path] | String | ASCII | | SubPath for download. //(Dependant Downloads ONLY!)//((:TODO: Confirm this is optional)) |
| //Values in '[ ]' are optional// |||||
===== Dependencies =====
Dependencies are required for this application to install correctly. the dependencies can be another application or an additional file that may be needed, i.e. configuration file, addon etc.
==== Application Node Attributes ====
^ Attribute Name ^ Type ^ Valid Values ^ Max Length ^ Description ^
| Arch | String | AMD64\\ Any\\ x86 | 5 | The architecture of the software to install. |
| ID | HEX String | ASCII | 64 | The Unique ID of the application you would like installed first. |
| Name | String | ASCII | | This is the name of the dependant application, this value will be used in the log files. |
| //Both attributes are required // |||||
==== Download Node Attributes ====
The download node attributes are the same as the 'filedetails' [[#Download Node Attributes|download attributes]].
===== Install =====
This Node contains the install command, Installer exit code, checks and what tasks should be run when the application is installed.
^ Attribute Name ^ Type ^ Valid Values ^ Max Length ^ Description ^
| Command | String | ASCII | | The command to start the installer |
| Switches | String | ASCII | | The switches required for the installer. Namely the silent install switches. |
| //**These attributes may not available your [[public:projects:application_manager:features|version]].** Both attributes are required // |||||
==== Exit Code ===
^ Attribute Name ^ Type ^ Valid Values ^ Max Length ^ Description ^
| Code | Integer | ASCII | | the exit code that the installer should have for successful completion. |
| [Reboot] | Boolean | TRUE\\ FALSE | 5 | This optional value tells the plugin manager whether it should reboot if this exit code is returned. |
| //Values in '[ ]' are optional// |||||
==== Check ====
^ Attribute Name ^ Type ^ Valid Values ^ Max Length ^ Description ^^
| Arch | String | AMD64\\ Any\\ x86 | 5 | Processor Architecture that this check should run on. ||
| Type | String | File\\ Registry | 8 | The type of check that should be run. ||
|::: ^ Check Type ^ Attribute Name ^ Type ^ Valid Value / Max Length ^ Description ^
|::: | File | Logic | String | Hash | Check File Hash. if this attribute is included than either MD5, SHA1 or SHA256 attributes also need to be included. |
|::: |::: | MD5 | HEX String | 32 | MD5 of file of file to check. |
|::: |::: | SHA1 |::: | 40 | SHA1 of file of file to check. |
|::: |::: | SHA256 |::: | 64 | SHA256 of file of file to check. |
|::: | Registry | Logic | String | KeyValue | The type of registry check to conduct. |
|::: |::: | Key | String | ASCII | The Registry key to check. |
|::: |::: | SubKey | String | ASCII | ??? |
|::: |::: | Value | String | ASCII | The Value of what the Registry Key should equal. |
| //Values in '[ ]' are optional// ||||||
==== Task ====
^ Attribute Name ^ Type ^ Valid Values ^ Max Length ^ Description ^^
| Arch | String | AMD64\\ Any\\ x86 | 5 | Processor Architecture that this check should run on. ||
| Description | String | ASCII | 255 | the description of what the task is going to do. ||
| Type | String | Command\\ Copy\\ Delete\\ Move\\ Registry | | The type of check that should be run. ||
|::: ^ Check Type ^ Attribute Name ^ Type ^ Valid Value / Max Length ^ Description ^
|::: |Command | Command | String | | Command to run. |
|::: |::: | Switches |::: | | Switches to run command, namely for silent running. |
|::: |::: | ExitCode | Integer | | The exit code that should be returned from the application. |
|::: | Copy | Source | String | 255 | Source Location. |
|::: |::: | Destination |::: | 255 | Destination Location. |
|::: |::: | SHA256 |::: | | The hash of the file to be copied. |
|::: | Delete | Source | String | 255 | The File or Directory to Delete. |
|::: |::: | PartB |::: | | ??? is the required... |
|::: | Move | PartA | String | | Source Location. |
|::: |::: | PartB |::: | | Destination Location. |
|::: | Registry | Key | String | ASCII/? | Registry Hive Key. |
|::: |::: | SubKey |::: | ASCII/? | ??? |
|::: |::: | Value |::: | ASCII/? | Registry Value to set. |
| //Values in '[ ]' are optional// ||||||
===== Uninstall =====
====== Example Download ======
<WRAP center download 95%>
<code xml Application-Template.xml>
<Packages>
<ApplicationPackage
Arch=""
ID=""
Name=""
Version=""
Reboot=""
Uninstall="">
<FileDetails>
<Download Arch="Any" URL="" Extension="" SHA256="" />
</FileDetails>
<Dependencies>
<Application Arch="" ID="" Name="" />
<Download Arch="" FileName="" URL="" SHA256="" Path="" />
</Dependencies>
<Install Command="" Switches="">
<Exit Code="0" Reboot="True"/>
<Check Arch="" Type="File" Logic="Hash" File="" SHA256="" />
<Check Arch="" Type="File" Logic="Hash" File="" SHA1="" />
<Check Arch="" Type="Registry" Logic="KeyValue" Key="" SubKey="" Value="" />
<Task Arch="" Description="" Type="Command" ExitCode="" Command="" Switches="" />
<Task Arch="" Description="" Type="Copy" PartA="" PartB="" SHA256="" />
<!-- Copy file destination can either have filename or without. if without add trailing slash -->
<Task Arch="" Description="" Type="Delete" PartA="" PartB="" />
<Task Arch="" Description="" Type="Move" PartA="" PartB="" />
<Task Arch="" Description="" Type="Registry" Key="" SubKey="" Value="" />
</Install>
<Uninstall Command="" Switches="">
<Exit Code="3010"/>
<Exit Code="0" />
</Uninstall>
</ApplicationPackage>
</Packages>
</code>
</WRAP>

View File

@ -0,0 +1,43 @@
====== Available Applications XML File ======
<WRAP center 90%>
| [[public:projects:application_manager:user_documentation:home]] | [[public:projects:application_manager:home| Application Manager Home]] | [[public:projects:application_manager:administration_documentation:home]] |
</WRAP>
This file is used by the Application Manager to display a list of available applications.
===== ApplicationPackage =====
This node is sub node of 'Packages' but the root node for the application available for install. This node has no sub-nodes. This node contains attributes that pertinent to the application that are displayed within the GUI. There must be a minimum of one node but can contain as many as you wish.
==== Attributes ====
^ Attribute Name ^ Type ^ Valid Values ^ Max Length ^ Description ^
| Arch | String | AMD64\\ Any\\ x86 | 5 | Used to determine what processor architecture to process this application on. |
| Category | String | ??? | | What category the application will be displayed under. |
| [Logo] | String | ??? | | The image name for the Application, inc file extension. |
| ID | String | ASCII Chars | 5 | This is a unique value assigned to each application. if you use a SHA256 then our database will be queried for the application details. |
| Name | String | ASCII Chars | 255 | The value used here is what is presented to the end user in the log file. |
| [Description] | String | ASCII Chars | ???? | The is used to display the description on the GUI. |
| Version | Float | Major.Minor[.Build[.Revision]]\\ i.e.\\ 1.2\\ 1.2.3\\ 1.2.3.4 | | This attribute contains the version to be installed. A valid Value is the version that is found in the registry after it has been installed. |
| Reboot | Boolean | TRUE\\ FALSE | 5 | Regardless for what exit codes tell the Application manager to do if this is set to true then a reboot will occur after installation. |
| [Uninstall] | String | ASCII Chars | | This value contains the Registry Key Name that will be used to determine if the Application is installed. |
| [InstallerSize] | Sting | ASCII Chars | ??? | The download size of the installer. |
| //Values in '[ ]' are optional// |||||
====== Example Download ======
<WRAP center download 95%>
<code xml Available-Applications-Template.xml>
<Packages>
<ApplicationPackage
Category=""
Logo=""
Arch=""
ID=""
Name=""
InstallerSize=""
Version=""
Reboot=""
Uninstall="" />
</Packages>
</code>
</WRAP>

View File

@ -0,0 +1,59 @@
====== Configuration ======
<WRAP center 90%>
| [[public:projects:application_manager:user_documentation:home]] | [[public:projects:application_manager:home| Application Manager Home]] | [[public:projects:application_manager:administration_documentation:home]] |
</WRAP>
The configuration/custom settings for the Application Manager are saved to the windows registry. The settings that are saved there are done so by using the GUI. Any setting an administrator places there will also be utilised by the Application Manager, as long as they are valid.
===== Settings =====
All Settings for the Application Manager are saved under the root location of //HKLM\SOFTWARE\NoFussComputing\SCMS\Plugins\ApplicationManager// within the Windows Registry. There are two subkeys available for use under this path and they are used for individual applications settings and they are:
* //HKLM\SOFTWARE\NoFussComputing\SCMS\Plugins\ApplicationManager\Managed\[ApplicationID]// - Individual Application Settings for Managed Applications
* //HKLM\SOFTWARE\NoFussComputing\SCMS\Plugins\ApplicationManager\User\[ApplicationID]// - Individual Application Settings for Custom Applications :TODO: Confirm this has custom settings
Each application is a sub-key based on its [[.:application_xml_file#applicationpackage|Application ID]] under the root settings location. This Sub-Key name is derived by our system and by default will be a SHA256 of the Application. You can locate the package ID from our [[NFC>database/computer/applications/home|Application Database]]((Still Under development))
<WRAP tip center 95%>All Application Manager settings can be exported to a registry file by using the following command
reg EXPORT HKLM\SOFTWARE\NoFussComputing\SCMS\Plugins\ApplicationManager [PathtoFile]\ApplicationManager.reg
Possible Reasons to export:
* Backup of settings/applications to manage
* to Import to a different machine to maintain consistent settings and managed applications
Import with
reg EXPORT HKLM\SOFTWARE\NoFussComputing\SCMS\Plugins\ApplicationManager [PathtoFile]\ApplicationManager.reg
</WRAP>
==== Application Manager Settings ====
All Application Manager settings are saved within the same location within the Windows Registry under the HKLM hive.
* //HKLM\SOFTWARE\NoFussComputing\SCMS\Plugins\ApplicationManager//
These settings are 'REG_SZ' values and can be safely exported and re-imported without affecting the performance of the Application Manager.
=== Settings ===
By default, there are no settings placed in the registry by the Application Manager. The only time settings are placed there, is when a end user of the Application Manager customizes the setting within the GUI.
^ Setting ^ Type ^ Value(s) ^ Max Length ^ Default Value ^ Description ^
| MinDriveSpace | Integer | # | 2 | 5 | This is the amount in 'GigaBytes' of hard drive space to set aside as system reserved space. |
| OverRideMinDriveSpace | Boolean | True | 4 | //Null// | Override the the default of 5GB drive space reserved with the value in 'MinDriveSpace' |
<WRAP center important 90%>
Using the setting 'OverRideMinDriveSpace' can have dire consequences for system stability, __ONLY__ use this setting if you know what you are doing.
</WRAP>
==== Individual Application Install Settings ====
Individual Applications are saved under the Application Package Key as a //REG_SZ// String Value. By default if the Setting Does not exist the Application Manager will choose the default action applicable to that setting.
^ Name ^ Type ^ Value(s) ^ Default Action ^ Description ^
| Architecture | String | AMD64\\ x86 | Install Architecture that matches OS. | The processor architecture of the software to install. |
| Update | String | False | Update to new version when it becomes available. | Tells the Application Manager not to update the application. |
| Version | String | 1.2//[.3[.4]]// | Install Current and newest supported version | The version of the software to install. |
| //items enclosed with '[ ]' are optional.// ||||
All settings that the Application Manager uses are saved to the registry under //HKLM\SOFTWARE\NoFussComputing\SCMS\Plugins\ApplicationManager.//

View File

@ -0,0 +1,31 @@
====== Administration Documentation ======
<WRAP center 90%>
| [[public:projects:application_manager:user_documentation:home]] | [[public:projects:application_manager:home| Application Manager Home]] |
</WRAP>
Not only is the Application Manager a simple and easy to use application for those with a lack of computing knowledge, but we have added lots of [[..:features|features]] for the more savvy computer user as well. This section of the documentation covers those extra or more advanced [[..:features|features]].
===== Table of Contents =====
* [[.configuration]]
* [[.application_xml_file]]
* [[.available_applications_xml_file]]
* [[.launch_managed_application_installer]] :TODO:
* [[.notes]]
* [[.logging]] :TODO: Create the rest of these docs.
\\
\\
\\
===== Stuff that is likely to disappear from this page =====
{{pagequery>@. *;
label=Sub Pages;
limit=80;
sort=pageid:asc;
name;
proper;
cols=1;
showstart;
hidejump;
hidemsg;
display={title} }}

View File

@ -0,0 +1,63 @@
====== Managed Installation ======
<WRAP download>
<WRAP info>This file may download with a .txt file extension. Please adjust the file extension so that it reflects the file you are downloading.</WRAP>
<code dos Install-SCMS_and_Import_settings.cmd>
@echo off
REM -----------------------------------------------------------------------
REM Application Manager Silent Installer
REM and
REM Installation of Managed Applications
REM
REM Version: 2015-06-28
REM There is no licence available for the script, use at will!!
REM http://nofusscomputing.com/wiki/public/projects/application_manager/administration_documentation/how_to/managed_installation_and_deployment
REM -----------------------------------------------------------------------
echo.
echo.
echo *******************************************************
echo.
echo Installing SCMS
echo.
echo *******************************************************
echo.
echo Please Wait......
REM Change these Filename's (After the equal sign) to match the file name of the installer, and registry settings to import.
SET SCMSFilename=SCMS.msi
SET RegFileName=ExportedApplicationManagerConfiguration.reg
IF %PROCESSOR_ARCHITECTURE%==x86 SET ProgPath=Program Files
IF %PROCESSOR_ARCHITECTURE%==AMD64 SET ProgPath=Program Files (x86)
msiexec /i "%~dp0%SCMSFilename%" /passive /NOREBOOT
if %ERRORLEVEL%== 0 GOTO ImportRegistry
REM Application failed to install, exit script and pass error to launching process.
GOTO ErrorEnd
:ImportRegistry
reg IMPORT %dp0%RegFileName%
if %ERRORLEVEL%== 0 GOTO LaunchInstaller
REM Application settings import failed, exit script and pass error to launching process.
GOTO ErrorEnd
:LaunchInstaller
start /wait "C:\%SOEProgPath%\NoFussComputing\SCMS\SOETray.exe" InstallManagedApplications
REM Exit script with ERRORLEVEL 0
exit
:ErrorEnd
exit %ERRORLEVEL%
</code>
</WRAP>

View File

@ -0,0 +1,51 @@
====== Application Manager - Launching ======
<WRAP center 90%>
| [[public:projects:application_manager:user_documentation:home]] | [[public:projects:application_manager:home| Application Manager Home]] | [[public:projects:application_manager:administration_documentation:home]] |
</WRAP>
The Application manager shortcut is located in the start menu under "Utilities->Application Manager" Launching the Application Manager without administrative permissions will give you read access to the interface. If opened with Administrative permissions you will have full access to the Application Manager features.
===== Switches =====
==== Application Manager Interface ====
To start the Application Manager from the command line use the following command:
[SCMS Install Path]\soetray.exe ApplicationManager
Using the same command within a shortcut will enable you to launch the Application Manager as well.
==== Managed Application Installer ====
You can manually launch the application installer from the command line to do so run:
[SCMS Install Path]\soetray.exe InstallManagedApplications
Use this option to launch the installer and display the Desktop notification panel. this switch does not have to be launched with administrative permissions, but if it is and the Worker Service has not been started it will attempt to start it. If launched without administrative permissions the normal install process will be run, as long as the worker service has been started((Automatically starts when windows boots up)).
**NO GUI Option with exit code**
[SCMS Install Path]\soetray.exe InstallManagedApplications NoGUI
**NOTE:** //This switch must be launched with administrative permissioins, without it, the application will __NOT__ launch and will return an [[public:projects:scms:command_line|Error]]// This switch would be used if you don't want to display a GUI
The normal [[public:projects:application_manager:administration_documentation:logging|logging feature]] available during software install, is also utilised with this switch.
==== Usage scenarios ====
As long as you launch this switch with administrative permissions you are only limited by your imagination. Possible usage scenarios include:
* part of a task sequence from MDT/SCCM
* startup script
* psexec to remote computer that has SCMS installed
* During user logon as a logon script
==== TODO ====
:TODO:
* what licence is this feature avail in.
* explain about log file
*

View File

@ -0,0 +1,20 @@
====== Logging ======
<WRAP center 90%>
| [[public:projects:application_manager:user_documentation:home]] | [[public:projects:application_manager:home| Application Manager Home]] | [[public:projects:application_manager:administration_documentation:home]] |
</WRAP>
:TODO: Fix these docs
The SCMS logs directly to the Event log under the application Log 'SCMS'
===== Error Numbers =====
The error numbers for the logging derive from the severity levels as defined in [[https://tools.ietf.org/html/rfc5424| RFC5424]]. this Enables easy identification of the output of the logging entry.
[[public:projects:scms:logging]]
Session Log
C:\Windows\Temp\
Application Log
C:\Program Data\NoFussComputing\ApplicationManager\

View File

@ -0,0 +1,16 @@
====== Application Manager - Notes======
<WRAP center 90%>
| [[public:projects:application_manager:user_documentation:home]] | [[public:projects:application_manager:home| Application Manager Home]] | [[public:projects:application_manager:administration_documentation:home]] |
</WRAP>
:TODO: write this documentation better.
Other pages that are WIP\\
* [[.how_to/managed_installation_and_deployment]]
===== Notes =====
items in this section need to be added to the documentation.
- Adding Images: PNG32 file type with a transparent background. Canvas size is 120x120px and image is 110x110px

View File

@ -0,0 +1,32 @@
====== Release Features ======
<WRAP center 90%>
| [[public:projects:application_manager:user_documentation:home]] | [[public:projects:application_manager:home| Application Manager Home]] | [[public:projects:application_manager:administration_documentation:home]] |
</WRAP>
This page will eventually contain what features will be available in the releases.
===== Home =====
The home version is designed to be easy to use and to meet a majority of the requirements a home user would need.
==== Features ====
* Install application in just a few clicks,
* Automatically deploys software
* Removes crap/bloat ware((Yet to be implemented))
===== Professional =====
:TODO: **This version is yet to be created.** The Professional Version is designed to have all of the bells and whistles. This version will not only enable you to have all of the same features as a home user but offer centralized management and more customizations.
==== Features ====
* [[public:projects:application_manager:administration_documentation:launch_managed_application_installer#Managed Application Installer|Launch Installer from Command Line]]
===== Wishlist =====
* Central management of all clients
* auto updating of software
* write your own Deployable Software Package
* Deploy OS with it
* USMT Package
* Filter list by searching
* integrate into Active Directory Sites and services.
* Keep track of what users download
* tell users the approx install time
*

View File

@ -0,0 +1,25 @@
====== Application Manager ======
<WRAP center info 80%>
This Application is still under development. The documentation and or any information you find pertaining to this product may be different from the final release.
</WRAP>
<wrap center 95% em>//GOAL: Provide a solution for end users to easily install software on their computer and keep it up to date, regardless of their computing experience.//</wrap>
The Application Manager has been designed as a point and click solution to install software on your computer. This point and click is so simple your grandma could use it. There are only two steps to install software
- Select the software you would like to install, and
- Click //'install'//.
As soon as you click install the Application Manager Confirms the software is not already installed, if not; downloads the application installer including any dependencies, installs the application, confirms the application installed and runs any additional tasks. All of this in the background __//without any user intervention.//__ Please check out our [[.:features|features]] page for more information.
To make life easier and a little more logical we have broken our documentation up in to two sections.
* [[public:projects:application_manager:administration_documentation:home]], for those who want to get their hands dirty.
* [[public:projects:application_manager:user_documentation:home]], how to use the interface and application in general.
Useful Links
* [[NFC>mantis/set_project.php?project_id=48;49|Bug and Feature Tracker]], Request a feature or notify us of a bug.
* [[NFC>mantis/roadmap_page.php?project_id=49|Roadmap]], see what we are about to implement
* [[NFC>mantis/changelog_page.php?project_id=49|Changemap]], see what we have implemented.
===== Management Interface =====
{{ :public:projects:application_manager:management_interface.png?nolink |No Fuss Computing's Application Manager}}

View File

@ -0,0 +1,21 @@
====== Software Categories ======
<WRAP center 90%>
| [[public:projects:application_manager:user_documentation:home]] | [[public:projects:application_manager:home| Application Manager Home]] | [[public:projects:application_manager:administration_documentation:home]] |
</WRAP>
Each Software package has been arranged into a category. Below you find all of the categories we use including a short description of each.
^ Image ^ Name ^ Description |
| {{:public:projects:application_manager:icons:compress.png?nolink|}} | Compress | Software that offers file archiving i.e. .zip, ,7z, .gz etc. |
| {{:public:projects:application_manager:icons:null.png?nolink|}} | Communication | Communication software covers anything that would be used to offer voice or video communication with another person, i.e chat program |
| {{:public:projects:application_manager:icons:developer.png?nolink|}} | Developer | Developer Tools. |
| {{:public:projects:application_manager:icons:driver.png?nolink|}} | Driver | System drivers. |
| {{:public:projects:application_manager:icons:null.png?nolink|}} | E-Mail | E-Mail Applications. |
| {{:public:projects:application_manager:icons:image.png?nolink|}} | Image | Image Editing, manipulation Applications. |
| {{:public:projects:application_manager:icons:multimedia.png?nolink|}} | Multimedia | Multimedia Applications, including viewing, editing and processing. |
| {{:public:projects:application_manager:icons:null.png?nolink|}} | Null | this is a placeholder category, if an application shows under this category, the creator has made a typo in the [[..:administration_documentation:application_xml_file#ApplicationPackage|application.xml]]. |
| {{:public:projects:application_manager:icons:office.png?nolink|}} | Office | Document editing/authoring applications. |
| {{:public:projects:application_manager:icons:runtime.png?nolink|}} | Runtime | Run Time Environments, i.e. browser plugin, IML applications. |
| {{:public:projects:application_manager:icons:utility.png?nolink|}} | Utility | System utility or administration tools. |
| {{:public:projects:application_manager:icons:webbrowser.png?nolink|}} | Web Browser | Web browsing applications. |

View File

@ -0,0 +1,23 @@
====== User Documentation ======
<WRAP center 90%>
| [[public:projects:application_manager:user_documentation:home]] | [[public:projects:application_manager:home| Application Manager Home]] | [[public:projects:application_manager:administration_documentation:home]] |
</WRAP>
===== Table of Contents =====
* [[.:application_categories]]
* [[..:features]]
* [[.:interface]]
===== Random stuff that will probably disappear from the page =====
{{pagequery>@. *;
label=Sub Pages;
limit=80;
sort=pageid:asc;
name;
proper;
cols=1;
showstart;
hidejump;
hidemsg;
display={title} }}

View File

@ -0,0 +1,14 @@
====== User Interface ======
<WRAP center 90%>
| [[public:projects:application_manager:user_documentation:home]] | [[public:projects:application_manager:home| Application Manager Home]] | [[public:projects:application_manager:administration_documentation:home]] |
</WRAP>
:TODO: Fix up this page
==== Installed Status ====
^ Colour ^ Description ^
| Green | Application is not installed. |
| Yellow | User does not have access to view. |
| Orange | No uninstall information was provided within the [[public:projects:application_manager:administration_documentation:application_xml_file#Attributes|Application Configuration file]], or the uninstall information was left blank. |
| Red | Not Installed |

View File

@ -0,0 +1,70 @@
====== Policy - Application Beta Tester ======
As an application BETA tester for No Fuss Computing (NFC) you will have access to the new features of our software as part of the program. These features may or may not make part of the end product, as your responsibility is to test this/these new features for but not limited to viability, usability and functionality. When ever a new feature is created and/or released you will be notified so you may test as required/instructed.
===== Security and Privacy=====
Our Privacy policy is also applicable to you as a beta tester, please refer to them in our [[#Useful Links|Useful Links]] Section. The Privacy Policy may change from time to time, it remains your responsibility to keep informed of its contents.
All software installers and application files are signed and branded by us. This enables you to confirm that it was us, who have released it. For more information please take a look at our [[public/help/nfc_software|Software Branding page]]
=====Installation=====
Before the commencement of installing our software I will need to know your Windows flavor and architecture (Yes, it's windows only software). It would also be preferable to know how often you use your computer and how often it is shutdown/rebooted. When it is time to install or reinstall I will provide you with a link for this application. you will require administrative permissions to install this application.
==== SCMS Plugin Manager ====
To install the [[public/projects/scms/home|SCMS Plugin Manager]], just double click and leave all settings as default in the installer. The app will install to C:\Program Files\NoFussComputing\SCMS\ (Program Files x86) on a AMD64.
The files inside the directory should be
- scms.dll,
- SOETray.exe (a tray application)
- SCMSService.exe (Background Service that does all of the tasks.)
<WRAP center help 90%>
All of these files should be signed to confirm right click the file and open properties and there should be a digital signatures tab, The name of the Signer or certificate provider should contain 'NFC Software Department'
</WRAP>
After install you may also notice there is an additional log within event viewer called 'SCMS', this is where our application logs info to.
===== Your Responsibilities =====
==== Information Required ====
To partake as a BETA tester for NFC, I may from time to time require additional information from you. Any additional information required will be requested from us and contain the reason for this additional information.
As a minimum and prior to you commencement as a BETA tester I will require the following information:
* PCID
* //(the PCID is generated from the app itself and can be found in the tray icon by right click it (spanner and orange+grey screw driver icon) and click about, the PCID is on the splash window, I should only need the first 8 and last 8 hex digits to marry your PC to the logs and add your PC to the beta testers group.)//
==== Registration ====
You will be required to be registered on our Community Forum and our Bug and Feature tracker. The registration process for both areas of the site is quite simple and follows a simple methodology of "follow the bouncing ball"
Click the relevant name to register you account. [[nfc>community/ucp.php?mode=register|Community Forum]] and [[nfc>mantis/signup_page.php|NFC Bug and Feature Tracker]] for their respective registration pages.
==== Reporting ====
If you identify any issues with our software you will be required to report them via our [[nfc>mantis/|bug and feature tracker]]. Any responses required by us will need to be answered within a suitable time frame, approx 24hrs. You can also request additional features be added to our software on the bug and feature tracker as well. There also maybe times when we require you to do additional things that we haven't or wont place in our software, these should be few and far between. also if we require you to send any files (Windows Error Reports, Crash dumps) these will need to be sent to helpdesk email address only.
To locate the windows error reports, please navigate to [[public/help/windows_error_reports|Windows Error Reports]] for more info.
For an application crash, in the error box that pops up, within that window the location of the dmp and xml file will be provided, that you will need to send through.
===== Summary =====
Hopefully and I say this lightly, 99% of the time you won't even notice this application on your computer. This part of the application is just the plugin manager and after a bit more testing I will begin to develop the plugins, this is where you can start to reap the rewards of installing my software and being a beta tester. If you didn't already know I am a single person not an entire organization with endless resources, to that end and around my day job and family life, I work as much a possible to make your computing experience with us a less than painful and enjoyable one.
If you have any further questions, please don't hesitate to contact me.
**Please Note**: if you attempt to access our website with a secure connection, i.e. https you will be presented with a certificate error, if this occurs there is no need for concern. We create and self sign our own certificates due to it not being viable to spend thousands of dollars on buying a certificate from a registered Certificate Authority.
Our Certificate Authority details can be found at [[/public/help/nfc_software]].
=====Useful Links=====
* https://nofusscomputing.com/mantis/ - Bug and feature tracker
* http://nofusscomputing.com/wiki/public/projects/scms/scms_client_changelog - this is our changelog, and is updated everytime we are working on our code.
* http://nofusscomputing.com/mantis/changelog_page.php?project_id=3 - This is our bug and feature change log
* http://nofusscomputing.com/mantis/roadmap_page.php?project_id=3 - This is the road map for bugs a features for future releases.

17
wiki/current/projects/home.txt Executable file
View File

@ -0,0 +1,17 @@
~~NOTOC~~
====== NFC Projects ======
Here at No Fuss Computing (NFC) we do a lot of research and development. Namely this RD is done for our own requirements, which is to manage our own computers and/or network. On occasion though, these projects may be made available to the general Public.
To find our projects please scroll down to [[#Our Projects|our projects]]. Please Note though, not all listed projects below are available to the public. To find out it's release status, view the applicable projects page.
===== Applications =====
- [[.:logongui|Logon GUI]]
- [[.:scms:home|SOE Centralized Management System (SCMS)]]
- [[.:application_manager:home| Application Manager]]
- [[public:projects:scms:command_line]]
- [[.:xbmc_addons:home| XBMC Addons]]
===== Policy =====
- [[public/privacy]]
- [[.:beta_tester|Application Beta Tester]]

View File

@ -0,0 +1,154 @@
====== Windows Logon Script GUI ======
===== 1. Introduction =====
The logon GUI is a VB.net application designed to run shell scripts or programs and display their progress in a GUI. Initially I just planned to update my old HTA Logon scripts but soon discovered that a Logon GUI would look more professional and provide the end user with just enough information to be informed if the logon process was a success. See [[mantis>66|Ticket #66]].
===== 2. How it Works =====
The Logon GUI is added as a users logon script, either by using Group Policy or the Logon Script within the Users Profile Tab the script will run when a user logs on. The GUI will load before the desktop and call each of the four pre-designated scripts simultaneously. As each script runs and when they provide feedback, the GUI will update the progress bars accordingly.\\ The Logon GUI will as a minimum, run for seven seconds. there is a two second pause before script processing starts and a further five second pause after all scripts complete.
==== 2.1 Progress Bars ====
The progress bars are an indication of how far each stage of the logon process has come; generally the bar will be blue. The following table denotes the colours available.
^ Script Code ^ Colour ^ Explaination ^
| 0 | Blue | Normal |
| 1 | Red | Error |
| 2 | Orange | Warning |
| 3 | Light Gray | No Script Found |
==== 2.2 Features ====
- Provide feedback to users by changing colour of the progress bars.(Assists admins to quickly fault find.)
- Automatic exit after five minutes. regardless of if the shell scripts have finished processing. (This will stop script errors from locking the logon at the GUI)
===== 3. Scripts =====
Any command line script that outputs to the command line will work with this GUI((As soon as I extend it past VBScripts.)). The scripts are stored in the same path as the LogonGUI executable.
==== 3.1 Pre-defined Script Names ====
The following script names can be used for the Logon GUI(( Supported File Extensions: .vbs (VB Script) )).
- NetworkDrives
- UserProfile
- Other
- SOECheck
==== 3.2 Output String ====
The script that runs must output a correctly formatted string. This string provides information to update the GUI accordingly and without a valid output string the GUI may freeze or crash.\\ Example Script output for the Logon GUI:
5-,-32-,-0-,-Finished mapping G Drive
Output Key
| Example | | 5 | -,- | 25 | -,- | 0 | -,- | StartedLogon |
^ Key ^ ^ Total \\ Commands ^ Seperator ^ Progress Level ^ Seperator ^ Error ^ Seperator ^ Message ^
| Variable Type | | Integer | -,- | Integer (< = 100) | -,- | Integer | -,- | String |
=== Total Commands ===
This is the total commands that the script is going to run and is hard coded into the script.
=== Progress Level ===
The progress bar is incremented upto a max value of 100. This value will increase each time a command runs and is stepped up to a value of 100/TotalCommands.
=== Error ===
:TODO: Not yet implemented\\
This value is an integer, if this value changes to anything other than 0 the highest number will remain and so to will the colour of the progress bar. so if the script returns a 2, the progress bar will remain the same colour as warning.
=== Message ===
The message that is placed here is what will be added to the log file. The logfile is saved to %USERPROFILE%\LogonGUI-{SCRIPTNAME}.log and gets over written every time the user logos on.
===== 4. Other info =====
==== 4.1 System Requirements ====
| **Operating System:** \\ (Tested) | Windows 7 |
| :::| Windows Server 2008 |
| **Domain Client:** | Netlogon Share on Domain Controller |
| **Standalone Client:** | Netlogon Share on the local machine |
| **Hard Drive Space:**| |
| LogonGUI: | 150kb |
| Scripts: | as Large as they are |
| .NET 2.0 Runtime Installed ||
| good understanding of scripting ||
==== 4.2 Troubleshooting ====
- **LogonGUI.exe Crashes:** generally this indicates a script error, quite possably in the script output.
- **Progress Bar Orange:** if it is only one bar then a warning command has been issued by the adjacent script, if there was a five minute delay and all progress bars went orange then one or more of the scripts failed to complete.
- **Progress Bar Light Gray:** The adjacent script was not found.
==== 4.3 Logon GUI Screenshots ====
{{:public:applications:logongui:logonguinormal.png?nolink|}}\\
Normal Operation: The progress bars look like this under normal operation. Once the applicable script is found it will step the progress bar to 3% before it commences to increment the progress bar.
{{:public:applications:logongui:logonguinoscripts.png?nolink|}}\\
No Script Found: progress bar will still complete but they will be gray in colour.
{{:public:applications:logongui:logonguiwarning.png?nolink|}}\\
Warning Demo: progress bar will change to orange.
===== 5 Download =====
This application is not freely availible and if you would like to utilise this application, for a small fee I may be able to provide it to you. Please use the contact us form at nofusscomputing.com.
==== 5.1 VBScript Template File ====
The scipt below has only been saved as a record of history. please use the [[.:logongui/script_template|new script template.]]
<WRAP download><WRAP info>This file will download with a .txt file extension. Please rename the file so it has the right extension as per the mentioned filename.</WRAP>
<file vbnet LogonGUI-Template.vbs>
'************************************************************************
' No Fuss Computing
' LogonGUI VBScript Template
'
' Created By: Jon @ No Fuss Computing
' Created on 07 Jun 2014
' Filename: LogonGUI-Template.vbs
'************************************************************************
Set objShell = Wscript.CreateObject("Wscript.Shell")
Set objNetwork = CreateObject("Wscript.Network")
Dim iProgressStep, iTotalMappings, iIncrement
' Default Integers Dont Modify!
iIncrement = 1
'SOF *******************Custom Variables**********************************
strUserName = ucase((objNetwork.UserName))
'EOF *********************************************************************
' Set Logon GUI Variables
iTotalMappings = 10 ' Change this as required
iProgressStep = 100 / iTotalMappings ' Don't Change!!
call main() ' Launch Script
Sub Main()
' Insert your code in here.
' Don't forget to use progress out after each command so the progress bar increments and the GUI doesn't Freeze!!.
End Sub ' EOF Sub Main
'
' *************************************** Functions ********************************************
'
Function ProgressOut(sMessage)
' This is a default Function Don't remove!!
Wscript.Echo(iTotalMappings & "-,-" & (iIncrement * iProgressStep) & "-,-" & sMessage)
iIncrement = iIncrement + 1
End Function
'
'********************** Your Custom Functions Below this Line **********************************
'
</file>
</WRAP>

View File

@ -0,0 +1,50 @@
==== Logon GUI Script Template File ====
Below you will find the script template file. the requirements for this script template are that you know how to read and write in VBScript. you are only limited by your imagination.
<WRAP download><WRAP info>This file will download with a .txt file extension. Please rename the file so it has the right extension as per the mentioned filename.</WRAP>
<file vbnet LogonGUI-Template.vbs>
<job id="NetworkDrives">
<script language="VBScript" src="Includes\Functions.vbs"/>
<script language="VBScript" src="Includes\Variables.vbs"/>
<script language="VBScript">
' The script includes directives above are only required if you need to
' include additional files or would like to cleanup your code by using additional files.
'************************************************************************
' No Fuss Computing Logon GUI
' template.wsf
'
' Created By: Jon Lockwood
' Created on 07 Jun 2014
'
' Modified BY:
' Jon Lockwood, 05 Sep 15 - changed script extension to .wsf
'************************************************************************
' Set Logon GUI Variables
iTotalMappings = 10 ' Change this as required
iProgressStep = 100 / iTotalMappings ' Don't Change!!
' Launch
call main()
Sub Main()
'Your Code goes in here, don't forget to generate a progress out message
End Sub
'
' *************************************** Functions ********************************************
'
Function ProgressOut(sMessage)
' This is a default Function Don't remove!!
Wscript.Echo(iTotalMappings & "-,-" & (iIncrement * iProgressStep) & "-,-" & sMessage)
iIncrement = iIncrement + 1
End Function
'
'********************** Your Custom Functions Below this Line **********************************
' Place your cusom functions below this line.
</script>
</job>
</file>
</WRAP>

View File

@ -0,0 +1,16 @@
====== SCMS Command Line Switches ======
When you use our installer to install the SCMS it will automatically create the shortcuts you require to utilise the plugins of the SCMS.
===== Switches =====
To view the different switches for each component please review the relevant section of our wiki as listed below.
* [[public:projects:application_manager:administration_documentation:launch_managed_application_installer]]
===== Application Exit Codes =====
The SCMS will return exit codes when the application closes. in most case a success will be returned. depending on what you are doing the following are the exit code the application will return.
^ Exit Code ^ Name ^ Description ^
| 0 | Success | Task Finished as it should have. |
| 1 | Warning/Error | Check the log file for more information as a Warning or Error occurred during the task that was run |
| 99 | Bad Argument | The switch used to launch the application is invalid. |
| 666 | Not an Admin User | The installer was launched without administrative permissions. |

View File

@ -0,0 +1,41 @@
====== SCMS Plugin Manager ======
The SCMS plugin manager has been designed as a way for us to quickly and easily deploy Software to the end User and for us to extend our services to the users desktop. The plugin manager is provided to anyone free of charge. Why is it free? You ask, simple the plugin manager is just the interface to our software and the actual tasks it runs don't directly benefit you.
Once installed you will notice a new icon in the notification area, this is where you can access all of the features the plugin Manager has to Offer .
For this software to function you will periodically require an active internet connection.
===== Background tasks =====
There are numerous background tasks that run that we have added to the Plugin Manager that improves our services. The main task of the Plugin Manager is to conduct system inventories.
We collect this data to improve our services, namely our computer information database. The information that we collect and provide as part of our services is not linked back to you. The only exception to this is if you are one of our beta testers we require this information to be linked to you, that way if we identify an issue we can contact the person who the Issue relates to so we can rectify any issue with our software.
The data that we collect is the equivalent of us collecting the details of your residence i.e. your house colour, number of walls, how many cupboards, doors, windows, colours of objects and who made them etc. we don't collect the equivalent details of its occupants, visitors or activities that are carried out.
The tasks that the SCMS runs are pre-programmed into the application meaning, we can't tell your computer to do something funky. These tasks only run when we require them to. Each pre-programmed task has been hard written into the application if we require your PC to run a task, when it checks in with the SCMS Server We send a unique task command that instructs the SCMS on what we would like done. We have not and do not intend to add to our Software in any way Shape or form the ability for us to run random Windows commands/scripts, to us we would consider this to be a Violation of your trust and leave your Computer available for abuse.
===== Pre-Programmed tasks =====
System inventory: the inventory task collects details on Your computer the details we collect are Via the windows management Interface (WMI) which is a part of windows and collects details on Your CPU, Ram, Hard drive, installed Software, Services, Start up applications, Computer Bios and Manufacture and model information.
In the future we have plans to Increase the tasks that the SCMS can perform some of these tasks include but are not limited to ability to upload debug and crash logs and auto updating of SCMS.
===== FAQ =====
**why do we Collect this data?**\\
If there was one answer given, it would be to improve our Services. Currently with the inventory information that we collect, it will be used by us to create our computer information database. This Information will be publicly available and enable people to have one location to find out things about computers. For example: what are the hardware specs for a particular computer, who IS the manufacture' for a piece of hardware you have Or IS my computer capable of running a piece of software/ hardware or operating System. Eventually this will link into a hardware Driver database we intend on creating and further assist as with future Software development.
**will this Software Spy on me or monitor my computer activities?**\\
NO! Even though this software does collect details about your computer it doesn't pertain to the who and what you do with your computer.
**if this Software is sent Commands, does that mean anyone Can tell my computer what to do?**\\
NO! Our Software has been built with Security In mind, only we can instruct the SCMS plugin manager what to do. All Communication to us From the SCMS IS encrypted and before any Communication Occurs the Software and SCMS Server run through Security checks including confirming it is the actual SCMS Server. Another check includes a Scenario where we ceased operations-if this was to occur the SCMS Manager Would cease having the ability to receive remote commands.
===== See Also =====
- [[scms_client_changelog|SCMS Plugin Manager Changelog]]
- [[NFC>mantis/view_all_bug_page.php?project_id=3 | SCMS Plugin Manager bug and Feature Tickets]]
- [[NFC>mantis/changelog_page.php?project_id=3 | SCMS Bug and Feature Tracker Changelog]]
- [[NFC>mantis/roadmap_page.php?project_id=3 | SCMS Bug and Feature Tracker Roadmap]]

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,327 @@
====== SCMS Server Change Log ======
Below are the changes as they were made to the [[public:applications:scms:server|SCMS Server]]. each time the repository has a change this changelog is automaticly updated.\\
===== Change log =====
//NOTE: There maybe some changesets missing. Only changesets applicable to non developers are listed below.//
<wrap em>111</wrap>//**:bbb564d5e19b**// 2015-06-27 15:48 +1000<wrap center 90%> // Feature: #228 Added Application Node 'InstallerSize' //</wrap>
<wrap em>110</wrap>//**:92d0172b5109**// 2015-06-27 15:48 +1000<wrap center 90%> // Version Support //</wrap>
<wrap em>109</wrap>//**:f7a6d0d03089**// 2015-06-25 18:47 +1000<wrap center 90%> // Feature: #211 Support for file help link. //</wrap>
<wrap em>108</wrap>//**:39015f6c3c05**// 2015-06-25 14:07 +1000<wrap center 90%> // Feature: #210 Request Version and Architecture for custom config. //</wrap>
<wrap em>107</wrap>//**:dc975c7ab06f**// 2015-06-25 12:57 +1000<wrap center 90%> // Feature: #210 Supporting new features. //</wrap>
<wrap em>105</wrap>//**:ca4de1469ce1**// 2015-06-24 18:02 +1000<wrap center 90%> // Bug: not selecting the right version or architecture //</wrap>
<wrap em>104</wrap>//**:ad8edde986b6**// 2015-06-24 11:43 +1000<wrap center 90%> // Bug: #232 Selection Suported versions. //</wrap>
<wrap em>103</wrap>//**:e305b6a96683**// 2015-06-24 10:14 +1000<wrap center 90%> // Bug: #232 Selection of correct and current version. //</wrap>
<wrap em>102</wrap>//**:d8606e382b73**// 2015-06-24 09:20 +1000<wrap center 90%> // bug: syntax error //</wrap>
<wrap em>101</wrap>//**:7912ebe5700d**// 2015-06-23 20:40 +1000<wrap center 90%> // Security: #58 fix //</wrap>
<wrap em>100</wrap>//**:1d90154fef0b**// 2015-06-23 20:14 +1000<wrap center 90%> // Bug: filename had a spcae in it. //</wrap>
<wrap em>98</wrap>//**:47fd1f1e70a9**// 2015-06-21 21:07 +1000<wrap center 90%> // 296 (fb44bb8329fb) Feature: #210 Arch and version support added to app.xml for user customizations. //</wrap>
<wrap em>97</wrap>//**:1d4d0c19bee4**// 2015-06-21 17:16 +1000<wrap center 90%> // Release: Version Support. //</wrap>
<wrap em>96</wrap>//**:502740df9d36**// 2015-06-21 16:34 +1000<wrap center 90%> // Feature: #229 Dependent Applications, and requesting by processor type support. //</wrap>
<wrap em>95</wrap>//**:f7c2512dd1d8**// 2015-06-21 15:03 +1000<wrap center 90%> // Feature: #230 Adjusted DB storage type //</wrap>
<wrap em>94</wrap>//**:f575f1dc6a37**// 2015-06-21 15:00 +1000<wrap center 90%> // Feature: #229 Added dependent Application to AppXML and Arch to Application subnode in Dependant node. //</wrap>
<wrap em>93</wrap>//**:d36b99761cca**// 2015-06-21 14:57 +1000<wrap center 90%> // Feature: #230 Adjusted DB storage type //</wrap>
<wrap em>92</wrap>//**:138646b97049**// 2015-06-21 11:12 +1000<wrap center 90%> // Feature: #230 Adjusted DB storage type //</wrap>
<wrap em>91</wrap>//**:52626eaef0f6**// 2015-06-20 20:45 +1000<wrap center 90%> // Silent switches added. //</wrap>
<wrap em>90</wrap>//**:344ce381cc8d**// 2015-06-20 18:12 +1000<wrap center 90%> // Future code: optional XML Nodes wont be output if empty. //</wrap>
<wrap em>89</wrap>//**:536d891b6dea**// 2015-06-20 18:10 +1000<wrap center 90%> // Bug: time wasnt being recorded for processes being run. //</wrap>
<wrap em>88</wrap>//**:5d06d468311a**// 2015-06-20 12:33 +1000<wrap center 90%> // Bug: #220 fixed up selecting arch and version //</wrap>
<wrap em>87</wrap>//**:568617870341**// 2015-06-18 18:59 +1000<wrap center 90%> // Bug: #220 adjusted to accept architectecture //</wrap>
<wrap em>86</wrap>//**:fe8358d5f963**// 2015-06-14 20:31 +1000<wrap center 90%> // Bug: #58 Log entries were being converted to lower case. //</wrap>
<wrap em>85</wrap>//**:fae34b6b113e**// 2015-06-14 17:15 +1000<wrap center 90%> // debug //</wrap>
<wrap em>84</wrap>//**:7c798e8f11b4**// 2015-06-14 09:43 +1000<wrap center 90%> // Development: #58 Added download Size for installer to interface. //</wrap>
<wrap em>83</wrap>//**:857ecf230118**// 2015-06-13 21:02 +1000<wrap center 90%> // Development: #216 Added initial Dynamic XML Creation //</wrap>
<wrap em>82</wrap>//**:03c7eb4be50a**// 2015-06-10 21:13 +1000<wrap center 90%> // New Apps. //</wrap>
<wrap em>81</wrap>//**:f57f0b931303**// 2015-06-10 20:46 +1000<wrap center 90%> // Version Support //</wrap>
<wrap em>80</wrap>//**:6e4669563b94**// 2015-06-10 20:46 +1000<wrap center 90%> // Bug: fixed DB input //</wrap>
<wrap em>79</wrap>//**:7d4e2a05dc12**// 2015-06-08 19:43 +1000<wrap center 90%> // Commit due to this being Client bugs. //</wrap>
<wrap em>78</wrap>//**:d9fc957c2335**// 2015-06-08 19:43 +1000<wrap center 90%> // Version Support //</wrap>
<wrap em>77</wrap>//**:a8d65667541f**// 2015-06-08 19:41 +1000<wrap center 90%> // Bug: #191 Incorrect fields being inserted into DB. //</wrap>
<wrap em>76</wrap>//**:742e46e25902**// 2015-06-06 14:25 +1000<wrap center 90%> // Bug: #170 Headers being sent where incorrect. //</wrap>
<wrap em>75</wrap>//**:3463c6f1b416**// 2015-06-05 16:40 +1000<wrap center 90%> // Release: Support 1.1.15.1 //</wrap>
<wrap em>74</wrap>//**:a2db4bc4a9cc**// 2015-06-05 13:34 +1000<wrap center 90%> // Development: #58 Status Reporting. //</wrap>
<wrap em>73</wrap>//**:5b3d93513bbc**// 2015-06-05 10:01 +1000<wrap center 90%> // Bug: incorrect headers. //</wrap>
<wrap em>72</wrap>//**:0f6c5db79226**// 2015-06-05 10:00 +1000<wrap center 90%> // Development: #58 Logging and reporting. //</wrap>
<wrap em>71</wrap>//**:66a940d6e168**// 2015-06-04 22:35 +1000<wrap center 90%> // Development: #58 Full Lining of application manager //</wrap>
<wrap em>70</wrap>//**:cf53aa4e5ad0**// 2015-06-04 11:59 +1000<wrap center 90%> // Development: #58 Added initial Application Manager functionality. //</wrap>
<wrap em>69</wrap>//**:c9547a85fe35**// 2015-05-30 19:00 +1000<wrap center 90%> // Development: #58 Amended Applist.xml //</wrap>
<wrap em>68</wrap>//**:1fc6addc6746**// 2015-05-30 11:51 +1000<wrap center 90%> // Development: #58 AppList //</wrap>
<wrap em>67</wrap>//**:cc55de699ef4**// 2015-05-30 11:50 +1000<wrap center 90%> // Development: #58 updated xml //</wrap>
<wrap em>66</wrap>//**:daa7705148e3**// 2015-05-29 21:10 +1000<wrap center 90%> // Development: #58 Application Editor. //</wrap>
<wrap em>65</wrap>//**:9c6735990467**// 2015-05-29 21:10 +1000<wrap center 90%> // Development: #58 XML //</wrap>
<wrap em>64</wrap>//**:4bac67b2e559**// 2015-05-28 20:37 +1000<wrap center 90%> // Development: #58 Initial deployment methods for applications. //</wrap>
<wrap em>63</wrap>//**:70e7c31790cf**// 2015-05-28 20:35 +1000<wrap center 90%> // Added OO MySQL added //</wrap>
<wrap em>62</wrap>//**:6cd1a74ec219**// 2015-05-28 17:53 +1000<wrap center 90%> // Server Migration: #163 //</wrap>
<wrap em>61</wrap>//**:e76e37c03682**// 2015-05-28 17:52 +1000<wrap center 90%> // ignore //</wrap>
<wrap em>60</wrap>//**:eafda53f6a51**// 2015-05-22 12:33 +1000<wrap center 90%> // Server Migration: %163 Moved Files to root of folder //</wrap>
<wrap em>59</wrap>//**:d81720866a26**// 2015-05-22 12:25 +1000<wrap center 90%> // Update: //</wrap>
<wrap em>58</wrap>//**:1c7867d9c778**// 2015-05-22 12:23 +1000<wrap center 90%> // Version Support: scms.dll V1.1.14.1 //</wrap>
<wrap em>57</wrap>//**:895841d42b08**// 2015-05-22 12:22 +1000<wrap center 90%> // Server Migration: #163 Updated Paths //</wrap>
<wrap em>56</wrap>//**:90405c4761d0**// 2015-04-06 15:13 +1000<wrap center 90%> // Version Support Adjustment: SCMS.dll V1.1.12.1 support moved to own class due to new methods. //</wrap>
<wrap em>55</wrap>//**:c7e74fc012e6**// 2015-04-05 20:53 +1000<wrap center 90%> // Version Support: SCMS.dll V1.1.11.1 and V1.1.12.1 //</wrap>
<wrap em>54</wrap>//**:f217a6e1f64d**// 2015-02-15 12:09 +1100<wrap center 90%> // Improvement: added logic to update file category. //</wrap>
<wrap em>53</wrap>//**:c906d6956462**// 2015-02-09 11:12 +1100<wrap center 90%> // Fix: #146 added a check so that client could mark task as complete if no work was required to be done. //</wrap>
<wrap em>51</wrap>//**:53cfdca3b15c**// 2015-01-24 17:19 +1100<wrap center 90%> // Version Support: SCMS.dll V1.1.10.1 //</wrap>
<wrap em>50</wrap>//**:3f0dfcf80057**// 2015-01-24 16:27 +1100<wrap center 90%> // VersionSupport: scms.dll V1.1.9.2 //</wrap>
<wrap em>49</wrap>//**:c0cb474c442b**// 2015-01-24 15:36 +1100<wrap center 90%> // Version Support: SCMS.dll V1.1.9.1 //</wrap>
<wrap em>48</wrap>//**:7933fe3a08a0**// 2015-01-24 15:25 +1100<wrap center 90%> // Debug: #148 Added Square Braces around command to assist in debugging //</wrap>
<wrap em>47</wrap>//**:292f982ea047**// 2015-01-23 17:33 +1100<wrap center 90%> // Fix: #21 Added baseboard collection support. //</wrap>
<wrap em>46</wrap>//**:e12114d7b5cb**// 2015-01-23 17:33 +1100<wrap center 90%> // Increment: Added Support for SCMS.dll V1.1.6.2 and V1.1.7.1 //</wrap>
<wrap em>45</wrap>//**:05c38cf45a9b**// 2015-01-17 21:04 +1100<wrap center 90%> // Added V1.1.6.1 Inventory Support. //</wrap>
<wrap em>44</wrap>//**:9055f213912d**// 2015-01-17 21:03 +1100<wrap center 90%> // Improvement: Added 409 Logging. //</wrap>
<wrap em>43</wrap>//**:250e0d2770e5**// 2015-01-17 16:39 +1100<wrap center 90%> // Debug: Added for Beta testers stage 2 //</wrap>
<wrap em>42</wrap>//**:356a3e5ca37e**// 2015-01-17 16:39 +1100<wrap center 90%> // Improvement: Remove existing debug data. //</wrap>
<wrap em>41</wrap>//**:6e265aa0f410**// 2015-01-17 14:29 +1100<wrap center 90%> // Fix: #87 Added Support for SCMS.dll V1.1.5.1. //</wrap>
<wrap em>40</wrap>//**:c7274f30815a**// 2015-01-17 13:52 +1100<wrap center 90%> // Development: Unknown //</wrap>
<wrap em>39</wrap>//**:7a7ecc626224**// 2014-12-21 22:21 +1100<wrap center 90%> // Feature: #134 Logic added to store file details and link it to an application. //</wrap>
<wrap em>38</wrap>//**:0121b302e95e**// 2014-12-21 10:27 +1100<wrap center 90%> // String to Names. //</wrap>
<wrap em>37</wrap>//**:6856b70b6665**// 2014-12-21 10:26 +1100<wrap center 90%> // Code Cleanup //</wrap>
<wrap em>36</wrap>//**:91c648083fb2**// 2014-12-21 10:22 +1100<wrap center 90%> // Fix: Switch Name Corrected. //</wrap>
<wrap em>35</wrap>//**:6f97ab73ca18**// 2014-12-21 10:21 +1100<wrap center 90%> // Fix: newline now returned to original explode string. //</wrap>
<wrap em>34</wrap>//**:89e72c08b15c**// 2014-12-20 21:40 +1100<wrap center 90%> // Features: #134 Added V 1.1.4.1 //</wrap>
<wrap em>33</wrap>//**:6931e3645cb9**// 2014-12-20 21:40 +1100<wrap center 90%> // Improvement: trim uploaded data. //</wrap>
<wrap em>32</wrap>//**:5c737b5d09af**// 2014-12-14 17:59 +1100<wrap center 90%> // Improvement added additional logging to debug logs. //</wrap>
<wrap em>31</wrap>//**:a7911ca29815**// 2014-12-14 17:58 +1100<wrap center 90%> // Update: scms.dll V1.1.3.1 Released //</wrap>
<wrap em>30</wrap>//**:76831c2eb695**// 2014-12-03 17:39 +1100<wrap center 90%> // Release: v1.1.1.2 Released Stage 1. //</wrap>
<wrap em>29</wrap>//**:ae3d85a6cab0**// 2014-11-30 16:32 +1100<wrap center 90%> // Fix: #100 Windows Service Hash Incorrect. SCMS.dll v1.1.0.1 //</wrap>
<wrap em>28</wrap>//**:bd4ccd99a691**// 2014-11-30 15:50 +1100<wrap center 90%> // Fix: Added SQL Time Variable //</wrap>
<wrap em>26</wrap>//**:37726b750657**// 2014-11-29 17:41 +1100<wrap center 90%> // Update: Created the logic for SCMS task creation to update SCMS client on release increment. //</wrap>
<wrap em>25</wrap>//**:d4d9fef62342**// 2014-11-29 17:07 +1100<wrap center 90%> // Fix: updated For array so could increment from family to release //</wrap>
<wrap em>24</wrap>//**:cf3f1ac69740**// 2014-11-29 14:39 +1100<wrap center 90%> // removed un-needed Debug line. //</wrap>
<wrap em>23</wrap>//**:2ca46ebb8b86**// 2014-11-29 14:29 +1100<wrap center 90%> // FIX: Ref Ticket #101. Added service File hash details. //</wrap>
<wrap em>22</wrap>//**:42679049f326**// 2014-11-29 14:29 +1100<wrap center 90%> // Update: Added File Version details to PCID on hover. //</wrap>
<wrap em>21</wrap>//**:83c251bcbe13**// 2014-11-29 14:28 +1100<wrap center 90%> // Update: Ref Ticket #101. Added column names to insert for service. //</wrap>
<wrap em>19</wrap>//**:37410c4e2ae6**// 2014-06-25 21:12 +1000<wrap center 90%> // Changed to order PC's by most current checked in PC. //</wrap>
<wrap em>18</wrap>//**:37c5f2f584c7**// 2014-06-25 21:11 +1000<wrap center 90%> // Feature #88 (SCMS Server Logging)
these methods were updated to reflect the above feature request. //</wrap>
<wrap em>17</wrap>//**:11630852326b**// 2014-06-22 15:14 +1000<wrap center 90%> // Feature #88 (SCMS Server Logging) Started session for logging. //</wrap>
<wrap em>16</wrap>//**:489011fe7ccb**// 2014-06-22 15:10 +1000<wrap center 90%> // Feature #88 (SCMS Server Logging) Added log severity to index pages. //</wrap>
<wrap em>15</wrap>//**:257b1bcf65b7**// 2014-06-22 15:09 +1000<wrap center 90%> // Feature #88 (SCMS Server Logging) Changed to absolute path to prevent different logging locations. //</wrap>
<wrap em>14</wrap>//**:33528c7742c5**// 2014-06-22 14:57 +1000<wrap center 90%> // (Server Error 500)
Log method name needed updating Due to Feature #88 being implemented. //</wrap>
<wrap em>13</wrap>//**:430d3bb4c4f8**// 2014-06-22 14:52 +1000<wrap center 90%> // Feature #88 (SCMS Server Logging) Added ability to filter by log severity. //</wrap>
<wrap em>12</wrap>//**:b52b3c619463**// 2014-06-22 12:48 +1000<wrap center 90%> // Feature #88 (SCMS Server Logging) Added constantans for log level and renamed log method. //</wrap>
<wrap em>11</wrap>//**:1185c368c912**// 2014-06-22 11:51 +1000<wrap center 90%> // Feature #88 Initial design of SCMS Server Logging. //</wrap>
<wrap em>10</wrap>//**:c9534798332e**// 2014-06-22 11:36 +1000<wrap center 90%> // Removed old file references that are not a part of the SCMS client files. //</wrap>
<wrap em>9</wrap>//**:7077bbde8e02**// 2014-06-22 11:35 +1000<wrap center 90%> // Changeset (0ee126d3dbe7) was causing an update loop due to the method being called wasn't updated. //</wrap>
<wrap em>8</wrap>//**:698cd9764cff**// 2014-06-22 09:52 +1000<wrap center 90%> // Removed old file references that are not a part of the SCMS client files. //</wrap>
<wrap em>7</wrap>//**:ac83bf4019ac**// 2014-06-22 09:09 +1000<wrap center 90%> // Removed old file references that are not a part of the SCMS client files. //</wrap>
<wrap em>6</wrap>//**:60ff3ed389db**// 2014-06-22 09:02 +1000<wrap center 90%> // Code Cleanup //</wrap>
<wrap em>5</wrap>//**:0ee126d3dbe7**// 2014-06-22 09:01 +1000<wrap center 90%> // Moved function inside update class so it can be upgraded as necessary. //</wrap>
<wrap em>3</wrap>//**:1378c53ced4c**// 2014-06-21 21:00 +1000<wrap center 90%> // Feature #86
Changed function to allow user to update based on their group permissions. //</wrap>
<wrap em>2</wrap>//**:552e17c15816**// 2014-06-21 20:33 +1000<wrap center 90%> // Bug #85
Function was selecting multiple non-disabled files and not ordering by highest version first so the highest version would be availible for download. //</wrap>
<wrap em>1</wrap>//**:caa40a8bcb3d**// 2014-06-21 12:06 +1000<wrap center 90%> // Created Local Development Repo //</wrap>
Auto Generated File

View File

@ -0,0 +1,9 @@
====== NFC Addon Repository ======
<wrap important center 80%>page to be created.</wrap>
We have our own XBMC (Kodi) Repository, which is currently host on GitHub. [[https://github.com/NoFussComputing/XBMC-Addons]]
This repository holds all of the XBMC (Kodi) Addons that we have created and are available for you to use free of charge.
===== Addons =====
* [[.:nofussconfluence|Skin - No Fuss Confluence]]

View File

@ -0,0 +1,18 @@
====== No Fuss Confluence XBMC (Kodi) Skin ======
<wrap tip center 80%>This page is still being developed....</wrap>
I must admit that I am a fan of the default XBMC (Kodi) Confluence skin. But due to this like I have had to miss out on some of the other customizations available within other skins. So to this end I decided to start modifying and therefore creating my own skin, No Fuss Confluence.
Mods
* Custom Video Information during Video Playback (Fig 1)
* Additional Studio/Video/Audio Icons
* Custom TV Shows / Movies Playlist
* //add the rest here//
Some of the mods I have done to this skin came from ideas I seen in other skins. As I have borrowed and used these additions, I am more than happy to give credit where credit is due. //If you where the original creator of these ideas please contact me.//
==== Video Information screen ====
{{ :public:help:applications:software_install:xbmc:xbmcvideoinfo.png?nolink |}}
Fig 1. Video Information Screen

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Some files were not shown because too many files have changed in this diff Show More