From 64eb7fe117780be8dd3fbf4463239531fb2cb9dd Mon Sep 17 00:00:00 2001 From: Firq Date: Tue, 7 Mar 2023 20:38:49 +0100 Subject: [PATCH] Adding refresh script, optimizing pipeline, small site change --- .gitlab-ci.yml | 13 +++++++++ package-lock.json | 18 ++++++++++-- scripts/.gitignore | 2 ++ scripts/cloudflare-updater.py | 52 ++++++++++++++++++++++++++++++++++ scripts/requirements.txt | 1 + src/layouts/customFooter.astro | 2 +- 6 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 scripts/.gitignore create mode 100644 scripts/cloudflare-updater.py create mode 100644 scripts/requirements.txt diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5f5fcf6..830cfd6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,5 +1,18 @@ +update-ip: + image: 3.10.8-slim-buster + when: manual + before_script: + - apt-get update + - apt-get install -y python3-pip + - python --version + - pip install -r requirements.txt + script: + - python cloudflare-updater.py $CF_API_TOKEN $NEW_IP + deploy-site: stage: deploy + rules: + - if: $CI_COMMIT_BRANCH == "main" before_script: - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )' - eval $(ssh-agent -s) diff --git a/package-lock.json b/package-lock.json index 0307404..dd9e883 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@firq/fgosite", - "version": "0.0.1", + "version": "0.1.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@firq/fgosite", - "version": "0.0.1", + "version": "0.1.1", "dependencies": { "astro": "^2.0.2", "iconoir": "^6.1.0" @@ -992,6 +992,13 @@ "@types/unist": "*" } }, + "node_modules/@types/node": { + "version": "18.14.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.6.tgz", + "integrity": "sha512-93+VvleD3mXwlLI/xASjw0FzKcwzl3OdTCzm1LaRfqgS21gfFtK3zDXM5Op9TeeMsJVOaJ2VRDpT9q4Y3d0AvA==", + "optional": true, + "peer": true + }, "node_modules/@types/parse5": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", @@ -5604,6 +5611,13 @@ "@types/unist": "*" } }, + "@types/node": { + "version": "18.14.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.6.tgz", + "integrity": "sha512-93+VvleD3mXwlLI/xASjw0FzKcwzl3OdTCzm1LaRfqgS21gfFtK3zDXM5Op9TeeMsJVOaJ2VRDpT9q4Y3d0AvA==", + "optional": true, + "peer": true + }, "@types/parse5": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", diff --git a/scripts/.gitignore b/scripts/.gitignore new file mode 100644 index 0000000..ca5e3f2 --- /dev/null +++ b/scripts/.gitignore @@ -0,0 +1,2 @@ +venv/ +.idea/ \ No newline at end of file diff --git a/scripts/cloudflare-updater.py b/scripts/cloudflare-updater.py new file mode 100644 index 0000000..6047188 --- /dev/null +++ b/scripts/cloudflare-updater.py @@ -0,0 +1,52 @@ +import sys, logging, ipaddress, json +import CloudFlare + + +def main(TOKEN, NEW_IP): + logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.DEBUG) + cf = CloudFlare.CloudFlare(token=TOKEN) + zones = cf.zones.get() + zone_identifier = [] + for zone in zones: + if zone['name'] == "firq.dev": + zone_identifier = zone + + if not zone_identifier: + raise Exception("No Zone identifier extracted") + + logging.info(f" Zone Identifier is {zone_identifier['id']}") + + records = cf.zones.dns_records.get(zone_identifier['id']) + update_records = [] + + if not records: + raise Exception(f"Could not extract records from {zone_identifier['name']}") + + for record in records: + if record['type'] == 'AAAA': + update_records.append({"id": record['id'], "type": record['type'], "name": record['name'], "content": record['content']}) + + logging.info(f" Got the following DNS records registered to {zone_identifier['name']}") + logging.info(json.dumps(update_records, sort_keys=True, indent=2)) + records_done = 0 + + for record in update_records: + data = { + "name": record['name'], + "type": record['type'], + "content": NEW_IP + } + try: + cf.zones.dns_records.patch(zone_identifier['id'], record['id'], data=data) + records_done += 1 + except Exception as e: + logging.error(e) + + logging.info(f"Finished updating {records_done} records for {zone_identifier['name']}") + + +if __name__ == '__main__': + assert len(sys.argv) == 3 + assert isinstance(ipaddress.ip_address(sys.argv[2]), ipaddress.IPv6Address), \ + f'IP {sys.argv[2]} is not a valid IPv4 address' + main(sys.argv[1], sys.argv[2]) diff --git a/scripts/requirements.txt b/scripts/requirements.txt new file mode 100644 index 0000000..c4afa28 --- /dev/null +++ b/scripts/requirements.txt @@ -0,0 +1 @@ +cloudflare>=2.11.1 diff --git a/src/layouts/customFooter.astro b/src/layouts/customFooter.astro index 7540cca..c514e19 100644 --- a/src/layouts/customFooter.astro +++ b/src/layouts/customFooter.astro @@ -8,7 +8,7 @@ use. | View the official website for more information.
I am in no way affiliated with Fate/Grand Order, Aniplex, Type Moon or Lasengle. I claim no ownership of any of the assets used that are - created by any of the mentioned companies. + created by any of the mentioned companies.
All of the opinions expressed are my own and may not reflect those of the asset providers.