mirror of
https://github.com/digarok/install-cadius-action.git
synced 2024-12-26 15:29:24 +00:00
Latest with inputs, P8 download and extractions
This commit is contained in:
parent
3d999cd3db
commit
2f38947dd8
2
.github/FUNDING.yml
vendored
Normal file
2
.github/FUNDING.yml
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
github: [digarok]
|
||||
custom: ["https://paypal.me/dagenbrock"]
|
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
node_modules
|
||||
|
25
README.md
25
README.md
@ -4,15 +4,22 @@ A Github Action for installing Cadius and allowing you to manipulate ProDOS disk
|
||||
|
||||
# Example usage
|
||||
```
|
||||
workflow "All pushes" {
|
||||
on = "push"
|
||||
resolves = ["Make a Disk"]
|
||||
}
|
||||
|
||||
action "Make a Disk" {
|
||||
uses = "digarok/cadius-action@master"
|
||||
run = "cadius createvolume exampledsk.po exampledsk 140KB"
|
||||
}
|
||||
# This will install Cadius on your Github Runner machine
|
||||
- name: Install Cadius
|
||||
uses: digarok/cadius-action@node
|
||||
with:
|
||||
include_prodos: true
|
||||
|
||||
# Now you can use it to create a new bootable ProDOS disk
|
||||
- name: Create Boot Volume
|
||||
- run: |
|
||||
cadius createvolume exampledsk.po exampledsk 140KB
|
||||
cadius addfile exampledsk.po /exampledsk/ ./PRODOS.2.4.2/PRODOS
|
||||
```
|
||||
|
||||
# Arguments/Inputs
|
||||
|
||||
This action has one input: `include_prodos`. By setting this to true, it will download the latest release of ProDOS (2.4.2) and extract all of the files to a directory called `PRODOS.2.4.2`. This allows you to use those files, if needed, in subsequent steps. So you can create a bootable disk or even add `BASIC.SYSTEM` to launch into AppleSoft BASIC.
|
||||
|
||||
# About CADIUS
|
||||
Cadius is a disk image program originally by the amazing French team, Brutal Deluxe. They are not involved with this Open Source version, but I do recommend you view [their site](http://brutaldeluxe.fr/products/crossdevtools/cadius/) for more information on Cadius and their other incredible tools and releases.
|
||||
|
@ -2,7 +2,7 @@ name: 'cadius-action'
|
||||
description: 'Github Action to set up Cadius for ProDOS disk image manipulation'
|
||||
author: 'Dagen Brock'
|
||||
inputs:
|
||||
includeProdos: # change this
|
||||
include_prodos:
|
||||
description: 'Download Prodos 2.4.2 files to allow you to create a bootable disk.'
|
||||
default: 'true'
|
||||
runs:
|
||||
|
4677
dist/index.js
vendored
4677
dist/index.js
vendored
File diff suppressed because it is too large
Load Diff
@ -2,6 +2,7 @@
|
||||
"name": "cadius-action",
|
||||
"version": "0.0.0",
|
||||
"license": "MIT",
|
||||
"main": "dist/index.js",
|
||||
"scripts": {
|
||||
"build": "tsc",
|
||||
"pack": "ncc build dist/index.js"
|
||||
|
76
src/index.ts
76
src/index.ts
@ -1,6 +1,6 @@
|
||||
import * as os from 'os';
|
||||
import * as util from 'util';
|
||||
import * as path from 'path';
|
||||
import * as fs from 'fs';
|
||||
|
||||
import * as toolCache from '@actions/tool-cache';
|
||||
import * as core from '@actions/core';
|
||||
@ -9,13 +9,11 @@ function getDownloadURL(version: string): string {
|
||||
switch (os.type()) {
|
||||
case 'Linux':
|
||||
return util.format('https://github.com/digarok/cadius/releases/download/%s/cadius-ubuntu-latest-%s.zip', version, version);
|
||||
|
||||
case 'Darwin':
|
||||
return util.format('https://github.com/digarok/cadius/releases/download/%s/cadius-macos-latest-%s.zip', version, version);
|
||||
case 'Windows_NT':
|
||||
default:
|
||||
return util.format('https://github.com/digarok/cadius/releases/download/%s/cadius-windows-latest-%s.zip', version, version);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -29,18 +27,80 @@ async function downloadCadius(version: string) {
|
||||
console.log(exception)
|
||||
throw new Error(util.format("Failed to download Cadius from location ", getDownloadURL(version)));
|
||||
}
|
||||
|
||||
const extractedPath = await toolCache.extractZip(downloadPath);
|
||||
cachedToolpath = await toolCache.cacheDir(path.join(extractedPath, 'cadius'), 'cadius', version);
|
||||
cachedToolpath = await toolCache.cacheDir(extractedPath, 'cadius', version);
|
||||
}
|
||||
core.addPath(cachedToolpath)
|
||||
return cachedToolpath
|
||||
}
|
||||
|
||||
async function downloadProdos(cadiusPath: string) {
|
||||
// get real exe location (is this needed?)
|
||||
let cadiusExe = util.format('%s/cadius', cadiusPath)
|
||||
if (os.type() == 'Windows_NT') {
|
||||
cadiusExe = util.format('%s/Cadius.exe', cadiusPath)
|
||||
}
|
||||
|
||||
core.addPath(cachedToolpath)
|
||||
// something is wrong with the mirrors cert so we'll just use http
|
||||
let downloadP8URL = 'http://mirrors.apple2.org.za/ftp.apple.asimov.net/images/masters/prodos/ProDOS_2_4_2.dsk'
|
||||
let downloadD2PURL = 'https://raw.githubusercontent.com/digarok/dsk2po/master/dsk2po.py'
|
||||
|
||||
let p8DownloadPath;
|
||||
let d2pDownloadPath;
|
||||
|
||||
try {
|
||||
p8DownloadPath = await toolCache.downloadTool(downloadP8URL);
|
||||
} catch (exception) {
|
||||
console.log(exception);
|
||||
throw new Error(util.format("Failed to download ProDOS from location ", downloadP8URL));
|
||||
}
|
||||
console.log(util.format("Downloaded file: ", p8DownloadPath));
|
||||
// move it so it's in the user workspace in any future steps
|
||||
let p8DskPath = './ProDOS_2_4_2.dsk'
|
||||
fs.renameSync(p8DownloadPath, p8DskPath);
|
||||
|
||||
try {
|
||||
d2pDownloadPath = await toolCache.downloadTool(downloadD2PURL);
|
||||
} catch (exception) {
|
||||
console.log(exception);
|
||||
throw new Error(util.format("Failed to download dsk2po.py from location ", downloadD2PURL));
|
||||
}
|
||||
console.log(util.format("Downloaded file: ", d2pDownloadPath));
|
||||
|
||||
// Now we need to a) convert the image and b) extract the volume file locally
|
||||
try {
|
||||
const spawn = require("child_process").spawn;
|
||||
const spawnSync = require("child_process").spawnSync;
|
||||
|
||||
spawnSync('python3',[d2pDownloadPath, p8DskPath]);
|
||||
const cadiusProcess = spawnSync(cadiusExe, ['extractvolume', 'ProDOS_2_4_2.po', '.'],{ encoding : 'utf8' })
|
||||
console.log(cadiusProcess.stdout);
|
||||
} catch (exception) {
|
||||
console.log(exception);
|
||||
console.log("Unagle to complete ProDOS download and extraction.");
|
||||
}
|
||||
}
|
||||
|
||||
async function run() {
|
||||
let version = core.getInput('version', { 'required': true });
|
||||
await downloadCadius(version);
|
||||
let version = core.getInput('version');
|
||||
if (!version) {
|
||||
version = '0.0.0'; // default
|
||||
}
|
||||
let includeProdos = false;
|
||||
let inputIncludeProdos = core.getInput('include_prodos');
|
||||
if (inputIncludeProdos.toLowerCase() == "true" || inputIncludeProdos == "") {
|
||||
includeProdos = true; // default
|
||||
}
|
||||
console.log(`INPUTS - version '${version}'`);
|
||||
console.log(`INPUTS - includeProdos '${includeProdos}'`);
|
||||
|
||||
let cadiusPath = await downloadCadius(version);
|
||||
|
||||
console.log(`Cadius version: '${version}' has been downloaded and added to path`);
|
||||
if (includeProdos) {
|
||||
await downloadProdos(cadiusPath);
|
||||
console.log(`ProDOS download and extraction completed`);
|
||||
}
|
||||
}
|
||||
|
||||
run().catch(core.setFailed);
|
@ -4,7 +4,7 @@
|
||||
// "incremental": true, /* Enable incremental compilation */
|
||||
"target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
|
||||
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
|
||||
//"lib": ["es6"], /* Specify library files to be included in the compilation. */
|
||||
"lib": ["es6"], /* Specify library files to be included in the compilation. */
|
||||
// "allowJs": true, /* Allow javascript files to be compiled. */
|
||||
// "checkJs": true, /* Report errors in .js files. */
|
||||
// "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
|
||||
@ -16,7 +16,7 @@
|
||||
"rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
|
||||
// "composite": true, /* Enable project compilation */
|
||||
// "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */
|
||||
// "removeComments": true, /* Do not emit comments to output. */
|
||||
"removeComments": true, /* Do not emit comments to output. */
|
||||
// "noEmit": true, /* Do not emit outputs. */
|
||||
// "importHelpers": true, /* Import emit helpers from 'tslib'. */
|
||||
// "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
|
||||
|
Loading…
Reference in New Issue
Block a user