Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ContainerRegistry] Migrate samples to v2 workflow #14750

Merged
merged 6 commits into from
Apr 9, 2021
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
18 changes: 13 additions & 5 deletions sdk/containerregistry/container-registry/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,15 @@
"audit": "node ../../../common/scripts/rush-audit.js && rimraf node_modules package-lock.json && npm i --package-lock-only 2>&1 && npm audit",
"build:browser": "tsc -p . && cross-env ONLY_BROWSER=true rollup -c 2>&1",
"build:node": "tsc -p . && cross-env ONLY_NODE=true rollup -c 2>&1",
"build:samples": "dev-tool samples prep && cd dist-samples && tsc -p .",
"build:samples": "echo Obsolete.",
"build:test": "tsc -p . && rollup -c 2>&1",
"build": "tsc -p . && rollup -c 2>&1 && api-extractor run --local",
"check-format": "prettier --list-different --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.ts\" \"test/**/*.ts\" \"*.{js,json}\"",
"check-format": "prettier --list-different --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.ts\" \"test/**/*.ts\" \"samples-dev/**/*.ts\" \"*.{js,json}\"",
"clean": "rimraf dist dist-* temp types *.tgz *.log",
"docs": "typedoc --excludePrivate --excludeNotExported --excludeExternals --stripInternal --mode file --out ./dist/docs ./src",
"execute:samples": "npm run build:samples && dev-tool samples run dist-samples/javascript dist-samples/typescript/dist/dist-samples/typescript/src/",
"execute:samples": "dev-tool samples run samples-dev",
"extract-api": "tsc -p . && api-extractor run --local",
"format": "prettier --write --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.ts\" \"test/**/*.ts\" \"*.{js,json}\"",
"format": "prettier --write --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.ts\" \"test/**/*.ts\" \"samples-dev/**/*.ts\" \"*.{js,json}\"",
"generate:client": "autorest --typescript --v3 swagger",
"integration-test:browser": "echo skipped",
"integration-test:node": "nyc mocha -r esm --require source-map-support/register --reporter ../../../common/tools/mocha-multi-reporter.js --timeout 5000000 --full-trace \"dist-esm/test/{,!(browser)/**/}/*.spec.js\"",
Expand Down Expand Up @@ -125,6 +125,14 @@
"util": "^0.12.1"
},
"//sampleConfiguration": {
"skipFolder": true
"skipFolder": true,
"productName": "Azure Container Registry",
"productSlugs": [
"azure",
"azure-container-registry"
],
"requiredResources": {
"Azure Container Registry": "https://docs.microsoft.com/azure/container-registry/container-registry-get-started-portal"
}
}
}
3 changes: 2 additions & 1 deletion sdk/containerregistry/container-registry/sample.env
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# Used in most samples. Retrieve these values from an instance in the Azure
# Portal.

# Retrieve this value from a Container Registry instance in the Azure Portal.
CONTAINER_REGISTRY_ENDPOINT: "<container registry REST API endpoint>",
REPOSITORY_NAME="<repository name>"

# Used to authenticate using Azure AD as a service principal for role-based
# authentication in the tokenAuth sample.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

/**
* @summary Demonstrates the use of a ContainerRegistryClient.
* @azsdk-weight 10
*/

import { ContainerRegistryClient } from "@azure/container-registry";
import { DefaultAzureCredential } from "@azure/identity";
import * as dotenv from "dotenv";
dotenv.config();

export async function main() {
// endpoint should be in the form of "https://myregistryname.azurecr.io"
// where "myregistryname" is the actual name of your registry
const endpoint = process.env.CONTAINER_REGISTRY_ENDPOINT || "<endpoint>";
const client = new ContainerRegistryClient(endpoint, new DefaultAzureCredential());
await listRepositories(client);

// Advanced: listing by pages
const pageSize = 2;
await listRepositoriesByPages(client, pageSize);

const repositoryName = "repository-name-to-delete";
await deleteRepository(client, repositoryName);
}

async function listRepositories(client: ContainerRegistryClient) {
console.log("Listing repositories");
const iterator = client.listRepositories();
for await (const repository of iterator) {
console.log(` repository: ${repository}`);
}
}

async function listRepositoriesByPages(client: any, pageSize: number) {
console.log("Listing repositories by pages");
const pages = client.listRepositories().byPage({ maxPageSize: pageSize });
let result = await pages.next();
while (!result.done) {
console.log(" -- page -- ");
for (const repository of result.value) {
console.log(` repository: ${repository}`);
}
result = await pages.next();
}
}

async function deleteRepository(client: ContainerRegistryClient, repositoryName: string) {
console.log("Deleting a repository");
const response = await client.deleteRepository(repositoryName);
console.log(
`Artifacts deleted: ${(response &&
response.deletedRegistryArtifactDigests &&
response.deletedRegistryArtifactDigests.length) ||
0}`
);
console.log(
`Tags deleted: ${(response &&
response.deletedRegistryArtifactDigests &&
response.deletedRegistryArtifactDigests.length) ||
0}`
);
}

