Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 3 additions & 9 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,6 @@ name: Create a release
# git-cliff derives the version from conventional commits, we bump the three
# manifest version fields + CHANGELOG.md, create the GitHub release, and attach
# the QoderWork ZIP (contents of `apify/`).
#
# NOTE: the repo guard below is set to daveomri/apify-qoder-plugin for testing.
# When this moves to apify/apify-qoder-plugin, switch it back to the apify-org
# check and use secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN for the push.

permissions: {}

Expand Down Expand Up @@ -45,9 +41,9 @@ jobs:
release_notes: ${{ steps.release_metadata.outputs.release_notes }}
steps:
- name: Verify running on main in the expected repository
if: github.ref != 'refs/heads/main' || github.repository != 'daveomri/apify-qoder-plugin'
if: github.ref != 'refs/heads/main' || github.repository != 'apify/apify-qoder-plugin'
run: |
echo "::error title=Wrong branch or repository::Releases must run from main in daveomri/apify-qoder-plugin. ref=${{ github.ref }} repo=${{ github.repository }}"
echo "::error title=Wrong branch or repository::Releases must run from main in apify/apify-qoder-plugin. ref=${{ github.ref }} repo=${{ github.repository }}"
exit 1
- name: Validate inputs
if: inputs.release_type == 'custom' && inputs.custom_version == ''
Expand All @@ -74,9 +70,7 @@ jobs:
- uses: actions/checkout@v4
with:
fetch-depth: 0
# Falls back to the default GITHUB_TOKEN when the service-account
# secret is absent (e.g. this personal test repo).
token: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN || github.token }}
token: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }}
- name: Bump version in all three manifest fields
env:
VERSION: ${{ needs.release_metadata.outputs.version_number }}
Expand Down
29 changes: 0 additions & 29 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,32 +1,3 @@
# Changelog

All notable changes to this project will be documented in this file.

## [0.1.0](https://github.com/daveomri/apify-qoder-plugin/releases/tag/v0.1.0) (2026-07-22)

### 🚀 Features

