diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index d898034..c2e3d77 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,42 +1,38 @@ { - "name": "Public - Quarto Codespaces", - "image": "ghcr.io/mcanouil/quarto-codespaces:latest", - "remoteUser": "vscode", - "features": { - "ghcr.io/rocker-org/devcontainer-features/quarto-cli:1": { - "version": "release", - "installTinyTex": "false", - "installChromium": "false" - } - }, - "customizations": { - "vscode": { - "extensions": [ - "quarto.quarto", - "mcanouil.quarto-wizard", - "REditorSupport.r", - "ms-python.python", - "julialang.language-julia", - "ms-python.black-formatter", - "ms-python.flake8", - "ms-python.vscode-pylance", - "ms-python.pylint", - "ms-python.isort", - "ms-toolsai.jupyter", - "Posit.air-vscode" - ], - "settings": { - "r.rterm.option": [ - "--no-save", - "--no-restore-data", - "--quiet" - ], - "r.useRenvLibPath": true, - "[r]": { - "editor.defaultFormatter": "Posit.air-vscode", - "editor.formatOnSave": true - } - } - } - } + "name": "Public - Quarto Codespaces", + "image": "ghcr.io/mcanouil/quarto-codespaces:latest", + "remoteUser": "vscode", + "features": { + "ghcr.io/rocker-org/devcontainer-features/quarto-cli:1": { + "version": "release", + "installTinyTex": "false", + "installChromium": "false" + } + }, + "customizations": { + "vscode": { + "extensions": [ + "quarto.quarto", + "mcanouil.quarto-wizard", + "REditorSupport.r", + "ms-python.python", + "julialang.language-julia", + "ms-python.black-formatter", + "ms-python.flake8", + "ms-python.vscode-pylance", + "ms-python.pylint", + "ms-python.isort", + "ms-toolsai.jupyter", + "Posit.air-vscode" + ], + "settings": { + "r.rterm.option": ["--no-save", "--no-restore-data", "--quiet"], + "r.useRenvLibPath": true, + "[r]": { + "editor.defaultFormatter": "Posit.air-vscode", + "editor.formatOnSave": true + } + } + } + } } diff --git a/.devcontainer/mcanouil-1.0/devcontainer.json b/.devcontainer/mcanouil-1.0/devcontainer.json index 8b23392..78269f1 100644 --- a/.devcontainer/mcanouil-1.0/devcontainer.json +++ b/.devcontainer/mcanouil-1.0/devcontainer.json @@ -1,21 +1,19 @@ { - "name": "1.0 - Mickaël CANOUIL - Quarto Codespaces", - "image": "ghcr.io/mcanouil/quarto-codespaces:latest", - "remoteUser": "vscode", - "features": { - "ghcr.io/rocker-org/devcontainer-features/quarto-cli:1": { - "version": "1.0", - "installTinyTex": "false", - "installChromium": "false" - } - }, - "customizations": { - "codespaces": { + "name": "1.0 - Mickaël CANOUIL - Quarto Codespaces", + "image": "ghcr.io/mcanouil/quarto-codespaces:latest", + "remoteUser": "vscode", + "features": { + "ghcr.io/rocker-org/devcontainer-features/quarto-cli:1": { + "version": "1.0" + } + }, + "customizations": { + "codespaces": { "repositories": { "mcanouil/quarto-codespaces": { "permissions": { "contents": "write", - "pull_requests": "write" + "pull_requests": "write" } }, "mcanouil/quarto-issues-experiments": { @@ -23,40 +21,36 @@ "contents": "write" } }, - "mcanouil/*": { + "mcanouil/*": { "permissions": { "contents": "read" } } } }, - "vscode": { - "extensions": [ - "quarto.quarto", - "mcanouil.quarto-wizard", - "REditorSupport.r", - "ms-python.python", - "julialang.language-julia", - "ms-python.black-formatter", - "ms-python.flake8", - "ms-python.vscode-pylance", - "ms-python.pylint", - "ms-python.isort", - "ms-toolsai.jupyter", - "Posit.air-vscode" - ], - "settings": { - "r.rterm.option": [ - "--no-save", - "--no-restore-data", - "--quiet" - ], - "r.useRenvLibPath": true, - "[r]": { - "editor.defaultFormatter": "Posit.air-vscode", - "editor.formatOnSave": true - } - } - } - } + "vscode": { + "extensions": [ + "quarto.quarto", + "mcanouil.quarto-wizard", + "REditorSupport.r", + "ms-python.python", + "julialang.language-julia", + "ms-python.black-formatter", + "ms-python.flake8", + "ms-python.vscode-pylance", + "ms-python.pylint", + "ms-python.isort", + "ms-toolsai.jupyter", + "Posit.air-vscode" + ], + "settings": { + "r.rterm.option": ["--no-save", "--no-restore-data", "--quiet"], + "r.useRenvLibPath": true, + "[r]": { + "editor.defaultFormatter": "Posit.air-vscode", + "editor.formatOnSave": true + } + } + } + } } diff --git a/.devcontainer/mcanouil-1.1/devcontainer.json b/.devcontainer/mcanouil-1.1/devcontainer.json index 16f6892..d6d3d42 100644 --- a/.devcontainer/mcanouil-1.1/devcontainer.json +++ b/.devcontainer/mcanouil-1.1/devcontainer.json @@ -1,21 +1,19 @@ { - "name": "1.1 - Mickaël CANOUIL - Quarto Codespaces", - "image": "ghcr.io/mcanouil/quarto-codespaces:latest", - "remoteUser": "vscode", - "features": { - "ghcr.io/rocker-org/devcontainer-features/quarto-cli:1": { - "version": "1.1", - "installTinyTex": "false", - "installChromium": "false" - } - }, - "customizations": { - "codespaces": { + "name": "1.1 - Mickaël CANOUIL - Quarto Codespaces", + "image": "ghcr.io/mcanouil/quarto-codespaces:latest", + "remoteUser": "vscode", + "features": { + "ghcr.io/rocker-org/devcontainer-features/quarto-cli:1": { + "version": "1.1" + } + }, + "customizations": { + "codespaces": { "repositories": { "mcanouil/quarto-codespaces": { "permissions": { "contents": "write", - "pull_requests": "write" + "pull_requests": "write" } }, "mcanouil/quarto-issues-experiments": { @@ -23,40 +21,36 @@ "contents": "write" } }, - "mcanouil/*": { + "mcanouil/*": { "permissions": { "contents": "read" } } } }, - "vscode": { - "extensions": [ - "quarto.quarto", - "mcanouil.quarto-wizard", - "REditorSupport.r", - "ms-python.python", - "julialang.language-julia", - "ms-python.black-formatter", - "ms-python.flake8", - "ms-python.vscode-pylance", - "ms-python.pylint", - "ms-python.isort", - "ms-toolsai.jupyter", - "Posit.air-vscode" - ], - "settings": { - "r.rterm.option": [ - "--no-save", - "--no-restore-data", - "--quiet" - ], - "r.useRenvLibPath": true, - "[r]": { - "editor.defaultFormatter": "Posit.air-vscode", - "editor.formatOnSave": true - } - } - } - } + "vscode": { + "extensions": [ + "quarto.quarto", + "mcanouil.quarto-wizard", + "REditorSupport.r", + "ms-python.python", + "julialang.language-julia", + "ms-python.black-formatter", + "ms-python.flake8", + "ms-python.vscode-pylance", + "ms-python.pylint", + "ms-python.isort", + "ms-toolsai.jupyter", + "Posit.air-vscode" + ], + "settings": { + "r.rterm.option": ["--no-save", "--no-restore-data", "--quiet"], + "r.useRenvLibPath": true, + "[r]": { + "editor.defaultFormatter": "Posit.air-vscode", + "editor.formatOnSave": true + } + } + } + } } diff --git a/.devcontainer/mcanouil-1.2/devcontainer.json b/.devcontainer/mcanouil-1.2/devcontainer.json index 1ec9166..788e242 100644 --- a/.devcontainer/mcanouil-1.2/devcontainer.json +++ b/.devcontainer/mcanouil-1.2/devcontainer.json @@ -1,21 +1,19 @@ { - "name": "1.2 - Mickaël CANOUIL - Quarto Codespaces", - "image": "ghcr.io/mcanouil/quarto-codespaces:latest", - "remoteUser": "vscode", - "features": { - "ghcr.io/rocker-org/devcontainer-features/quarto-cli:1": { - "version": "1.2", - "installTinyTex": "false", - "installChromium": "false" - } - }, - "customizations": { - "codespaces": { + "name": "1.2 - Mickaël CANOUIL - Quarto Codespaces", + "image": "ghcr.io/mcanouil/quarto-codespaces:latest", + "remoteUser": "vscode", + "features": { + "ghcr.io/rocker-org/devcontainer-features/quarto-cli:1": { + "version": "1.2" + } + }, + "customizations": { + "codespaces": { "repositories": { "mcanouil/quarto-codespaces": { "permissions": { "contents": "write", - "pull_requests": "write" + "pull_requests": "write" } }, "mcanouil/quarto-issues-experiments": { @@ -23,40 +21,36 @@ "contents": "write" } }, - "mcanouil/*": { + "mcanouil/*": { "permissions": { "contents": "read" } } } }, - "vscode": { - "extensions": [ - "quarto.quarto", - "mcanouil.quarto-wizard", - "REditorSupport.r", - "ms-python.python", - "julialang.language-julia", - "ms-python.black-formatter", - "ms-python.flake8", - "ms-python.vscode-pylance", - "ms-python.pylint", - "ms-python.isort", - "ms-toolsai.jupyter", - "Posit.air-vscode" - ], - "settings": { - "r.rterm.option": [ - "--no-save", - "--no-restore-data", - "--quiet" - ], - "r.useRenvLibPath": true, - "[r]": { - "editor.defaultFormatter": "Posit.air-vscode", - "editor.formatOnSave": true - } - } - } - } + "vscode": { + "extensions": [ + "quarto.quarto", + "mcanouil.quarto-wizard", + "REditorSupport.r", + "ms-python.python", + "julialang.language-julia", + "ms-python.black-formatter", + "ms-python.flake8", + "ms-python.vscode-pylance", + "ms-python.pylint", + "ms-python.isort", + "ms-toolsai.jupyter", + "Posit.air-vscode" + ], + "settings": { + "r.rterm.option": ["--no-save", "--no-restore-data", "--quiet"], + "r.useRenvLibPath": true, + "[r]": { + "editor.defaultFormatter": "Posit.air-vscode", + "editor.formatOnSave": true + } + } + } + } } diff --git a/.devcontainer/mcanouil-1.3/devcontainer.json b/.devcontainer/mcanouil-1.3/devcontainer.json index 8ca743e..8c72dab 100644 --- a/.devcontainer/mcanouil-1.3/devcontainer.json +++ b/.devcontainer/mcanouil-1.3/devcontainer.json @@ -1,21 +1,19 @@ { - "name": "1.3 - Mickaël CANOUIL - Quarto Codespaces", - "image": "ghcr.io/mcanouil/quarto-codespaces:latest", - "remoteUser": "vscode", - "features": { - "ghcr.io/rocker-org/devcontainer-features/quarto-cli:1": { - "version": "1.3", - "installTinyTex": "false", - "installChromium": "false" - } - }, - "customizations": { - "codespaces": { + "name": "1.3 - Mickaël CANOUIL - Quarto Codespaces", + "image": "ghcr.io/mcanouil/quarto-codespaces:latest", + "remoteUser": "vscode", + "features": { + "ghcr.io/rocker-org/devcontainer-features/quarto-cli:1": { + "version": "1.3" + } + }, + "customizations": { + "codespaces": { "repositories": { "mcanouil/quarto-codespaces": { "permissions": { "contents": "write", - "pull_requests": "write" + "pull_requests": "write" } }, "mcanouil/quarto-issues-experiments": { @@ -23,40 +21,36 @@ "contents": "write" } }, - "mcanouil/*": { + "mcanouil/*": { "permissions": { "contents": "read" } } } }, - "vscode": { - "extensions": [ - "quarto.quarto", - "mcanouil.quarto-wizard", - "REditorSupport.r", - "ms-python.python", - "julialang.language-julia", - "ms-python.black-formatter", - "ms-python.flake8", - "ms-python.vscode-pylance", - "ms-python.pylint", - "ms-python.isort", - "ms-toolsai.jupyter", - "Posit.air-vscode" - ], - "settings": { - "r.rterm.option": [ - "--no-save", - "--no-restore-data", - "--quiet" - ], - "r.useRenvLibPath": true, - "[r]": { - "editor.defaultFormatter": "Posit.air-vscode", - "editor.formatOnSave": true - } - } - } - } + "vscode": { + "extensions": [ + "quarto.quarto", + "mcanouil.quarto-wizard", + "REditorSupport.r", + "ms-python.python", + "julialang.language-julia", + "ms-python.black-formatter", + "ms-python.flake8", + "ms-python.vscode-pylance", + "ms-python.pylint", + "ms-python.isort", + "ms-toolsai.jupyter", + "Posit.air-vscode" + ], + "settings": { + "r.rterm.option": ["--no-save", "--no-restore-data", "--quiet"], + "r.useRenvLibPath": true, + "[r]": { + "editor.defaultFormatter": "Posit.air-vscode", + "editor.formatOnSave": true + } + } + } + } } diff --git a/.devcontainer/mcanouil-1.4/devcontainer.json b/.devcontainer/mcanouil-1.4/devcontainer.json index 156d7a8..1fb6240 100644 --- a/.devcontainer/mcanouil-1.4/devcontainer.json +++ b/.devcontainer/mcanouil-1.4/devcontainer.json @@ -1,21 +1,19 @@ { - "name": "1.4 - Mickaël CANOUIL - Quarto Codespaces", - "image": "ghcr.io/mcanouil/quarto-codespaces:latest", - "remoteUser": "vscode", - "features": { - "ghcr.io/rocker-org/devcontainer-features/quarto-cli:1": { - "version": "1.4", - "installTinyTex": "false", - "installChromium": "false" - } - }, - "customizations": { - "codespaces": { + "name": "1.4 - Mickaël CANOUIL - Quarto Codespaces", + "image": "ghcr.io/mcanouil/quarto-codespaces:latest", + "remoteUser": "vscode", + "features": { + "ghcr.io/rocker-org/devcontainer-features/quarto-cli:1": { + "version": "1.4" + } + }, + "customizations": { + "codespaces": { "repositories": { "mcanouil/quarto-codespaces": { "permissions": { "contents": "write", - "pull_requests": "write" + "pull_requests": "write" } }, "mcanouil/quarto-issues-experiments": { @@ -23,40 +21,36 @@ "contents": "write" } }, - "mcanouil/*": { + "mcanouil/*": { "permissions": { "contents": "read" } } } }, - "vscode": { - "extensions": [ - "quarto.quarto", - "mcanouil.quarto-wizard", - "REditorSupport.r", - "ms-python.python", - "julialang.language-julia", - "ms-python.black-formatter", - "ms-python.flake8", - "ms-python.vscode-pylance", - "ms-python.pylint", - "ms-python.isort", - "ms-toolsai.jupyter", - "Posit.air-vscode" - ], - "settings": { - "r.rterm.option": [ - "--no-save", - "--no-restore-data", - "--quiet" - ], - "r.useRenvLibPath": true, - "[r]": { - "editor.defaultFormatter": "Posit.air-vscode", - "editor.formatOnSave": true - } - } - } - } + "vscode": { + "extensions": [ + "quarto.quarto", + "mcanouil.quarto-wizard", + "REditorSupport.r", + "ms-python.python", + "julialang.language-julia", + "ms-python.black-formatter", + "ms-python.flake8", + "ms-python.vscode-pylance", + "ms-python.pylint", + "ms-python.isort", + "ms-toolsai.jupyter", + "Posit.air-vscode" + ], + "settings": { + "r.rterm.option": ["--no-save", "--no-restore-data", "--quiet"], + "r.useRenvLibPath": true, + "[r]": { + "editor.defaultFormatter": "Posit.air-vscode", + "editor.formatOnSave": true + } + } + } + } } diff --git a/.devcontainer/mcanouil-1.5/devcontainer.json b/.devcontainer/mcanouil-1.5/devcontainer.json index 2784308..2476343 100644 --- a/.devcontainer/mcanouil-1.5/devcontainer.json +++ b/.devcontainer/mcanouil-1.5/devcontainer.json @@ -1,21 +1,19 @@ { - "name": "1.5 - Mickaël CANOUIL - Quarto Codespaces", - "image": "ghcr.io/mcanouil/quarto-codespaces:latest", - "remoteUser": "vscode", - "features": { - "ghcr.io/rocker-org/devcontainer-features/quarto-cli:1": { - "version": "1.5", - "installTinyTex": "false", - "installChromium": "false" - } - }, - "customizations": { - "codespaces": { + "name": "1.5 - Mickaël CANOUIL - Quarto Codespaces", + "image": "ghcr.io/mcanouil/quarto-codespaces:latest", + "remoteUser": "vscode", + "features": { + "ghcr.io/rocker-org/devcontainer-features/quarto-cli:1": { + "version": "1.5" + } + }, + "customizations": { + "codespaces": { "repositories": { "mcanouil/quarto-codespaces": { "permissions": { "contents": "write", - "pull_requests": "write" + "pull_requests": "write" } }, "mcanouil/quarto-issues-experiments": { @@ -23,40 +21,36 @@ "contents": "write" } }, - "mcanouil/*": { + "mcanouil/*": { "permissions": { "contents": "read" } } } }, - "vscode": { - "extensions": [ - "quarto.quarto", - "mcanouil.quarto-wizard", - "REditorSupport.r", - "ms-python.python", - "julialang.language-julia", - "ms-python.black-formatter", - "ms-python.flake8", - "ms-python.vscode-pylance", - "ms-python.pylint", - "ms-python.isort", - "ms-toolsai.jupyter", - "Posit.air-vscode" - ], - "settings": { - "r.rterm.option": [ - "--no-save", - "--no-restore-data", - "--quiet" - ], - "r.useRenvLibPath": true, - "[r]": { - "editor.defaultFormatter": "Posit.air-vscode", - "editor.formatOnSave": true - } - } - } - } + "vscode": { + "extensions": [ + "quarto.quarto", + "mcanouil.quarto-wizard", + "REditorSupport.r", + "ms-python.python", + "julialang.language-julia", + "ms-python.black-formatter", + "ms-python.flake8", + "ms-python.vscode-pylance", + "ms-python.pylint", + "ms-python.isort", + "ms-toolsai.jupyter", + "Posit.air-vscode" + ], + "settings": { + "r.rterm.option": ["--no-save", "--no-restore-data", "--quiet"], + "r.useRenvLibPath": true, + "[r]": { + "editor.defaultFormatter": "Posit.air-vscode", + "editor.formatOnSave": true + } + } + } + } } diff --git a/.devcontainer/mcanouil-1.6/devcontainer.json b/.devcontainer/mcanouil-1.6/devcontainer.json index f0d4b7a..9b9646f 100644 --- a/.devcontainer/mcanouil-1.6/devcontainer.json +++ b/.devcontainer/mcanouil-1.6/devcontainer.json @@ -1,21 +1,19 @@ { - "name": "1.6 - Mickaël CANOUIL - Quarto Codespaces", - "image": "ghcr.io/mcanouil/quarto-codespaces:latest", - "remoteUser": "vscode", - "features": { - "ghcr.io/rocker-org/devcontainer-features/quarto-cli:1": { - "version": "1.6", - "installTinyTex": "false", - "installChromium": "false" - } - }, - "customizations": { - "codespaces": { + "name": "1.6 - Mickaël CANOUIL - Quarto Codespaces", + "image": "ghcr.io/mcanouil/quarto-codespaces:latest", + "remoteUser": "vscode", + "features": { + "ghcr.io/rocker-org/devcontainer-features/quarto-cli:1": { + "version": "1.6" + } + }, + "customizations": { + "codespaces": { "repositories": { "mcanouil/quarto-codespaces": { "permissions": { "contents": "write", - "pull_requests": "write" + "pull_requests": "write" } }, "mcanouil/quarto-issues-experiments": { @@ -23,40 +21,36 @@ "contents": "write" } }, - "mcanouil/*": { + "mcanouil/*": { "permissions": { "contents": "read" } } } }, - "vscode": { - "extensions": [ - "quarto.quarto", - "mcanouil.quarto-wizard", - "REditorSupport.r", - "ms-python.python", - "julialang.language-julia", - "ms-python.black-formatter", - "ms-python.flake8", - "ms-python.vscode-pylance", - "ms-python.pylint", - "ms-python.isort", - "ms-toolsai.jupyter", - "Posit.air-vscode" - ], - "settings": { - "r.rterm.option": [ - "--no-save", - "--no-restore-data", - "--quiet" - ], - "r.useRenvLibPath": true, - "[r]": { - "editor.defaultFormatter": "Posit.air-vscode", - "editor.formatOnSave": true - } - } - } - } + "vscode": { + "extensions": [ + "quarto.quarto", + "mcanouil.quarto-wizard", + "REditorSupport.r", + "ms-python.python", + "julialang.language-julia", + "ms-python.black-formatter", + "ms-python.flake8", + "ms-python.vscode-pylance", + "ms-python.pylint", + "ms-python.isort", + "ms-toolsai.jupyter", + "Posit.air-vscode" + ], + "settings": { + "r.rterm.option": ["--no-save", "--no-restore-data", "--quiet"], + "r.useRenvLibPath": true, + "[r]": { + "editor.defaultFormatter": "Posit.air-vscode", + "editor.formatOnSave": true + } + } + } + } } diff --git a/.devcontainer/mcanouil-1.7/devcontainer.json b/.devcontainer/mcanouil-1.7/devcontainer.json index c382ac0..242821a 100644 --- a/.devcontainer/mcanouil-1.7/devcontainer.json +++ b/.devcontainer/mcanouil-1.7/devcontainer.json @@ -1,21 +1,19 @@ { - "name": "1.7 - Mickaël CANOUIL - Quarto Codespaces", - "image": "ghcr.io/mcanouil/quarto-codespaces:latest", - "remoteUser": "vscode", - "features": { - "ghcr.io/rocker-org/devcontainer-features/quarto-cli:1": { - "version": "1.7", - "installTinyTex": "false", - "installChromium": "false" - } - }, - "customizations": { - "codespaces": { + "name": "1.7 - Mickaël CANOUIL - Quarto Codespaces", + "image": "ghcr.io/mcanouil/quarto-codespaces:latest", + "remoteUser": "vscode", + "features": { + "ghcr.io/rocker-org/devcontainer-features/quarto-cli:1": { + "version": "1.7" + } + }, + "customizations": { + "codespaces": { "repositories": { "mcanouil/quarto-codespaces": { "permissions": { "contents": "write", - "pull_requests": "write" + "pull_requests": "write" } }, "mcanouil/quarto-issues-experiments": { @@ -23,40 +21,36 @@ "contents": "write" } }, - "mcanouil/*": { + "mcanouil/*": { "permissions": { "contents": "read" } } } }, - "vscode": { - "extensions": [ - "quarto.quarto", - "mcanouil.quarto-wizard", - "REditorSupport.r", - "ms-python.python", - "julialang.language-julia", - "ms-python.black-formatter", - "ms-python.flake8", - "ms-python.vscode-pylance", - "ms-python.pylint", - "ms-python.isort", - "ms-toolsai.jupyter", - "Posit.air-vscode" - ], - "settings": { - "r.rterm.option": [ - "--no-save", - "--no-restore-data", - "--quiet" - ], - "r.useRenvLibPath": true, - "[r]": { - "editor.defaultFormatter": "Posit.air-vscode", - "editor.formatOnSave": true - } - } - } - } + "vscode": { + "extensions": [ + "quarto.quarto", + "mcanouil.quarto-wizard", + "REditorSupport.r", + "ms-python.python", + "julialang.language-julia", + "ms-python.black-formatter", + "ms-python.flake8", + "ms-python.vscode-pylance", + "ms-python.pylint", + "ms-python.isort", + "ms-toolsai.jupyter", + "Posit.air-vscode" + ], + "settings": { + "r.rterm.option": ["--no-save", "--no-restore-data", "--quiet"], + "r.useRenvLibPath": true, + "[r]": { + "editor.defaultFormatter": "Posit.air-vscode", + "editor.formatOnSave": true + } + } + } + } } diff --git a/.devcontainer/mcanouil-latest/devcontainer.json b/.devcontainer/mcanouil-latest/devcontainer.json index 8ca3f79..26f713a 100644 --- a/.devcontainer/mcanouil-latest/devcontainer.json +++ b/.devcontainer/mcanouil-latest/devcontainer.json @@ -1,21 +1,19 @@ { - "name": "Latest - Mickaël CANOUIL - Quarto Codespaces", - "image": "ghcr.io/mcanouil/quarto-codespaces:latest", - "remoteUser": "vscode", - "features": { - "ghcr.io/rocker-org/devcontainer-features/quarto-cli:1": { - "version": "prerelease", - "installTinyTex": "false", - "installChromium": "false" - } - }, - "customizations": { - "codespaces": { + "name": "Latest - Mickaël CANOUIL - Quarto Codespaces", + "image": "ghcr.io/mcanouil/quarto-codespaces:latest", + "remoteUser": "vscode", + "features": { + "ghcr.io/rocker-org/devcontainer-features/quarto-cli:1": { + "version": "prerelease" + } + }, + "customizations": { + "codespaces": { "repositories": { "mcanouil/quarto-codespaces": { "permissions": { "contents": "write", - "pull_requests": "write" + "pull_requests": "write" } }, "mcanouil/quarto-issues-experiments": { @@ -23,40 +21,36 @@ "contents": "write" } }, - "mcanouil/*": { + "mcanouil/*": { "permissions": { "contents": "read" } } } }, - "vscode": { - "extensions": [ - "quarto.quarto", - "mcanouil.quarto-wizard", - "REditorSupport.r", - "ms-python.python", - "julialang.language-julia", - "ms-python.black-formatter", - "ms-python.flake8", - "ms-python.vscode-pylance", - "ms-python.pylint", - "ms-python.isort", - "ms-toolsai.jupyter", - "Posit.air-vscode" - ], - "settings": { - "r.rterm.option": [ - "--no-save", - "--no-restore-data", - "--quiet" - ], - "r.useRenvLibPath": true, - "[r]": { - "editor.defaultFormatter": "Posit.air-vscode", - "editor.formatOnSave": true - } - } - } - } + "vscode": { + "extensions": [ + "quarto.quarto", + "mcanouil.quarto-wizard", + "REditorSupport.r", + "ms-python.python", + "julialang.language-julia", + "ms-python.black-formatter", + "ms-python.flake8", + "ms-python.vscode-pylance", + "ms-python.pylint", + "ms-python.isort", + "ms-toolsai.jupyter", + "Posit.air-vscode" + ], + "settings": { + "r.rterm.option": ["--no-save", "--no-restore-data", "--quiet"], + "r.useRenvLibPath": true, + "[r]": { + "editor.defaultFormatter": "Posit.air-vscode", + "editor.formatOnSave": true + } + } + } + } } diff --git a/.devcontainer/universal/devcontainer.json b/.devcontainer/universal/devcontainer.json index b14a257..e739d43 100644 --- a/.devcontainer/universal/devcontainer.json +++ b/.devcontainer/universal/devcontainer.json @@ -1,66 +1,68 @@ { - "name": "Universal - Quarto Codespaces", - "build": { - "dockerfile": "Dockerfile", - "context": ".", - "args": { - "IMAGE": "mcr.microsoft.com/devcontainers/universal:latest" - }, - "options": [ - "--label", "org.opencontainers.image.title=Quarto Codespaces", - "--label", "org.opencontainers.image.description=Quarto Codespaces / Dev Containers setup for quick online testing.", - "--label", "org.opencontainers.image.authors=Mickaël CANOUIL ", - "--label", "org.opencontainers.image.url=https://github.com/mcanouil/quarto-codespaces", - "--label", "org.opencontainers.image.source=https://github.com/mcanouil/quarto-codespaces", - // "--label", "org.opencontainers.image.ref.name=", - // "--label", "org.opencontainers.image.version=", - "--label", "org.opencontainers.image.licenses=MIT" - ] - }, - "remoteUser": "codespace", - "features": { - "./quarto-computing-dependencies": { - "rDeps": "rmarkdown,languageserver,nx10/httpgd@v2.0.3,prompt,lintr", - "pythonDeps": "jupyter,papermill", - "juliaDeps": "IJulia" - }, - "./uv": { - "version": "latest" - }, - "ghcr.io/rocker-org/devcontainer-features/quarto-cli:1": { - "version": "release", - "installTinyTex": "true", - "installChromium": "false" - } - }, - "customizations": { - "vscode": { - "extensions": [ - "quarto.quarto", - "mcanouil.quarto-wizard", - "REditorSupport.r", - "ms-python.python", - "julialang.language-julia", - "ms-python.black-formatter", - "ms-python.flake8", - "ms-python.vscode-pylance", - "ms-python.pylint", - "ms-python.isort", - "ms-toolsai.jupyter", - "Posit.air-vscode" - ], - "settings": { - "r.rterm.option": [ - "--no-save", - "--no-restore-data", - "--quiet" - ], - "r.useRenvLibPath": true, - "[r]": { - "editor.defaultFormatter": "Posit.air-vscode", - "editor.formatOnSave": true - } - } - } - } + "name": "Universal - Quarto Codespaces", + "build": { + "dockerfile": "Dockerfile", + "context": ".", + "args": { + "IMAGE": "mcr.microsoft.com/devcontainers/universal:latest" + }, + "options": [ + "--label", + "org.opencontainers.image.title=Quarto Codespaces", + "--label", + "org.opencontainers.image.description=Quarto Codespaces / Dev Containers setup for quick online testing.", + "--label", + "org.opencontainers.image.authors=Mickaël CANOUIL ", + "--label", + "org.opencontainers.image.url=https://github.com/mcanouil/quarto-codespaces", + "--label", + "org.opencontainers.image.source=https://github.com/mcanouil/quarto-codespaces", + // "--label", "org.opencontainers.image.ref.name=", + // "--label", "org.opencontainers.image.version=", + "--label", + "org.opencontainers.image.licenses=MIT" + ] + }, + "remoteUser": "codespace", + "features": { + "./quarto-computing-dependencies": { + "rDeps": "rmarkdown,languageserver,nx10/httpgd@v2.0.3,prompt,lintr", + "pythonDeps": "jupyter,papermill", + "juliaDeps": "IJulia" + }, + "./uv": { + "version": "latest" + }, + "ghcr.io/rocker-org/devcontainer-features/quarto-cli:1": { + "version": "release", + "installTinyTex": "true", + "installChromium": "false" + } + }, + "customizations": { + "vscode": { + "extensions": [ + "quarto.quarto", + "mcanouil.quarto-wizard", + "REditorSupport.r", + "ms-python.python", + "julialang.language-julia", + "ms-python.black-formatter", + "ms-python.flake8", + "ms-python.vscode-pylance", + "ms-python.pylint", + "ms-python.isort", + "ms-toolsai.jupyter", + "Posit.air-vscode" + ], + "settings": { + "r.rterm.option": ["--no-save", "--no-restore-data", "--quiet"], + "r.useRenvLibPath": true, + "[r]": { + "editor.defaultFormatter": "Posit.air-vscode", + "editor.formatOnSave": true + } + } + } + } } diff --git a/.devcontainer/universal/quarto-computing-dependencies/devcontainer-feature.json b/.devcontainer/universal/quarto-computing-dependencies/devcontainer-feature.json index f2443ba..595fc69 100644 --- a/.devcontainer/universal/quarto-computing-dependencies/devcontainer-feature.json +++ b/.devcontainer/universal/quarto-computing-dependencies/devcontainer-feature.json @@ -9,36 +9,36 @@ "default": "rmarkdown", "description": "Specify what R dependencies to install." }, - "pythonDeps": { - "type": "string", - "default": "jupyter,papermill", - "description": "Specify what Python dependencies to install." - }, - "juliaDeps": { - "type": "string", - "default": "IJulia", - "description": "Specify what Julia dependencies to install." - } + "pythonDeps": { + "type": "string", + "default": "jupyter,papermill", + "description": "Specify what Python dependencies to install." + }, + "juliaDeps": { + "type": "string", + "default": "IJulia", + "description": "Specify what Julia dependencies to install." + } }, "dependsOn": { - "ghcr.io/rocker-org/devcontainer-features/r-rig:1": { - "version": "release", - "vscodeRSupport": "none", - "installDevTools": "false", - "installREnv": "true", - "installRMarkdown": "false" - }, - "ghcr.io/devcontainers/features/python:1": { - "version": "latest", - "enableShared": "true" - }, - "ghcr.io/julialang/devcontainer-features/julia:1": { - "channel": "release" - } + "ghcr.io/rocker-org/devcontainer-features/r-rig:1": { + "version": "release", + "vscodeRSupport": "none", + "installDevTools": "false", + "installREnv": "true", + "installRMarkdown": "false" + }, + "ghcr.io/devcontainers/features/python:1": { + "version": "latest", + "enableShared": "true" + }, + "ghcr.io/julialang/devcontainer-features/julia:1": { + "channel": "release" + } }, "installsAfter": [ "ghcr.io/rocker-org/devcontainer-features/r-rig", "ghcr.io/devcontainers/features/python", "ghcr.io/julialang/devcontainer-features/julia" - ] + ] } diff --git a/.devcontainer/universal/uv/devcontainer-feature.json b/.devcontainer/universal/uv/devcontainer-feature.json index 8e1c05b..fd8a204 100644 --- a/.devcontainer/universal/uv/devcontainer-feature.json +++ b/.devcontainer/universal/uv/devcontainer-feature.json @@ -11,7 +11,5 @@ "type": "string" } }, - "installsAfter": [ - "./quarto-computing-dependencies" - ] + "installsAfter": ["./quarto-computing-dependencies"] } diff --git a/.github/.devcontainer/chrome/devcontainer-feature.json b/.github/.devcontainer/chrome/devcontainer-feature.json index 34b6a2f..e78f5d3 100644 --- a/.github/.devcontainer/chrome/devcontainer-feature.json +++ b/.github/.devcontainer/chrome/devcontainer-feature.json @@ -4,7 +4,7 @@ "name": "Chrome", "description": "Install Google Chrome web browser.", "installsAfter": [ - "ghcr.io/devcontainers/features/common-utils", - "ghcr.io/devcontainers/features/git" + "ghcr.io/devcontainers/features/common-utils", + "ghcr.io/devcontainers/features/git" ] } diff --git a/.github/.devcontainer/decktape/devcontainer-feature.json b/.github/.devcontainer/decktape/devcontainer-feature.json index fccd394..e123b93 100644 --- a/.github/.devcontainer/decktape/devcontainer-feature.json +++ b/.github/.devcontainer/decktape/devcontainer-feature.json @@ -12,8 +12,8 @@ } }, "installsAfter": [ - "ghcr.io/devcontainers/features/common-utils", - "ghcr.io/devcontainers/features/git", + "ghcr.io/devcontainers/features/common-utils", + "ghcr.io/devcontainers/features/git", "./chrome" ] } diff --git a/.github/.devcontainer/decktape/install.sh b/.github/.devcontainer/decktape/install.sh index 429ed83..029844a 100755 --- a/.github/.devcontainer/decktape/install.sh +++ b/.github/.devcontainer/decktape/install.sh @@ -34,7 +34,7 @@ install_decktape() { local version=$1 local url="https://deb.nodesource.com/setup_${version}.x " check_packages curl ca-certificates - curl --proto '=https' --tlsv1.2 -LsSf ${url} | sudo -E bash - + curl --proto '=https' --tlsv1.2 -LsSf ${url} | sudo -E bash - check_packages nodejs npm install -g decktape } diff --git a/.github/.devcontainer/devcontainer.json b/.github/.devcontainer/devcontainer.json index 8a32366..872f581 100644 --- a/.github/.devcontainer/devcontainer.json +++ b/.github/.devcontainer/devcontainer.json @@ -1,25 +1,32 @@ { - "name": "Quarto", - "build": { - "dockerfile": "./Dockerfile", - "context": ".", - "args": { - "IMAGE": "${localEnv:IMAGE}" - // "IMAGE": "buildpack-deps:jammy-curl" - }, - "options": [ - "--label", "org.opencontainers.image.title=Quarto Codespaces", - "--label", "org.opencontainers.image.description=Quarto Codespaces / Dev Containers setup for quick online testing.", - "--label", "org.opencontainers.image.authors=Mickaël CANOUIL ", - "--label", "org.opencontainers.image.url=https://github.com/mcanouil/quarto-codespaces", - "--label", "org.opencontainers.image.source=https://github.com/mcanouil/quarto-codespaces", - // "--label", "org.opencontainers.image.ref.name=", - "--label", "org.opencontainers.image.version=${localEnv:QUARTO_VERSION}", - "--label", "org.opencontainers.image.licenses=MIT" - ] - }, - "remoteUser": "${localEnv:USER}", - "features": { + "name": "Quarto", + "build": { + "dockerfile": "./Dockerfile", + "context": ".", + "args": { + "IMAGE": "${localEnv:IMAGE}" + // "IMAGE": "buildpack-deps:jammy-curl" + }, + "options": [ + "--label", + "org.opencontainers.image.title=Quarto Codespaces", + "--label", + "org.opencontainers.image.description=Quarto Codespaces / Dev Containers setup for quick online testing.", + "--label", + "org.opencontainers.image.authors=Mickaël CANOUIL ", + "--label", + "org.opencontainers.image.url=https://github.com/mcanouil/quarto-codespaces", + "--label", + "org.opencontainers.image.source=https://github.com/mcanouil/quarto-codespaces", + // "--label", "org.opencontainers.image.ref.name=", + "--label", + "org.opencontainers.image.version=${localEnv:QUARTO_VERSION}", + "--label", + "org.opencontainers.image.licenses=MIT" + ] + }, + "remoteUser": "${localEnv:USER}", + "features": { "ghcr.io/devcontainers/features/common-utils:2": { "installZsh": "true", "username": "${localEnv:USER}", @@ -31,11 +38,12 @@ "version": "latest", "ppa": "false" }, - "./quarto-computing-dependencies": { - "rDeps": "rmarkdown,languageserver,nx10/httpgd@v2.0.3,prompt,lintr", - "pythonDeps": "jupyter,papermill", - "juliaDeps": "IJulia" - }, + "./quarto-computing-dependencies": { + "installOnPlatforms": "amd64", + "rDeps": "rmarkdown,languageserver,nx10/httpgd@v2.0.4", + "pythonDeps": "jupyter,papermill", + "juliaDeps": "IJulia" + }, "./uv": { "version": "latest" }, @@ -43,6 +51,7 @@ "./decktape": { "node": "22" }, + "./tinytex": {}, "ghcr.io/rocker-org/devcontainer-features/quarto-cli:1": { "version": "${localEnv:QUARTO_VERSION}", "installTinyTex": "true", diff --git a/.github/.devcontainer/quarto-computing-dependencies/devcontainer-feature.json b/.github/.devcontainer/quarto-computing-dependencies/devcontainer-feature.json index 02a500d..0c91add 100644 --- a/.github/.devcontainer/quarto-computing-dependencies/devcontainer-feature.json +++ b/.github/.devcontainer/quarto-computing-dependencies/devcontainer-feature.json @@ -9,38 +9,38 @@ "default": "rmarkdown", "description": "Specify what R dependencies to install." }, - "pythonDeps": { - "type": "string", - "default": "jupyter,papermill", - "description": "Specify what Python dependencies to install." - }, - "juliaDeps": { - "type": "string", - "default": "IJulia", - "description": "Specify what Julia dependencies to install." - } + "pythonDeps": { + "type": "string", + "default": "jupyter,papermill", + "description": "Specify what Python dependencies to install." + }, + "juliaDeps": { + "type": "string", + "default": "IJulia", + "description": "Specify what Julia dependencies to install." + } }, "dependsOn": { - "ghcr.io/rocker-org/devcontainer-features/r-rig:1": { - "version": "release", - "vscodeRSupport": "none", - "installDevTools": "false", - "installREnv": "true", - "installRMarkdown": "false" - }, - "ghcr.io/devcontainers/features/python:1": { - "version": "latest", - "enableShared": "true" - }, - "ghcr.io/julialang/devcontainer-features/julia:1": { - "channel": "release" - } + "ghcr.io/rocker-org/devcontainer-features/r-rig:1": { + "version": "release", + "vscodeRSupport": "none", + "installDevTools": "false", + "installREnv": "true", + "installRMarkdown": "false" + }, + "ghcr.io/devcontainers/features/python:1": { + "version": "latest", + "enableShared": "true" + }, + "ghcr.io/julialang/devcontainer-features/julia:1": { + "channel": "release" + } }, "installsAfter": [ - "ghcr.io/devcontainers/features/common-utils", - "ghcr.io/devcontainers/features/git", + "ghcr.io/devcontainers/features/common-utils", + "ghcr.io/devcontainers/features/git", "ghcr.io/rocker-org/devcontainer-features/r-rig", "ghcr.io/devcontainers/features/python", "ghcr.io/julialang/devcontainer-features/julia" - ] + ] } diff --git a/.github/.devcontainer/quarto-computing-dependencies/install.sh b/.github/.devcontainer/quarto-computing-dependencies/install.sh index 89c7a31..d00dd04 100755 --- a/.github/.devcontainer/quarto-computing-dependencies/install.sh +++ b/.github/.devcontainer/quarto-computing-dependencies/install.sh @@ -6,6 +6,8 @@ export DEBIAN_FRONTEND=noninteractive USERNAME=${USERNAME:-${_REMOTE_USER:-"automatic"}} +PLATFORMS=${INSTALL_ON_PLATFORMS:-"amd64,arm64"} + R_DEPS=${RDEPS:-"rmarkdown"} PYTHON_DEPS=${PYTHONDEPS:-"jupyter,papermill"} JULIA_DEPS=${JULIADEPS:-"IJulia"} @@ -15,6 +17,12 @@ if [ "$(id -u)" -ne 0 ]; then exit 1 fi +architecture="$(dpkg --print-architecture)" +if [ "${architecture}" != "amd64" ] && [ "${architecture}" != "arm64" ]; then + echo "(!) Architecture ${architecture} unsupported" + exit 2 +fi + # Determine the appropriate non-root user if [ "${USERNAME}" = "auto" ] || [ "${USERNAME}" = "automatic" ]; then USERNAME="" @@ -50,8 +58,14 @@ quarto_julia_deps() { su "${USERNAME}" -c "~/.juliaup/bin/julia -e 'using Pkg; Pkg.add.([\"${deps}\"])'" } -quarto_r_deps ${R_DEPS} -quarto_python_deps ${PYTHON_DEPS} -quarto_julia_deps ${JULIA_DEPS} +if [[ ",${PLATFORMS}," == *",${architecture},"* ]]; then + quarto_r_deps ${R_DEPS} + quarto_python_deps ${PYTHON_DEPS} + quarto_julia_deps ${JULIA_DEPS} +else + echo "(!) Skipping R, Python, and Julia dependencies for ${architecture} architecture" +fi apt-get clean && rm -rf /var/lib/apt/lists/* + +echo "Done!" diff --git a/.github/.devcontainer/tinytex/devcontainer-feature.json b/.github/.devcontainer/tinytex/devcontainer-feature.json new file mode 100644 index 0000000..548956b --- /dev/null +++ b/.github/.devcontainer/tinytex/devcontainer-feature.json @@ -0,0 +1,10 @@ +{ + "id": "tinytex", + "version": "1.0.0", + "name": "TinyTeX", + "description": "Install TinyTeX, a lightweight LaTeX distribution.", + "installsAfter": [ + "ghcr.io/devcontainers/features/common-utils", + "ghcr.io/rocker-org/devcontainer-features/quarto-cli" + ] +} diff --git a/.github/.devcontainer/tinytex/install.sh b/.github/.devcontainer/tinytex/install.sh new file mode 100644 index 0000000..98527af --- /dev/null +++ b/.github/.devcontainer/tinytex/install.sh @@ -0,0 +1,61 @@ +#!/usr/bin/env bash + +set -e + +export DEBIAN_FRONTEND=noninteractive + +USERNAME=${USERNAME:-${_REMOTE_USER:-"automatic"}} + +if [ "$(id -u)" -ne 0 ]; then + echo -e 'Script must be run as root. Use sudo, su, or add "USER root" to your Dockerfile before running this script.' + exit 1 +fi + +architecture="$(dpkg --print-architecture)" +if [ "${architecture}" != "amd64" ] && [ "${architecture}" != "arm64" ]; then + echo "(!) Architecture ${architecture} unsupported" + exit 2 +fi + +# Determine the appropriate non-root user +if [ "${USERNAME}" = "auto" ] || [ "${USERNAME}" = "automatic" ]; then + USERNAME="" + POSSIBLE_USERS=("vscode" "node" "codespace" "$(awk -v val=1000 -F ":" '$3==val{print $1}' /etc/passwd)") + for CURRENT_USER in "${POSSIBLE_USERS[@]}"; do + if id -u "${CURRENT_USER}" >/dev/null 2>&1; then + USERNAME=${CURRENT_USER} + break + fi + done + if [ "${USERNAME}" = "" ]; then + USERNAME=root + fi +elif [ "${USERNAME}" = "none" ] || ! id -u "${USERNAME}" >/dev/null 2>&1; then + USERNAME=root +fi + +apt_get_update() { + if [ "$(find /var/lib/apt/lists/* | wc -l)" = "0" ]; then + echo "Running apt-get update..." + apt-get update -y + fi +} + +# Checks if packages are installed and installs them if not +check_packages() { + if ! dpkg -s "$@" >/dev/null 2>&1; then + apt_get_update + apt-get -y install --no-install-recommends "$@" + fi +} + +echo "Installing TinyTeX..." +check_packages libfontconfig +# su "${USERNAME}" -c 'quarto install tinytex --quiet' +check_packages curl ca-certificates +su "${USERNAME}" -c 'curl -sL "https://yihui.org/tinytex/install-bin-unix.sh" | sh' +echo "TinyTeX installation complete." + +apt-get clean && rm -rf /var/lib/apt/lists/* + +echo "Done!" diff --git a/.github/.devcontainer/uv/devcontainer-feature.json b/.github/.devcontainer/uv/devcontainer-feature.json index 8e1c05b..a252922 100644 --- a/.github/.devcontainer/uv/devcontainer-feature.json +++ b/.github/.devcontainer/uv/devcontainer-feature.json @@ -12,6 +12,7 @@ } }, "installsAfter": [ + "ghcr.io/devcontainers/features/common-utils", "./quarto-computing-dependencies" ] } diff --git a/.github/.devcontainer/uv/install.sh b/.github/.devcontainer/uv/install.sh index 2a06ddb..7844db4 100644 --- a/.github/.devcontainer/uv/install.sh +++ b/.github/.devcontainer/uv/install.sh @@ -13,6 +13,12 @@ if [ "$(id -u)" -ne 0 ]; then exit 1 fi +architecture="$(dpkg --print-architecture)" +if [ "${architecture}" != "amd64" ] && [ "${architecture}" != "arm64" ]; then + echo "(!) Architecture ${architecture} unsupported" + exit 2 +fi + # Determine the appropriate non-root user if [ "${USERNAME}" = "auto" ] || [ "${USERNAME}" = "automatic" ]; then USERNAME="" @@ -53,9 +59,12 @@ install_uv() { } enable_autocompletion() { - echo 'eval "$(uv generate-shell-completion zsh)"' >> /usr/share/zsh/vendor-completions/_uv + echo 'eval "$(uv generate-shell-completion zsh)"' >>/usr/share/zsh/vendor-completions/_uv } install_uv ${VERSION} enable_autocompletion + apt-get clean && rm -rf /var/lib/apt/lists/* + +echo "Done!" diff --git a/.github/workflows/devcontainer.yml b/.github/workflows/devcontainer.yml index 9d39405..c3e1d56 100644 --- a/.github/workflows/devcontainer.yml +++ b/.github/workflows/devcontainer.yml @@ -6,6 +6,7 @@ on: types: [published] schedule: - cron: "0 6 * * sun" + pull_request: concurrency: group: ${{ github.workflow }}-${{ github.event_name }} @@ -19,6 +20,7 @@ jobs: build: runs-on: ubuntu-latest name: Build - Quarto ${{ matrix.QUARTO_VERSION }} (${{ matrix.IMAGE }}) + if: ${{ github.event_name == 'release' || github.event_name == 'workflow_dispatch' || github.event_name == 'pull_request' }} strategy: matrix: include: @@ -63,9 +65,8 @@ jobs: cacheFrom: ghcr.io/${{ github.repository }} noCache: ${{ github.event_name == 'release' || github.event_name == 'workflow_dispatch' }} imageTag: ${{ matrix.IMAGE_TAG }} - push: always - platform: linux/amd64 - # platform: linux/amd64,linux/arm64 + push: ${{ github.event_name == 'release' || github.event_name == 'workflow_dispatch' && 'always' || 'never' }} + platform: linux/amd64,linux/arm64 env: IMAGE: ${{ matrix.IMAGE }} QUARTO_VERSION: ${{ matrix.QUARTO_VERSION }} @@ -73,11 +74,14 @@ jobs: build-versions: runs-on: ubuntu-latest + if: ${{ github.event_name == 'release' || github.event_name == 'workflow_dispatch' || github.event_name == 'schedule' }} needs: - "build" name: Build - Quarto ${{ matrix.QUARTO_VERSION }} strategy: matrix: + PLATFORM: + - "linux/amd64" QUARTO_VERSION: - "1.0" - "1.1" @@ -87,6 +91,13 @@ jobs: - "1.5" - "1.6" - "1.7" + include: + - QUARTO_VERSION: "1.0" + PLATFORM: "linux/amd64" + - QUARTO_VERSION: "1.1" + PLATFORM: "linux/amd64" + - QUARTO_VERSION: "1.2" + PLATFORM: "linux/amd64" steps: - uses: actions/checkout@v4 - name: Set up QEMU for multi-architecture builds @@ -108,15 +119,14 @@ jobs: noCache: ${{ github.event_name == 'release' || github.event_name == 'workflow_dispatch' }} imageTag: ${{ matrix.QUARTO_VERSION }},${{ matrix.QUARTO_VERSION }}-jammy push: always - platform: linux/amd64 - # platform: linux/amd64,linux/arm64 + platform: ${{ matrix.PLATFORM }} configFile: ${{ format('.devcontainer/mcanouil-{0}/devcontainer.json', matrix.QUARTO_VERSION) }} - + clean: + runs-on: ubuntu-latest needs: - - "build" - "build-versions" - runs-on: ubuntu-latest + if: ${{ github.event_name == 'release' || github.event_name == 'workflow_dispatch' || github.event_name == 'schedule' }} continue-on-error: true steps: - name: Delete obsolete/untagged versions diff --git a/init-env.sh b/init-env.sh index 0017c4e..aa7674d 100755 --- a/init-env.sh +++ b/init-env.sh @@ -12,39 +12,47 @@ show_help() { } initialise_r() { + local deps=$1 + deps=$(echo "${deps}" | sed 's/,/","/g') if [ "${FORCE}" = true ] || [ ! -f "renv.lock" ]; then if [ -f ".Rprofile" ] && grep -q 'source("renv/activate.R")' .Rprofile; then sed -i '' '/source("renv\/activate.R")/d' .Rprofile fi Rscript -e 'renv::init(bare = FALSE)' - Rscript -e 'renv::install(c("rmarkdown", "languageserver", "nx10/httpgd@v2.0.3", "prompt", "lintr", "cli"))' + Rscript -e "renv::install(c('${deps}'))" Rscript -e 'renv::snapshot(type = "all")' fi } initialise_python() { + local deps=$1 + deps=$(echo "${deps}" | sed 's/,/ /g') if [ "${FORCE}" = true ] || [ ! -f "requirements.txt" ]; then python3 -m venv .venv source .venv/bin/activate - python3 -m pip install jupyter papermill + python3 -m pip install ${deps} python3 -m pip freeze > requirements.txt fi } initialise_uv() { + local deps=$1 + deps=$(echo "${deps}" | sed 's/,/ /g') if [ "${FORCE}" = true ] || [ ! -f "uv.lock" ]; then uv init --no-package --vcs none --bare --no-readme --author-from none uv venv source .venv/bin/activate - uv add jupyter papermill + uv add ${deps} uv sync fi } initialise_julia() { + local deps=$1 + deps=$(echo "${deps}" | sed 's/,/","/g') if [ "${FORCE}" = true ] || [ ! -f "Project.toml" ]; then julia -e 'using Pkg; Pkg.activate("."); Pkg.instantiate()' - julia --project=. -e 'using Pkg; Pkg.add("IJulia")' + julia --project=. -e "using Pkg; Pkg.add([\"${deps}\"])" fi } @@ -73,23 +81,23 @@ while [[ "$#" -gt 0 ]]; do shift done -case $WHAT in +case ${WHAT} in all) - initialise_r - initialise_uv - initialise_julia + initialise_r "rmarkdown,languageserver,nx10/httpgd@v2.0.4" + initialise_uv "jupyter,papermill" + initialise_julia "IJulia" ;; r) - initialise_r + initialise_r "rmarkdown,languageserver,nx10/httpgd@v2.0.4" ;; python) - initialise_uv + initialise_uv "jupyter,papermill" ;; julia) - initialise_julia + initialise_julia "IJulia" ;; *) - echo "Unknown option for --what: $WHAT" + echo "Unknown option for --what: ${WHAT}" show_help exit 1 ;;