main().catch((err) => {
console.error("The sample encountered an error:", err);
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

/**
* @summary Demonstrates the use of a ContainerRepositoryClient.
* @azsdk-weight 5
*/

import { ContainerRepositoryClient, RegistryArtifactProperties } from "@azure/container-registry";
import { DefaultAzureCredential } from "@azure/identity";
import * as dotenv from "dotenv";
dotenv.config();

export async function main() {
// endpoint should be in the form of "https://myregistryname.azurecr.io"
// where "myregistryname" is the actual name of your registry
const endpoint = process.env.CONTAINER_REGISTRY_ENDPOINT || "<endpoint>";
const repository = process.env.REPOSITORY_NAME || "<repository name>";

const client = new ContainerRepositoryClient(endpoint, repository, new DefaultAzureCredential());
await getProperties(client);
await listTags(client);

const artifacts = await listArtifacts(client);

if (artifacts && artifacts.length) {
const digest = artifacts[0].digest;
if (digest) {
await getArtifactProperties(client, digest);

await deleteArtifact(client, digest);
}
}

// Advanced: listing by pages
const pageSize = 2;
await listTagsByPages(client, pageSize);
await listArtifactsByPages(client, pageSize);
}

async function listTags(client: ContainerRepositoryClient) {
console.log("Listing tags");
const iterator = client.listTags({ orderBy: "timeasc" });
for await (const tag of iterator) {
console.log(` tag: ${tag.name}`);
console.log(` digest: ${tag.digest}`);
console.log(` created on: ${tag.createdOn}`);
console.log(` last updated on: ${tag.lastUpdatedOn}`);
}
}

async function listTagsByPages(client: ContainerRepositoryClient, pagesSize: number) {
console.log("Listing tags by pages");
const pages = client.listTags().byPage({ maxPageSize: pagesSize });
let result = await pages.next();
while (!result.done) {
console.log(" -- page -- ");
for (const tag of result.value) {
console.log(` tag: ${tag.name}`);
console.log(` digest: ${tag.digest}`);
console.log(` created on: ${tag.createdOn}`);
console.log(` last updated on: ${tag.lastUpdatedOn}`);
console.log("");
}
result = await pages.next();
}
}

async function listArtifacts(
client: ContainerRepositoryClient
): Promise<RegistryArtifactProperties[]> {
console.log("Listing artifacts");
const artifacts: RegistryArtifactProperties[] = [];
const iterator = client.listRegistryArtifacts();
for await (const artifact of iterator) {
artifacts.push(artifact);
console.log(` digest: ${artifact.digest}`);
console.log(` created on: ${artifact.createdOn}`);
console.log(` last updated on: ${artifact.lastUpdatedOn}`);
}

return artifacts;
}

async function listArtifactsByPages(client: any, pageSize: number) {
console.log("Listing artifacts by pages");
const pages = client.listRegistryArtifacts().byPage({ maxPageSize: pageSize });
let result = await pages.next();
while (!result.done) {
console.log(" -- page -- ");
for (const artifact of result.value) {
console.log(` digest: ${artifact.digest}`);
console.log(` created on: ${artifact.createdOn}`);
console.log(` last updated on: ${artifact.lastUpdatedOn}`);
console.log("");
}
result = await pages.next();
}
}

async function getProperties(client: ContainerRepositoryClient) {
console.log("Retrieving repository properties...");
const properties = await client.getProperties();
console.log(` name: ${properties.name}`);
console.log(` created on: ${properties.createdOn}`);
console.log(` last updated on: ${properties.lastUpdatedOn}`);
console.log(` artifact count: ${properties.registryArtifactCount}`);
console.log(` tag count: ${properties.tagCount}`);
const writableProps = properties.writeableProperties;
if (writableProps) {
console.log(" writable properties:");
console.log(
` { canDelete: ${writableProps.canDelete}, canList: ${writableProps.canList}, canRead: ${writableProps.canRead}, canWrite: ${writableProps.canWrite}}`
);
}
}

async function getArtifactProperties(client: ContainerRepositoryClient, digest: string) {
console.log(`Retrieving registry artifact properties for ${digest}`);
const properties = await client.getRegistryArtifactProperties(digest);
console.log(` created on: ${properties.createdOn}`);
console.log(` last updated on: ${properties.lastUpdatedOn}`);
console.log(` arch : ${properties.cpuArchitecture}`);
console.log(` os : ${properties.operatingSystem}`);
console.log(` size : ${properties.size} bytes`);
}

async function deleteArtifact(client: ContainerRepositoryClient, digest: string) {
console.log(`Deleting registry artifact for ${digest}`);
await client.deleteRegistryArtifact(digest);
}

main().catch((err) => {
console.error("The sample encountered an error:", err);
});

This file was deleted.

This file was deleted.

10 changes: 0 additions & 10 deletions sdk/containerregistry/container-registry/samples/tsconfig.json

This file was deleted.

This file was deleted.

Loading