- Implement first version of the plugin ([aa6c005](https://github.com/daveomri/apify-qoder-plugin/commit/aa6c005b86e80b47a307f79e2c89a1b2c828b1bc)) by [@daveomri](https://github.com/daveomri)
- Add initial project structure with .gitignore, CONTRIBUTING, RELEASE, and workflow files ([04eb1df](https://github.com/daveomri/apify-qoder-plugin/commit/04eb1df0272658167849cb206cadc721d7c85101)) by [@daveomri](https://github.com/daveomri)

### 🐛 Bug Fixes

- Fix plugin.json ([b3dd7cd](https://github.com/daveomri/apify-qoder-plugin/commit/b3dd7cd86dff48553ac42f2c55fb076a97e7874a)) by [@daveomri](https://github.com/daveomri)


# Changelog

All notable changes to the **Apify for Qoder** plugin are documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.1.0] - Initial Qoder release

### Added
- `apify/.qoder-plugin/plugin.json` manifest with Qoder plugin metadata.
- `.qoder-plugin/marketplace.json` registry (repo root) cataloging the `./apify` plugin.
- `apify` MCP server entry in `.mcp.json` pointing to `https://mcp.apify.com` (OAuth on first use).
- Five bundled skills: `apify-ultimate-scraper`, `apify-actor-development`, `apify-actorization`, `apify-generate-output-schema`, `apify-sdk-integration`.
- `apify` subagent that routes requests to the right skill or MCP tool.
- Role instruction doc at `.qoder/rules/apify.md`.
- Apache-2.0 license.
63 changes: 0 additions & 63 deletions CONTRIBUTING.md

This file was deleted.

15 changes: 6 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,11 @@ Extract data from any website with thousands of trusted scrapers, crawlers, and

## Installation

Install from the QoderWork Expert Kits marketplace, or add the bundle manually:
Installation steps live in the Apify docs — **[Apify → Qoder integration](https://docs.apify.com/integrations/qoder)**:

```bash
qodercli plugins install ./apify-qoder-plugin
```

The same bundle installs in Qoder IDE/CLI and QoderWork.
- **[Qoder CLI](https://docs.apify.com/integrations/qoder-cli)**
- **[Qoder IDE](https://docs.apify.com/integrations/qoder-ide)**
- **[QoderWork](https://docs.apify.com/integrations/qoder-work)**

## Authentication

Expand All @@ -45,10 +43,9 @@ The `apify` subagent picks the right route and skill automatically.

## Maintainers

The plugin lives in [`apify/`](./apify). Its `skills/` and `agents/` are **generated** from the `apify-plugins-internal` source of truth (the `qoder` platform). **Do not hand-edit them here**; change them upstream and rebuild. The manifest (`apify/.qoder-plugin/plugin.json`), `apify/.mcp.json`, `apify/qoder.md`, and `apify/CONNECTORS.md` are maintained directly in this repo.
The plugin lives in [`apify/`](./apify). Its `skills/` and `agents/` are **generated** from the `apify-plugins-internal` source of truth (the `qoder` platform) and propagate into this repo automatically via the sync — **do not hand-edit or hand-add them here**; change them upstream. The manifest (`apify/.qoder-plugin/plugin.json`), `apify/.mcp.json`, and `apify/qoder.md` are maintained directly in this repo.

- **[CONTRIBUTING.md](./CONTRIBUTING.md):** repo layout, generated-vs-manual files, the `apify-plugins-internal` relationship, local dev/test.
- **[RELEASE.md](./RELEASE.md):** versioning, cutting a release, and publishing to QoderWork and the Qoder CLI marketplace.
- **[RELEASE.md](./RELEASE.md):** versioning, cutting a release, and publishing to the marketplace (QoderWork/Qoder IDE and Qoder CLI).

## License

Expand Down
43 changes: 20 additions & 23 deletions RELEASE.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# Releasing & Publishing

The plugin ships through two independent channels from this one repo:
The plugin ships through two channels, both sourced from the marketplace:

- **Qoder CLI / IDE:** installed straight from the git repo (marketplace). No build needed.
- **QoderWork:** a ZIP uploaded to the QoderWork publish form. Manual, review-gated.
- **Qoder CLI:** installed from the marketplace by manually adding the repo link. No build needed.
- **QoderWork & Qoder IDE:** installed from the marketplace after the plugin is submitted via ZIP and the publish form. Manual, review-gated.

## Versioning

Expand All @@ -24,7 +24,7 @@ Releases are triggered from the **Actions** tab — no manual tagging. On dispat
3. **`create_github_release`** — tags that commit and publishes the GitHub release with the generated notes.
4. **`package_zip`** — zips the **contents of `apify/`** (so `.qoder-plugin/` is at the ZIP root) and attaches `apify-qoder-plugin-<tag>.zip` to the release.

That ZIP is the artifact for QoderWork.
That ZIP is the artifact for the QoderWork & Qoder IDE marketplace.

### How to run it

Expand All @@ -35,36 +35,33 @@ That ZIP is the artifact for QoderWork.
- `custom` — set **custom_version** explicitly (e.g. `0.1.0`). **Use this for the very first release**, since `auto` has no prior tag to diff against.
3. Run it, then check the `chore(release): <version>` commit diff and the published release.

> **Repo/token note.** The workflow's repo guard is currently set to `daveomri/apify-qoder-plugin` for testing, and the push uses the default `GITHUB_TOKEN` (falling back from `APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN`). Requires *Settings → Actions → General → Workflow permissions = Read and write*. When this moves to `apify/apify-qoder-plugin`, switch the guard back to the apify-org check; the service-account token is then used automatically.
## 2. Publish to QoderWork & Qoder IDE (public marketplace)

## 2. Publish to QoderWork (public marketplace)

QoderWork publishing is a **manual, review-gated** step in the web app. There is no git/API auto-publish.
Publishing is a **manual, review-gated** step in the web app. There is no git/API auto-publish. Both QoderWork and Qoder IDE install the plugin from this marketplace listing.

1. Go to **qoder.com > My Publications > Publish > Plugin**.
2. Fill the **Publish Plugin** form:
- **Icon:** `assets/icon.png` (PNG/JPG/WebP, 1:1, ≤500 KB). *SVG is not accepted.*
- **Icon:** upload `assets/icon.png` 1:1, ≤500 KB, PNG/JPG/WebP (SVG is not accepted).
- **Display name:** `Apify`
- **Description:** a marketplace-friendly summary.
- **Category:** pick from the dropdown (e.g. Productivity / Developer Tools).
- **Contact:** `support@apify.com` or the GitHub repo URL.
- **Plugin file:** the `apify-qoder-plugin-<tag>.zip` from the GitHub release (must contain `plugin.json`; ≤500 files, ≤100 MB).
- **Description:** use the `description` field from `apify/.qoder-plugin/plugin.json`.
- **Category:** `Data Analysis` (from the fixed dropdown: Administration · HR · Finance · Legal · Marketing · Sales · Product & R&D · Operations · Data Analysis · Supply Chain · Design · Government & Public Affairs · Healthcare · Education · Consulting · Creation · Investment · Other).
- **Developer signature:** `Apify` (shown publicly as "by Apify"; defaults to the submitting account's name, so set it explicitly).
- **Contact:** `support@apify.com`
- **Plugin file:** `apify-qoder-plugin-<tag>.zip` from the GitHub release (must contain `plugin.json`; ≤500 files, ≤100 MB).
3. **Submit for Review** (Plugin review is a structural pre-check + automated review).
4. Manage the listing under **My Publications** (installs, edit info, new versions, delist/relist). A new version re-triggers full review; existing users get an opt-in update notification.

## 3. Distribute via Qoder CLI / IDE (marketplace)
## 3. Installing the plugin (end users)

No build or ZIP. The CLI reads the repo's root `.qoder-plugin/marketplace.json`:
End-user installation is documented in the Apify docs — **[Apify → Qoder integration](https://docs.apify.com/integrations/qoder)**:

```bash
qodercli plugins marketplace add apify/apify-qoder-plugin # owner/repo or the git URL
qodercli plugins install apify@apify # plugin-name @ marketplace-name
qodercli plugins marketplace update # pull later updates
```
- **[Qoder CLI](https://docs.apify.com/integrations/qoder-cli)**
- **[Qoder IDE](https://docs.apify.com/integrations/qoder-ide)**
- **[QoderWork](https://docs.apify.com/integrations/qoder-work)**

## Notes & open items

- `.qoder-plugin/marketplace.json` is **Qoder-CLI-only**. QoderWork ignores it and takes listing metadata from the publish form.
- **MCP auth:** the bundled `.mcp.json` uses the bare `https://mcp.apify.com` URL, which works via OAuth in the Qoder CLI/IDE. For the **QoderWork public marketplace**, the "resolvable dependencies" rule may require the `{{USER_CONFIG}}` + `_setup` declaration form, or an officially listed Apify **Connector**. Verify on first QoderWork submission.
- `.qoder-plugin/marketplace.json` is **Qoder-CLI-only**. QoderWork and Qoder IDE ignore it and take listing metadata from the publish form.
- **MCP auth:** the bundled `.mcp.json` uses the bare `https://mcp.apify.com` URL; Qoder authorizes via OAuth on first use (no API token to paste). Verified in the Qoder CLI.
- **Naming:** QoderWork favors a real-world role/job-title name; "Apify" is a brand and may draw review feedback.
- **Skill content placeholders:** skills document credentials with placeholders (`<APIFY_TOKEN>`, `export APIFY_TOKEN=your_token_here`). This is standard and satisfies the "no real credentials in examples" rule, but a strict automated review *could* flag them. Watch for this on the first QoderWork submission.
- **Skill content placeholders:** skills document credentials with placeholders (`<APIFY_TOKEN>`, `export APIFY_TOKEN=your_token_here`). This is standard and satisfies the "no real credentials in examples" rule, but a strict automated review *could* flag them. Watch for this on the first marketplace submission.
10 changes: 2 additions & 8 deletions apify/.qoder-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,20 +1,14 @@
{
"name": "apify",
"version": "0.1.0",
"description": "Extract data from any website with thousands of trusted scrapers, crawlers, and automations from Apify Store. Run ready-made Actors for social media, e-commerce, search engines, maps, and travel sites, or build, debug, and publish your own.",
"description": "Extract data from any website with thousands of trusted scrapers, crawlers, and automations from Apify Store. Integrate ready-made Actors to access all popular social media, video, e-commerce, search engines, maps, and travel sites. Build, debug, publish, and monetize new Actors on Apify.",
"author": {
"name": "Apify",
"url": "https://apify.com"
},
"homepage": "https://apify.com",
"repository": "https://github.com/apify/apify-qoder-plugin",
"license": "Apache-2.0",
"keywords": [
"apify",
"web-scraping",
"data-extraction",
"actors",
"mcp"
],
"keywords": ["apify", "web-scraping", "actors", "mcp", "automation"],
"mcpServers": "./.mcp.json"
}
13 changes: 0 additions & 13 deletions apify/CONNECTORS.md

This file was deleted.

Loading
Loading